當前位置:
首頁 >
Servlet面试题整理
發布時間:2023/12/20
22
豆豆
生活随笔
收集整理的這篇文章主要介紹了
Servlet面试题整理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Servlet和JSP面試題整理
1. forward和redirect的區別?
- 地址欄顯示不同,forward地址欄顯示的是原來的地址,因為其是由服務器請求資源,直接訪問目標地址的URL,并讀取響應內容,然后將內容發送至瀏覽器,瀏覽器并不知道目標地址。redirect顯示的是新的URL,因為其是個是服務器根據邏輯發送狀態碼至瀏覽器,讓瀏覽器重新請求目標地址,所以瀏覽器是知道目標地址的。
- 數據共享方式不同,forward轉發頁面和目標頁面均可共享request的數據。redirect則是不可以共享數據。
- 通常應用的場景不同,forward一般用于用戶登陸的時候,根據角色轉發到相應的模塊。redirect一般用于用戶注銷登陸時返回主頁面和跳轉到其它的網站等
- 效率不同,通常認為forward的效率要更高
2. session和cookie有什么區別?
- cookie可以被客戶端禁用,但是客戶端無法禁用服務端的session。
- 存儲的對象不同,session能夠存儲任意的Java對象,cookie只能存儲String類型的對象。
- 數據存儲的地址不同,cookie數據保存在客戶端,session數據保存在服務器端
3. Servlet有什么優點?
- 可移植性好
Servlet是用Java語言編寫的,因此它可以移植到不同的操作系統和服務器上。 - 安全性好
Servlet也具有類型檢查特征,并利用Java的垃圾收集和沒有指針的設計,使得Servlet避免了內存管理等問題。 - 高效性
Servlet加載執行后會常駐服務器內存中,當再次受到客戶端的請求時,服務器會產生新的線程而不是進程為客戶端服務,這樣就提高了響應速度。
4. 對Servlet線程安全的理解
- 客戶端第一次請求Servlet的時,tomcat會根據web.xml配置文件實例化servlet,當又有一個客戶端訪問該servlet的時候,不會再實例化該servlet,這就是JSP/Servlet容器默認采用的單實例多線程(這是造成線程安全的主因)處理多個請求的方式。
- Servlet本身是無狀態的,一個無狀態的Servlet是絕對線程安全的,所以servlet是否線程安全是由它的實現來決定的,如果它內部的屬性或方法會被多個線程改變,它就是線程不安全的,反之,就是線程安全的。
- 避免使用實例變量 ,避免使用非線程安全的集合,在多個Servlet中對某個外部對象(例如文件)的修改是務必加鎖,互斥訪問,都能夠提高線程安全性。
5. Servlet的生命周期
- 當客戶端第一次請求Servlet時,Servlet被加載到內存中,容器會創建Servlet實例,并調用其init()方法進行初始化工作。
- 容器創建請求對象和響應對象,然后調用Servlet的service()方法為客戶端提供服務。
- 當Servlet不再被需要時,容器調用Servlet的destory()方法將Servlet實例銷毀。
- 注: 當客戶端請求的Servlet已經存在于服務器內存時,容器會創建新的線程調用service()方法響應客戶端請求。在Servlet的整個生命周期中,init()方法和destory()方法只會被調用一次。
6. JSP中動態INCLUDE與靜態INCLUDE的區別?
- 動態INCLUDE 用jsp:include動作實現它總是會檢查所含文件中的變化,并且可以帶參數,適合用于包含動態頁面。
- 靜態INCLUDE 用include偽碼實現,不會檢查所含文件的變化,適用于包含靜態頁面。
7. get和post有何區別?
- get參數傳遞通過url,post放在resquest body中
- get請求參數有長度限制,post沒有
- get不安全,因為參數暴露在url中。post安全,參數是隱藏的
- get請求只能進行url編碼。post支持多種編碼
- get請求參數會被完整保留在瀏覽歷史記錄,而post不會被保留。
- get產生一個tcp數據包;post產生兩個tcp數據包。
- get和post本質就是tcp鏈接,并無差別。但是由于HTTP的規定和瀏覽器/服務器的限制,導致他們在應用過程中體現出一些不同。
總結
以上是生活随笔為你收集整理的Servlet面试题整理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 推荐Linux内核书籍
- 下一篇: 致驱动工程师的一封信