hualinux servlet 2.9:繼承serlvet接口實現servlet(懂)

目錄

一、使用serlvet接口編寫servlet

二、編寫實現代碼

2.1 建立java類繼承servlet

 2.2 在web.xml註冊servlet做映射

2.3 測試

三、其它知識

3.1 servlet的生命週期

3.2 load-on-startup參數

3.3 關於servlet-mapping


本章先不調用servlet的封裝直接使用servlet接口實現,看一下複雜度

一、使用serlvet接口編寫servlet

在前一章《hualinux servlet 2.6: IDEA 2020.1 建立簡單的servlet》所建立的項目基礎上,直接使用src右擊新建立servlet,使用java繼承servlet接口的方式。

在建立接口之前再看一下javaEE 8 API說明文檔,找到servlet,看一下使用說明,如下圖所示:

因爲是接口,得知有5個方法是必須繼承的

 

二、編寫實現代碼

2.1 建立java類繼承servlet

src-->T1.java,鼠標點一下Servlet,按“Alt+Enter”

這樣會自動彈出要繼承的方法,繼承接口的話,接口中所有方法得實現

上面有5個方法,這也與EE中的API文檔一致,在自動生成的代碼中,每個方法都添加輸出並添加一個無參的構造函數

import javax.servlet.*;
import java.io.IOException;

public class T1 implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init方法...");
    }

    @Override
    public ServletConfig getServletConfig() {
        System.out.println("getServletConfig方法...");
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("service方法...");
    }

    @Override
    public String getServletInfo() {
        System.out.println("getServletInfo方法...");
        return null;
    }

    @Override
    public void destroy() {
        System.out.println("destroy方法...");
    }
    public T1(){
        System.out.println("T1's constructor...");
    }
}

 2.2 在web.xml註冊servlet做映射

 要使用servetl則需要web.xml註冊

    <servlet>
        <servlet-name>t1</servlet-name>
        <servlet-class>T1</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>t1</servlet-name>
        <url-pattern>/t1</url-pattern>
    </servlet-mapping>

2.3 測試

運行tomcat,並在彈出的瀏覽器尾部添加t1,效果如下:

看到空白頁之後,再看IDE控制檯如下:

再刷新一下,發現多了一個service方法...

從上面看出destroy()方法沒有調用,點左邊紅色方塊停止按鈕 ,則destroy會被調用

 

三、其它知識

3.1 servlet的生命週期

 Serv1et生命週期的方法:以下方法都是由Serlvet容器負責調用。

1).構造器:只被調用一次。只有第一次請求Servlet時,創建Servlet的實例。調用構造器.
這說明Serlvet的單實例的!
2). init 方法:只被調用一 次。在創建好實例後立即被調用。用於初始化當前Servlet.
3). service: 被多次調用,每次請求都會調用service 方法。實際用於響應請求的。
4). destroy: 只被調用一 -次。在當前Serv1et所在的WEB應用被卸載前調用。用於釋放當前Serv1et所佔用的資源。

3.2 load-on-startup參數

1).配置在 servlet節點中:

<servlet>
<!-- Servlet註冊的名字-->
<servlet- name> secondServ1et</ servlet - name>
<!-. Servlet的全類名-->
<servlet-class>com. atguigu. javaweb. SecondServ1et</servlet-class>
<!--可以指定Servlet被創建的時機-->
<load- on-startup>2</load-on-startup>
</serv1et>

2). load-on-startup: 可以指定 Serlvet被創建的時機。若爲負數,則在第- 次請求時被創建.若爲日或正數,則在當前WEB應用被Serlvet容器加載時創建實例,且數組越小越早被創建。

3.3 關於servlet-mapping

1).同一個Servlet可以被映射到多個URL上。 即多個<servlet- mapping>元素的<servlet-name>子元素的設置值可以是同一個
Serv1et的注量名。
2)。在Servlet映射到的URL中也可以使用 *通配符,但是隻能有兩種固定的格式。
- -種格式是“.擴屬名”。另一種格式是以正科槓(/)開失並以“/*"結尾.

<serv1et- mapping>
<serv1et- name>secondServ1et</serv1et -name>
<ur1- pattern>/*</url-pattern>
</serv1et- mapping>

OR
<serv1et -mapping>
<serv1et - name> secondServlet</ servlet - name>
<ur1- pattern>* .do</ur1- pattern>
</serv1et -mapping>
注意:以下的既帶/又帚擴展名的不合法。
<servlet-mapping>
<servlet-name> secondServ1et</serv1et -name>
<ur1-pattern>/* .action</ur1- pattern>
</servlet- mapping>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章