1. 程式人生 > >Servlet與JSP

Servlet與JSP

1、說一說Servlet生命週期
Servlet生命週期包括三部分:
初始化:Web容器載入servlet,呼叫init()方法e吶t
處理請求:當請求到達時,執行其service()方法。service()自動派遣執行與請求相對應的doXXX(doGet或者doPost)方法。
銷燬:服務結束,web容器會呼叫servlet的distroy ()方法銷燬servlet。
2、get提交和post提交有何區別
(1)get一般用於從伺服器上獲取資料,post一般用於向伺服器傳送資料
GET 請求可被快取請求保留在瀏覽器歷史記錄中GET 請求可被收藏為書籤GET 請求不應在處理敏感資料時使用請求有長度限制
Post正好相反

(2)請求的時候引數的位置有區別,get的引數是拼接在url後面,使用者在瀏覽器位址列可以看到。post是放在http包的包體中。
比如說使用者註冊,你不能把使用者提交的註冊資訊用get的方式吧,那不是說把使用者的註冊資訊都顯示在Url上了嗎,是不安全的。
(3)能提交的資料有區別,get方式能提交的資料只能是文字,且大小不超過1024個位元組,而post不僅可以提交文字還有二進位制檔案。
所以說想上傳檔案的話,那我們就需要使用post請求方式
(4)servlet在處理請求的時候分別對應使用doGet和doPost方式進行處理請求
3、JSP與Servlet有什麼區別
Servlet是伺服器端的程式,動態生成html頁面傳送到客戶端,但是這樣程式裡會有很多out.println(),Java與html語言混在一起
很亂,所以後來sun公司推出了JSP.其實JSP就是Servlet,每次執行的時候JSP都首先被編譯成servlet檔案,然後再被編譯成
.class檔案執行。有了jsp,在MVC專案中servlet不再負責動態生成頁面,轉而去負責控制程式邏輯的作用,控制jsp與javabean
之間的流轉。
4、doGet與doPost方法的兩個引數是什麼
HttpServletRequest:(r塊死T)封裝了與請求相關的資訊
HttpServletResponse:(r死棒死)封裝了與響應相關的資訊
5、request.getAttribute(I去B t)和request.getParameter(鋪r米T)
(1)有setAttribute,沒有setParameter方法
(2)getParameter獲取到的值只能是字串,不可以是物件,而getAttribute獲取到的值是Object型別的。
(3)通過form表單或者url來向另一個頁面或者servlet傳遞引數的時候需要用getParameter獲取值;getAttribute只能獲取setAttribute的值
(4)setAttribute是應用伺服器把這個物件放到該頁面所對應的一塊記憶體當中,當你的頁面伺服器重定向到另一個頁面的時候,應用伺服器
會把這塊記憶體拷貝到另一個頁面對應的記憶體當中。通過getAttribute可以取得你存下的值,當然這種方法可以用來傳物件。
用session也是一樣的道理,這是說request和session的生命週期不一樣而已。
6、JSP有哪些內建物件,作用是什麼?

JSP內建物件
名稱 作用
Request(r塊死T) 包含使用者端請求的資訊
Response (r死棒死) 包含伺服器傳回客戶端的響應資訊
Session(賽神) 與請求有關的會話期
pageContext(佩及康T可死T) 管理網頁屬性
Application(啊鋪r k神) 伺服器啟動時建立,伺服器關閉時停止,為多個應用程式儲存資訊
out 向客戶端輸出資料
Config(康會個) servlet的架構部件
page佩及 指網頁本身
Exception(一可賽鋪神) 針對錯誤頁面才可使用
7、四種會話跟蹤技術作用域
(1)page:一個頁面
(2)request::一次請求
(3)session:一次會話
(4)application(啊鋪r k神):伺服器從啟動到停止。
7、JSP中動態INCLUDE和靜態INCLUDE有什麼區別
include指令用於把另一個頁面包含到當前頁面中,在什麼時候包含的?再轉換成servlet的時候包含進去的。
動態INCLUDE用jsp:include動作實現 <jsp:include page=“included.jsp” flush=“true” />它總是會檢查所含檔案中的變化,適合用於包含動態頁面,
並且可以帶引數.
靜態INCLUDE用include偽碼實現,定不會檢查所含檔案的變化,適用於包含靜態頁面<%@ include file=“included.htm” %>
8、forward和redirect(r得可T)的區別
轉發與重定向
(1)從位址列顯示來說
forward是伺服器請求資源,伺服器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然後把這些內容再發給瀏覽器.瀏覽器根本不知道伺服器傳送
的內容從哪裡來的,所以它的位址列還是原來的地址.redirect是服務端根據邏輯,傳送一個狀態碼,告訴瀏覽器重新去請求那個地址.所以位址列顯示的是
新的URL.
(2)從資料共享來說
forward:轉發頁面和轉發到的頁面可以共享request裡面的資料.
redirect:不能共享資料.
(3)從運用地方來說
forward:一般用於使用者登陸的時候,根據角色轉發到相應的模組.
redirect:一般用於使用者登出登陸時返回主頁面和跳轉到其它的網站等.
(4)從效率來說
forward:高.
redirect:低.

