SpringMVC面試題:什么是Servlet?


一、什么是servlet?

servlet是一個Java編寫的程序,此程序是基於http協議的,在服務器端(如Tomcat)運行的,是按照servlet規范編寫的一個Java類。
客戶端發送請求至服務器端,服務器端將請求發送至servlet,servlet生成響應內容並將其傳給服務器
即,我們在瀏覽器點擊鏈接和按鈕產生的消息不是發送給servlet的,而是發送給web容器(如Tomcat、jetty)的,web容器接受消息后不知道怎么處理,轉交給我們編寫的servlet處理,那么web容器怎么和servlet交流呢,於是就有了servlet接口(因為接口是定義一種規范的良好表達形式)。我們只需要編寫Java類符合servlet規范,那么就能被web容器識別,並被容器管理。
Servlet = Server + Applet

二、servlet的作用:

處理客戶端的請求並將其結果發送到客戶端

三、servlet的生命周期

servlet的生命周期由servlet容器來控制,分為三個階段:

初始化階段:

1、servlet容器加載servlet類,把servlet類的.class文件中的數據讀到內存中。
2、servlet容器創建一個servletConfig對象。servletConfig對象包含了servlet的初始化配置信息。
3、servlet容器創建一個servlet對象。
4、servlet容器調用servlet對象的init方法進行初始化。

運行階段:

1、servlet容器接收到一個請求時,servlet容器會針對這個請求創建servletRequest和servletResponse對象。
2、然后調用service方法。並將這兩個參數傳遞給service方法。service方法通過servletRequest對象獲得請求的信息。並處理該請求。
3、再通過servletResponse對象生成這個請求的響應結果。然后銷毀servletRequest和servletResponse對象。不管這個請求時post提交的還是get提交的,這一種這個請求都會由service方法來處理。
銷毀階段:
當web應用被終止時,servlet容器會先調用servlet對象的destroy方法,然后在銷毀servlet對象,同時也會銷毀與servlet對象相關聯的servletConfig對象。我們可以在destroy方法的實現中,釋放servlet所占用的資源,如關閉數據庫連接,關閉文件輸入輸出流等。

四、servlet怎么處理一個請求?

當用戶從瀏覽器向服務器發起一個請求,通常會包含如下信息:http://hostname: port /contextpath/servletpath,hostname 和 port 是用來與服務器建立 TCP 連接,而后面的 URL 才是用來選擇服務器中那個子容器服務用戶的請求。那服務器是如何根據這個 URL 來達到正確的 Servlet 容器中的呢?
Tomcat中這件事很容易解決,因為這種映射工作有專門的一個類來完成,這個類保存了Tomcat的container容器中所有子容器的信息。當 Request 進入 Container 容器之前,它要訪問那個子容器這時就已經確定了。
當用戶發送一個請求到某個servlet的時候,servlet容器會創建一個servletRequest和servletResponse對象。在servletRequest對象中封裝了用戶的請求信息,然后servlet容器把servletRequest和servletResponse對象傳遞給用戶所請求的servlet,servlet把處理好的結果卸載servletResponse中,然后servlet容器把響應結果傳給用戶。

五、servlet和jsp的區別

1、jsp經編譯后就是servlet。
2、jsp更擅長頁面表現,servlet更擅長邏輯編輯
3、jsp位於MVC設計模式的視圖層,而servlet位於控制層

六、servlet里的過濾器

過濾器的作用

1、任何系統或網站都要判斷用戶是否登錄。
2、網絡聊天系統或論壇,功能是過濾非法文字
3、統一解決編碼

怎么創建一個過濾器:

1、生成一個普通的class類,實現Filter借口(javax.servlet.Filter)
2、重寫接口里面的三個方法:init,doFilter和destroy
3、然后在web.xml配置過濾器

servlet中的監聽器

對Request的監聽,對session的監聽,對application的監聽

七、參考

SpringMVC 中文官網:http://www.springmvc.cn/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM