談談Servlet的理解

以下從幾個方面分析面試中常見的Servlet套路。
一、談談Servlet的生命週期

Servlet生命週期主要包括三個方面:
1、初始化:Web容器加載Servlet,調用init()方法。
2、處理服務請求:執行service方法,執行對應的doXXX()方法。
3、銷燬:服務結束,Web容器調用Servlet的destory()方法。

二、Get和Post提交方式的區別

1、Get從服務器獲取數據,Post向服務器推送數據。
2、請求方式不同:Get參數是拼接在url後面,不安全。Post放在http包的包體中。
3、提交內容不同:Get只能是文本,最大1KB。Post可以提交文本和二進制(上傳文件必須用post方式)。
4、Servlet在處理請求的時候分別對應使用doGet和doPost方式進行處理請求。

三、JSP和Servlet二者有啥區別

Servlet是服務器端程序,動態生成HTML頁面發送到客戶端。在Servlet中java與HTML混合很亂。而sun公司推出JSP,即每次運行時候JSP先編譯成Servlet文件,然後再編譯成.class文件。在MVC中Servlet不再動態生成頁面,轉而去負責控制層業務。

四、request.getAttribute()和request.getParameter()

1、有setAttribute方法,沒有setParameter方法。
2、getAttribute獲取到的值是Object類型,getParameter獲取到的值只能是字符串。
3、getAttribute只能獲取serAttribute的值,而getParameter用於通過form或者url向另一個頁面或Servlet傳遞參數時候使用。

五、JSP內置對象
名稱 作用
request 客戶端請求的信息
response 服務器端的響應信息
session 請求的會話
pageContext 管理網頁屬性
application 服務器啓動創建,停止銷燬,爲應用程序保存信息
out 向客戶端輸出數據
config Servlet的架構部件
page 網頁本身
exception 錯誤頁面的信息
六、JSP中動態INCLUDE和靜態INCLUDE有什麼區別

include指令用於把另一個頁面包含到當前頁面中,在什麼時候包含的?再轉換成servlet的時候包含進去的。

動態INCLUDE用jsp:include動作實現 <jsp:include page=“included.jsp” flush=“true” />它總是會檢查所含文件中的變化,適合用於包含動態頁面,並且可以帶參數。

靜態INCLUDE用include僞碼實現,定不會檢查所含文件的變化,適用於包含靜態頁面<%@ include file=“included.htm” %>。
七、forward和redirect的區別
(1)從地址欄顯示來說
forward是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然後把這些內容再發給瀏覽器.瀏覽器根本不知道服務器發送的內容從哪裏來的,所以它的地址欄還是原來的地址。redirect是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器重新去請求那個地址,所以地址欄顯示的是新的URL。

(2)從數據共享來說
forward:轉發頁面和轉發到的頁面可以共享request裏面的數據。
redirect:不能共享數據。

(3)從運用地方來說
forward:一般用於用戶登陸的時候,根據角色轉發到相應的模塊。
redirect:一般用於用戶註銷登陸時返回主頁面和跳轉到其它的網站等。

(4)從效率來說
forward:高。
redirect:低。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章