9、 說出JSP的6個動作指令和作用?

•jsp:include:在頁面被請求的時候引入一個靜態或動態的檔案。

•jsp:useBean(new死並):尋求或者例項化一個JavaBean。

•jsp:setProperty(怕吧裡):設定JavaBean的屬性。

•jsp:getProperty:獲取某個JavaBean的屬性。

•jsp:forward:把請求轉到一個新的頁面(html檔案、jsp檔案或者一個程式段)。

•jsp:plugin:根據瀏覽器型別為Java外掛生成object或embed標記。

10 JSP的3種跳轉方式

•response.sendRedirct(賽的r打可T )方法:重新發送請求

•response.setHeader(害得)方法:與response.sendRedirect()方法。

•<jsp:forward page=”跳轉的頁面”/>:是伺服器端的跳轉。

11 談談Servlet過濾器的作用?
Filter是特殊的Servlet,能夠對特定的請求路徑進行過濾,在訪問這個路徑之前,先執行過濾器,過濾器進行預處理,過濾器決定是否繼續執行後續的檔案。典型的應用,可以把使用者驗證的程式碼寫在過濾器中,然後把過濾的路徑配製成需要驗證的檔案的路徑。
12 談談Servlet監聽器的作用
Servlet監聽器對特定的事件進行監聽,當產生這些事件的時候,會執行監聽器的程式碼。監聽器分為生命週期監聽器和資料變化監聽器 監聽器必須在web.xml註冊 不同的監聽器實現不同的介面

13 請簡要描述jstl
JSP標準標籤庫(JSTL)是一個JSP標籤集合,它封裝了JSP應用的通用核心功能。
JSTL支援通用的、結構化的任務,比如迭代,條件判斷,XML文件操作,國際化標籤,SQL標籤。 除了這些,它還提供了一個框架來使用整合JSTL的自定義標籤。
根據JSTL標籤所提供的功能,可以將其分為5個類別。
核心標籤(core) 格式化標籤(fmt) SQL 標籤 XML 標籤 JSTL 函式(fn)

14 如何現實servlet的單執行緒模式
Jsp修改page指令 <%@ page isThreadSafe=“fase”%>命令的JSP編譯後的Servlet
Servlet中實現SingleThreadModel介面即可
SingleThreadModel介面頁面沒有方法,只是一個標識,讓容器改變Servlet生成策略的

15 介紹el表示式

簡介:EL 全名為Expression Language。EL表示式一般操作的是作用域(application,session,request,pageContext)中的屬性,EL變數指某一個作用域中的屬性。
注:el表示式操作不了區域性變數!

用法:

使用EL表示式獲取資料語法:“ E L 調 p a g e C o n t e x t . f i n d A t t r i b u t e p a g e r e q u e s t s e s s i o n a p p l i c a t i o n n u l l {識別符號}” EL表示式語句在執行時,會呼叫pageContext.findAttribute方法,用識別符號為關鍵字,分別從page、request、session、application四個域中查詢相應的物件,找到則返回相應物件,找不到則返回”” (注意,不是null,而是空字串)。 示例: {user}
EL表示式也可以很輕鬆獲取JavaBean的屬性,或獲取陣列、Collection、Map型別集合的資料,例如:
${user.address.city}
${user.list[0]}:訪問有序集合某個位置的元素
${map.key} : 獲得map集合中指定key的值

獲得web開發常用物件
1、pageContext:代表pageContext物件 例如:${pageScope.name1}
2、pageScope:代表page域
3、requestScope:代表request域
4、sessionScope
5、applicationScoope
6、param:Map物件,儲存了所有的請求引數
7、paramValues:Map物件(value對應一個數組).
8、header:Map物件。獲取一個請求頭的值 注意:如果頭裡面有“-” ,例Accept-Encoding,則要headerValues[“Accept-Encoding”]
9、headerValues:Map物件(value對應一個數組)
10、cookie:Map物件。(value對應一個cookie物件)
11、initParam:Map物件。(key=引數名value=引數值,此引數是在web.xml中配置的) 例如 ${initParam.encode }