一、什麼是Servlet
Servlet是JavaWeb的三大組件之一[Servlet,Filter,Listener],它屬於動態資源。Servlet的做用是處理請求,服務器會把接收到的請求交給Servlet來處理,在Servlet中一般須要:
a. 接收請求數據;
b. 處理請求;
c .完成響應。
例如客戶端發出登陸請求,或者輸出註冊請求,這些請求都應該由Servlet來完成處理!Servlet須要咱們本身來編寫,每一個Servlet必須實現javax.servlet.Servlet接口。
二、實現Servlet的方式(由咱們本身來寫!)
實現Servlet有三種方式:
l 實現javax.servlet.Servlet接口;
l 繼承javax.servlet.GenericServlet類;
l 繼承javax.servlet.http.HttpServlet類;
* 一般咱們會去繼承HttpServlet類來完成咱們的Servlet,但學習Servlet還要從javax.servlet.Servlet接口開始
①servlet元素對應一個servlet;一個servlet標籤元素和servlet-mapping是一組servlet
②一個servlet能夠對應多個 url-pattern;一個url-pattern 只能對應一個servlet
③ url -pattern 的幾種配置方式:
1.訪問某個url:
<!--第一種:也是經常使用的一種訪問方式 -->
<url-pattern>/TestServlet</url-pattern>
訪問方式:http://localhost:8080/servlet01/TestServlet
<!--第二種:經常使用訪問方式擴展 -->
<url-pattern>/TestServlet.boom</url-pattern>
訪問方式:http://localhost:8080/servlet01/TestServlet.boom
2.全部請求均可以訪問某個servlet;
<!-- 匹配全部的字符 -->
<url-pattern>/*</url-pattern>
訪問方式:http://localhost:8080/servlet01/fdsafdsaf 【/後面隨便跟什麼字母】java
<!-- 框架使用 (通常不用) -->
<url-pattern>/user/*</url-pattern>
訪問方式:http://localhost:8080/servlet01/user/fdasfasd 【/uesr/任意字母】
3.匹配以某些字符結尾的請求
<!-- 匹配以某些字符結尾的請求 -->
<url-pattern>*.boom</url-pattern>
訪問方式:http://localhost:8080/servlet01/fdsafsda.boom
4.根據不一樣的功能模塊 ,servlet請求進行分組
<!-- 根據不一樣的功能模塊 ,servlet請求進行分組 -->
<url-pattern>/user/adduser.boom</url-pattern>
<url-pattern>/user/*</url-pattern>
圖解url-pattern
④ 注意:servlet名稱和url區分大小寫
手寫servlet配置,瀏覽訪問servlet【瞭解,後期用servlet模板自動生成】web
用servlet模板生成servlet:
web.xml裏代碼:瀏覽器
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> 3 <web-app> 4 <servlet> 5 <servlet-name>TextServlet</servlet-name> 6 <display-name>This is the display name of my J2EE component</display-name> 7 <description>This is the description of my J2EE component</description> 8 <servlet-class>boom.servlet.test01.TextServlet</servlet-class> 9 </servlet> 10 11 <servlet-mapping> 12 <servlet-name>TextServlet</servlet-name> 13 <url-pattern>/TextServlet</url-pattern> 14 </servlet-mapping> 15 16 </web-app>
圖解servlet模板與之對應的web.xml文件圖解
tomcat
三、servlet的生命週期
servlet生命週期:所謂servlet的生命週期,就是說servlet的出生、服務,以及死亡。
與Servlet的生命週期相關的方法有:
一、void init(ServletConfig);(服務啓動後一次)
二、void service(ServletRequest,ServletResponse);(每次刷新都會被執行)
三、void destroy();(關閉服務器一次)
特性:
a.單例,一個類只有一個對象;固然可能存在多個Servlet類!
b.多線程的 , servlet不要使用全局變量
c.線程不安全的,因此它的效率是高的
整個生命週期的過程:
① 加載servlet
部署 web項目
② servlet的初始化【兩中方式】
2.1 tomcat啓動的時候 初始化 servlet執行init方法
在 web.xml中配置
<servlet>
<load-on-startup>1<load-on-startup>
</servlet>
tomcat 服務器啓動的時候,初始化 servlet 調用 init方法。數值 0 正整數 1 2 3【從小到大加載 】若是是負值 , 在第一次訪問servlet的時候初始化servlet
2.2 在第一次請求的時候,調用init方法進行初始化 【init方法只初始化一次 】
servlet是單例的 , 能夠加快請求的效率(在web應用中只有一個servlet實例) ,不能在servlet中添加全局變量
調用servlet是多線程調用,每次請求是一個線程,全局變量會出現安全問題,儘可能使用局部變量。
tomcat啓動的時候 初始化 servlet執行init()方法
在第一次請求的時候,調用init()方法進行初始化;init()方法只初始化一次
③ 當每次發請求的時候,會執行service方法,去處理請求和響應
接收請求的數據 ,響應數據到客戶端
能夠設定響應數據的格式 ,告訴瀏覽器如何解析數據
設置編碼集
④ servlet的銷燬
tomcat關閉的時候 銷燬servlet,執行destroy方法
注:Servlet類由咱們來寫,但對象由服務器來建立,而且由服務器來調用相應的方法。
四、servlet週期詳解:【有個印象便可】
servlet的出生
服務器會在Servlet第一次被訪問時建立Servlet,或者是在服務器(Tomcat)啓動時建立Servlet。若是服務器啓動時就建立Servlet,那麼還須要在web.xml文件中配置。也就是說默認狀況下,Servlet是在第一次被訪問時由服務器建立的。並且一個Servlet類型,服務器只建立一個實例對象,例如在咱們首次訪問http://localhost:8080/helloservlet/helloworld時,服務器經過「/helloworld」找到了綁定的Servlet名稱爲cn.itcast.servlet.HelloServlet,而後服務器查看這個類型的Servlet是否已經建立過,若是沒有建立過,那麼服務器纔會經過反射來建立HelloServlet的實例。當咱們再次訪問http://localhost:8080/helloservlet/helloworld時,服務器就不會再次建立HelloServlet實例了,而是直接使用上次建立的實例。在Servlet被建立後,服務器會立刻調用Servlet的void init(ServletConfig)方法。請記住, Servlet出生後立刻就會調用init()方法,並且一個Servlet的一輩子,只會被調用一次。咱們能夠把一些對Servlet的初始化工做放到init方法中!
servlet服務
當服務器每次接收到請求時,都會去調用Servlet的service()方法來處理請求。服務器接收到一次請求,就會調用service() 方法一次,因此service()方法是會被調用屢次的。正由於如此,因此咱們才須要把處理請求的代碼寫到service()方法中!
servlet離開
Servlet是不會輕易離去的,一般都是在服務器關閉時Servlet纔會離去!在服務器被關閉時,服務器會去銷燬Servlet,在銷燬Servlet以前服務器會先去調用Servlet的destroy()方法,咱們能夠把Servlet的臨終遺言放到destroy()方法中,例如對某些資源的釋放等代碼放到destroy()方法中。
安全