1. 程式人生 > >Servlet生命週期 HttpServlet Mapping配置

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會使用單例訪問方式,避免資源衝突訪問