Servlet面試題

hipilee發表於2017-12-07

Q :  Servlet的生命週期?

---根據Servlet的配置引數<load-on-startup>1</load-on-startup>來決定例項化時機,沒有配置該引數項或者為負數,則第一次訪問的時候才會被例項化並呼叫init () 函式,如果為0或者正整數,則伺服器啟動的時候就會被載入,載入順序由小到達。Servlet 通過呼叫 init () 方法進行初始化。

---客戶端請求到達後,Servlet 呼叫 service() 方法來處理客戶端的請求。

---伺服器關閉,或者Servlet長時間沒有使用,Servlet 通過呼叫 destroy() 方法終止(結束)。

---最後,Servlet 是由 JVM 的垃圾回收器進行垃圾回收的。


Q :  Servlet和JSP的區別?

Servlet是伺服器端的程式,動態生成html頁面傳送到客戶端,但是這樣程式裡會有很多out.println(),java與html語言混在一起很亂,造成編寫邏輯控制的後臺工程師和設計前端網頁的前端工程師彼此很難獨立開展工作,所以後來sun公司推出了JSP,其實JSP就是Servlet,每次執行的時候JSP都首先被編譯成servlet檔案,然後再被編譯成.class檔案執行。有了jsp,在MVC專案中servlet不再負責動態生成頁面,轉而去負責控制程式邏輯的作用,控制jsp與javabean之間的流轉。其實對jsp也有封裝的模板工具velocity和freemarker。


Q : forward和redirect的區別?

該兩個方法對應的程式碼實現如下:

		//Forwards a request from a servlet to another resource (servlet, JSP file, or HTML file) 
		//on the server. This method allows one servlet to do preliminary processing of 
		//a request and another resource to generate the response. 
		request.getRequestDispatcher("同一個web應用下的其他資源").forward(request, response);
		
		//Sends a temporary redirect response to the client using the specified redirect location URL. 
		response.sendRedirect("完整的訪問路徑或者相對路徑,瀏覽器收到後會對該路徑發起訪問");


從上述的api說明來理解二者的設計動機的區別其實是很大的,forward是對一些請求先進行一個統一的處理,然後再將請求傳送到特定的資源進行特定的處理。而redirect是返回一個臨時的路徑給瀏覽器(意味著可能是這段時間需要重定向,可能過段時間就不需要重定向了),讓瀏覽器再次發起訪問。所以這裡可以將forward理解為伺服器行為,而redirect理解為瀏覽器行為。

從結果的導向來看二者的差別主要有如下:



相關文章