天天看點

JavaWeb學習筆記——ServletServlet:  server applet

Servlet:  server applet

* 概念:運作在伺服器端的小程式

       * Servlet就是一個接口,定義了Java類被浏覽器通路到(tomcat識别)的規則。

       * 将來我們自定義一個類,實作Servlet接口,複寫方法。

* 快速入門:

        1. 建立JavaEE項目

        2. 定義一個類,實作Servlet接口

            * public class ServletDemo1 implements Servlet

        3. 實作接口中的抽象方法

        4. 配置Servlet

在web.xml中配置

<!--    配置Servlet-->
    <servlet>
        <servlet-name>demo1</servlet-name>
        <servlet-class>servlet.ServletDemo1</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>demo1</servlet-name>
        <url-pattern>/demo1</url-pattern>
    </servlet-mapping>
           

* 執行原理:

        1. 當伺服器接受到用戶端浏覽器的請求後,會解析請求URL路徑,擷取通路的Servlet的資源路徑

        2. 查找web.xml檔案,是否有對應的<url-pattern>标簽體内容。

        3. 如果有,則在找到對應的<servlet-class>全類名

        4. tomcat會将位元組碼檔案加載進記憶體,并且建立其對象

        5. 調用其方法

* Servlet中的生命周期方法:        

        1. 被建立:執行init方法,隻執行一次

            * Servlet什麼時候被建立?

                * 預設情況下,第一次被通路時,Servlet被建立

                * 可以配置執行Servlet的建立時機。

                    * 在<servlet>标簽下配置

                        1. 第一次被通路時,建立

                            * <load-on-startup>的值為負數

                        2. 在伺服器啟動時,建立

                            * <load-on-startup>的值為0或正整數

            * Servlet的init方法,隻執行一次,說明一個Servlet在記憶體中隻存在一個對象,Servlet是單例的

                * 多個使用者同時通路時,可能存線上程安全問題。

                * 解決:盡量不要在Servlet中定義成員變量。即使定義了成員變量,也不要對修改值

        2. 提供服務:執行service方法,執行多次

            * 每次通路Servlet時,Service方法都會被調用一次。

        3. 被銷毀:執行destroy方法,隻執行一次

            * Servlet被銷毀時執行。伺服器關閉時,Servlet被銷毀

            * 隻有伺服器正常關閉時,才會執行destroy方法。

            * destroy方法在Servlet被銷毀之前執行,一般用于釋放資源

* Servlet3.0:

        * 好處:

            * 支援注解配置。可以不需要web.xml了。

        * 步驟:

            1. 建立JavaEE項目,選擇Servlet的版本3.0以上,可以不建立web.xml

            2. 定義一個類,實作Servlet接口

            3. 複寫方法

            4. 在類上使用@WebServlet注解,進行配置

                * @WebServlet("資源路徑")

6. Servlet的體系結構    

        Servlet -- 接口

            |

        GenericServlet -- 抽象類

            |

        HttpServlet  -- 抽象類

        * GenericServlet:将Servlet接口中其他的方法做了預設空實作,隻将service()方法作為抽象

            * 将來定義Servlet類時,可以繼承GenericServlet,實作service()方法即可

        * HttpServlet:對http協定的一種封裝,簡化操作

            1. 定義類繼承HttpServlet

            2. 複寫doGet/doPost方法

    7. Servlet相關配置

        1. urlpartten:Servlet通路路徑

            1. 一個Servlet可以定義多個通路路徑 : @WebServlet({"/d4","/dd4","/ddd4"})

            2. 路徑定義規則:

                1. /xxx:路徑比對

                2. /xxx/xxx:多層路徑,目錄結構

                3. *.do:擴充名比對