目錄
本章先不調用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>