servlet -生命週期/手工創建等總結

一、純手工方法創建第一個Servlet的步驟:

1.編寫一個類,繼承javax.servlet.http.HttpServlet

2.重寫doGet()、doPost()方法

3.編寫web.xml 中的servlet映射關係(下面爲2.5和3.0的版本配置)
Serlvet2.5:web.xml
Servle3.0: @WebServlet

(1)Serlvet2.5:
jsp: <a href="WelcomeServlet">

Servlet流程:

請求 ->
<url-pattern> -> 根據<servlet-mapping>中的<servlet-name> ,
去匹配 <servlet> 中的<servlet-name>,
然後尋找到<servlet-class>,求中將請求交由該<servlet-class>執行。

在web.xml文件中:

<servlet>
<servlet- name>servlet的名字</servlet-name>
<servlet-class>servlet執行</servlet-class>
</ servlet>

<servlet-mapping>
<servlet- name>servlet的名字</ servlet-name>
<url-pattern>映射地址,即jsp中請求的地址</url-pattern>
</serv1et-mapping>

(2)Servlet3.0:
在servlet類上面寫:

@WebServlet("url-pattern的值

eg:

@WebServlet(....,initParams=
{@WebInitParam(name="serveltparaname30",value="servletparavalue30")   }   )

*此註解只屬於某一個具體的Servlet
*若要通過3.0方式設置整個 web容器的初始化參數,仍然需要在web.xml中設置

二、 不同目錄所代表的:

1.項目根目錄:WebContent(寫.jsp)、src(所有的構建路徑,寫.java)

2.web.xml中的 /:代表項目根路徑:http://localhost:8080/myServletProject/

3.jsp中的/: 服務器根路徑:http://localhost:8080/·

三、Servlet生命週期:

1.分爲5個階段

加載
初始化: init() ,該方法會在 Servlet被加載並實例化的以後 執行
服務 :service() ->doGet() doPost
銷燬 :destroy(), Servlet被系統回收時執行
卸載

2.詳細來說

init():
(1)默認第一次訪問 Servlet時會被執行 (只執行這一次)
(2)可以修改爲 Tomcat啓動時自動執行
i.Servlet2.5: web.xml
<servlet> ... <load-on-startup>1</load-on-startup> </servlet>
其中的“1”代表第一個。
ii.Servlet3.0
@WebServlet( value="/WelcomeServlet" ,loadOnStartup=1 )

service() ->doGet() doPost :調用幾次,則執行幾次

destroy():關閉tomcat服務時,執行一次。

3.文字描述過程
(1)web服務器從客戶端接收到http請求之後,先查看內存中是否已經存在所請求的servlet對象,如果沒有,則執行(2),否則執行(3)
(2)web服務器調用servlet類的init方法,將servlet加載到內存,同時生成一個servlet對象,有且僅有一個servlet對象對外服務,採用的創建模式是單例模式
(3)web服務器將http請求封裝成ServletRequest對象,同時也生成一個ServletResponse對象,將這兩個對象作爲參數調用service方法。只要有一個請求,該方法就會被調用一次。
(4)當項目需要reload或者tomcat重啓或者關機時,servlet對象都會被銷燬,此時會調用destroy方法,該方法只會被調用一次。

四、Servlet API :

由兩個軟件包組成: 對應於HTTP協議的軟件包、對應於除了HTTP協議以外的其他軟件包
即Servlet API可以適用於 任何 通信協議。
我們學習的Servlet,是位於javax.servlet.http包中的類和接口,是基礎HTTP協議。

五、Servlet繼承關係

在這裏插入圖片描述
ServletContext中的常見方法(application):
getContextPath():相對路徑
getRealPath():絕對路徑
setAttribute() 、getAttribute()
String getInitParameter(String name);在當前Web容器範圍內,獲取名爲name的參數值(初始化參數)

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