一、Servlet建立與使用
阿新 • • 發佈:2018-12-02
一、Servlet實現步驟
1、建立專案
2、配置伺服器環境
部署到伺服器上
三、Web.xml
會增加這些配置
1
、
<servlet>
<servlet-name>ServletDemo1</servlet-name>
<servlet-class>com.javaweb.servlet.ServletDemo1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletDemo1</servlet-name>
<url-pattern>/servlet/ServletDemo1</url-pattern>
</servlet-mapping>
2、servlet訪問URL對映配置
同一個
servlet
可以被對映到多個
URL
上,也可以使用萬用字元進行對映,有兩種格式:一種是
*.
拓展名,一種是
/*
。
例如:
<servlet-mapping>
<servlet-name>ServletDemo1</servlet-name>
<url-pattern>/servlet/ServletDemo1</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ServletDemo1</servlet-name>
<url-pattern>/index</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ServletDemo1</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ServletDemo1</servlet-name>
<url-pattern>*.haha</url-pattern>
</servlet-mapping>
對於如下的一些對映關係:
Servlet1
對映到
/abc/*
Servlet2
對映到
/*
Servlet3
對映到
/abc
Servlet4
對映到
*.do
問題:
當請求
URL
為
“/abc/a.html”
,
“/abc/*”
和
“/*”
都匹配,哪個
servlet
響應
Servlet
引擎將呼叫
Servlet1
。
當請求
URL
為
“/abc”
時,
“/abc/*”
和
“/abc”
都匹配,哪個
servlet
響應
Servlet
引擎將呼叫
Servlet3
。
當請求
URL
為
“/abc/a.do”
時,
“/abc/*”
和
“*.do”
都匹配,哪個
servlet
響應
Servlet
引擎將呼叫
Servlet1
。
當請求
URL
為
“/a.do”
時,
“/*”
和
“*.do”
都匹配,哪個
servlet
響應
Servlet
引擎將呼叫
Servlet2
。
當請求
URL
為
“/xxx/yyy/a.do”
時,
“/*”
和
“*.do”
都匹配,哪個
servlet
響應
Servlet
引擎將呼叫
Servlet2
。
匹配的原則就是
"
誰長得更像就找誰
"
3
、
load-on-startup
<!-- tomcat
啟動時就開始載入值越小優先順序越高
-->
<load-on-startup>1</load-on-startup>
四、
servlet
執行過程
1
、
servlet
程式是由
web
伺服器呼叫,
web
伺服器接受到客戶的訪問
servlet
訪問請求後:
1
)、
web
伺服器首先檢查是否已經裝載並建立了該
servlet
例項物件,如果是直接執行第四步。
2
)、裝載並建立該
servlet
例項物件。
3
)、呼叫該
servlet
例項物件的
initi()
方法
4
)、建立一個用於封裝
http
請求訊息的
HttpServletRequest
物件和一個代表
HTTP
響應訊息
HttpServletResponse
物件,然後呼叫
Servlet
的
service()
方法並將請求和響應作為引數傳遞進去
5)、web應用在被停止或重新啟動前,servlet引擎將解除安裝servlet,並在解除安裝之前呼叫servlet的destory()方法。
*
只有首次訪問才建立目標
servlet
2
、生命週期
當第一次訪問servlet這個物件的時候,伺服器就會建立servlet例項,構造方法和initi方法會被先後呼叫,當發生請求時,伺服器就會建立一個新的執行緒執行servlet裡面的service方法在service方法里根據不同的請求方式 去呼叫doGet(),或doPost方法,伺服器銷燬的時候會銷燬servlet物件,呼叫的destory方法。
- 編寫一個java類,繼承httpServlet
- 把開發好的java類部署到web伺服器上
<servlet> |
servlet-name | servlet的註冊名稱 | |
servlet-class | 完整類名 | ||
<servlet-mapping> |
url-pattern | servlet的註冊名稱 | |
servlet-name | 訪問路徑 |