Servlet生命週期 HttpServlet Mapping配置

Servlet的生命週期

API
這裏寫圖片描述
init()
實例化對象 初始化Servlet
-僅調用一次
-常用於數據庫連接

service()
響應客戶端請求,通過response對象修改客戶端內容
-可執行多次
-創建代表請求的request對象
-創建代表響應的response對象
-請求結束後對象會自動銷燬

destory()
Servlet對象被摧毀後執行的方法
-servlet對象一旦創建就會駐留內存
直到web容器(如tomcat)的退出
-常用於數據庫的釋放

HttpServlet
HttpServlet是GenericServlet的子類,複寫了service()方法,會判斷http的請求方式,然後執行doget()或dopost()方法或其他方法doxxx(),因而不用去直接重寫service()方法,而是使用doxxx()方法。
HttpServlet和GenericServlet的不同

GenericServlet是個抽象類,必須給出子類才能實例化。它給出了設計servlet的一些骨架,定義了servlet生命週期,還有一些得到名字、配置、初始化參數的方法,其設計的是和應用層協議無關的,也就是說 你有可能用非http協議實現它。

HttpServlet是GenericServlet的子類,當然就具有GenericServlet的一切特性,還添加了doGet, doPost, doDelete, doPut, doTrace等方法對應處理http協議裏的命令的請求響應過程。

關於mapping:

同一個servlet可以被多個地址映射,即:

 <servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/s</url-pattern>
  </servlet-mapping>

中的<url-pattern>/s</url-pattern>地址映射可以是多個

缺省Servlet

<servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

/ 則該Servlet定義爲web應用程序的缺省
Mapping找不到的Servlet會自動使用此Servlet,
此時所有的靜態web資源都無法訪問到
-服務器會默認配置一個缺省Servlet,最好不要配置缺省servlet

*通配符的使用:

<servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>

/*則可以匹配所有地址

<servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>*.html</url-pattern>
  </servlet-mapping>

*.html則可以匹配web應用下各種html

<load-on-startup>標籤

 <servlet>
    <servlet-name>MyServlet</servlet-name>
    <servlet-class>cn.lemon.MyServlet</servlet-class>

<load-on-startup>1</load-on-startup>
  </servlet>

<load-on-startup> 標籤會使得該Servlet的init()在web應用創建伊始就執行 而不是請求servlet時才執行init()

-標籤中數字的大小是啓動順序,越小啓動越早

-Servletd的線程安全:

SingleThreadModel 標記接口
實現了該接口的Servlet會使用單例訪問方式,避免資源衝突訪問

發佈了75 篇原創文章 · 獲贊 37 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章