Servlet的使用

一.servlet接口

Servlet接口,Servlet就是一種實現了Servlet接口的類,它是由web容器負責創建 並調用,用於接收和響應用戶的請求.

在 Servlet 接口中定義了 5 個抽象方法,具體如下:

二.Servlet的使用

      第一步:編寫一個類,實現Servlet接口

import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;


public class Myservlet implements Servlet {

    /**
     * Servlet實例化後,調用init()方法進行初始化
     * Servlet什麼時候進行初始化?
     *     不是服務器一啓動就進行實例化,二是第一次請求時,纔會進行實例化.
     * init()只執行一次.
     */
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("Servlet初始化了");
        String encoding= servletConfig.getInitParameter("encoding");
        System.out.println(encoding);
    }

    /**
     * service方法調用時需要使用兩個參數:ServletRequest和ServletResponse
     *     每一次請求都會創建新的ServletRequest和ServletResponse對象
     *     service()有幾次請求就執行幾次
     */
    @Override
    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
        //向控制檯輸出
        System.out.println("hello servlet");//service處理請求比較麻煩,比如我們需要判斷用戶的請求方式
        //向瀏覽器輸出
        response.getWriter().write("hello service");

    }

    /**
     * Servlet什麼銷燬?
     *    Web應用停止或者服務器關閉
     *    只執行一次
     */
    @Override
    public void destroy() {

    }
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
    @Override
    public String getServletInfo() {
        return null;
    }
}

       第二步:配置

在 WebContent->WEB-INF,web.xml 文件下添加配置信息
 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <display-name>day33</display-name>
    <welcome-file-list>
        <welcome-file>/login.jsp</welcome-file>
    </welcome-file-list>
    <!--配置servlet信息-->
    <servlet>
        <!--配置servlet的名稱,必須唯一-->
        <servlet-name>Myservlet</servlet-name>
        <!--配置servlet的全類名-->
        <servlet-class>servlet快速入門.Myservlet</servlet-class>
        <!--配置初始化參數-->
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
        <!--配置Servlet的加載時機,值時一個正整數,值越小,表示越先被加載,值相同,誰在上面,誰先被加載-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <!--需要和上面的名字一致-->
        <servlet-name>Myservlet</servlet-name>
        <!--配置servlet的請求路徑-->
        <url-pattern>/myServlet</url-pattern>
    </servlet-mapping>
</web-app>

       第三步:運行訪問

控制檯顯示:

瀏覽器顯示:

三.Servlet生命週期

 Servlet 生命週期三個階段

        階段一:初始化階段 Servlet 接收到請求後,會先檢查內存中是否有該 Servlet 對象,如果有直接使用該 對象,如果沒有就創建實例,後調用 init()方法,需要注意,在 Servlet 的整個生命週期 內,它的 init() 方法只會調用一次。

        階段二:運行階段 Servlet 生命週期中最主要的階段,該階段會爲這個請求創建`ServletRequest`對象和 `ServletResponse`對象,然後傳遞給 service()方法,在整個 Servlet 生命週期內,每一次 訪問請求,都會創建新的`ServletRequest`和`ServletResponse`對象。並且調用 service()方 法 。

        階段三:銷燬階段 Servlet 隨着 Web 應用的銷燬而銷燬,在銷燬 Servlet 之前,Servlet 的 destroy() 方 法會被調用,在該方法裏面可以進行資源釋放操作,destroy()只會被調用一次,需要注 意的是 Servlet 對象一旦被創建就會駐留在內存中,直到服務器關閉。

四.使用便捷類

HttpServlet 類

抽象類,專門用於處理 HTTP 請求的 Servlet
      主要功能 :  1. 根據用戶請求方式不同,定義相應的 doXxx()方法處理用戶請求。

                         2. 通 過 service() 方 法 將 HTTP 請 求 和 響 應 分 別 轉 爲 HttpServletRequest 和 HttpServletResponse 類型的對象
      使用步驟: 1. 新建類,基礎 HttpServlet

                         2. 重寫 doGet、doPost 方法 

                         3. 在 web.xml 文件中配置

      測試 doGet 方法 :

      採用 GET 方式訪問`HttpServletDemo`,只需要在地址欄輸入 HttpServletDemo 訪問地址 即可打印`thisisdoGet!!!`
      測試 doPost 方法 :

      採用POST就必須使用表單了,創建表單提交html文件 ,設置提交數據到`HttpServletDemo`即可.

注意:表單action裏的數據.

五.路徑通配符

 通配符優先級  有如下映射關係
            Servlet1 映射到 /abc/*

            Servlet2 映射到 /*

            Servlet3 映射到 /abc

            Servlet4 映射到 *.do

當請求 URL 爲`/abc/a.html`,“/abc/*”和“/*”都匹配,Servlet1 響應

當請求 URL 爲`/abc`時,“/abc/*”和“/abc”都匹配,Servlet3 響應

當請求 URL 爲`/abc/a.do`時,“/abc/*”和“*.do”都匹配,Servlet1 響應

當請求 URL 爲`/a.do`時,“/*”和“*.do”都匹配,Servlet2 響應

當請求 URL 爲`/xxx/yyy/a.do`時,“/*”和“*.do”都匹配,Servlet2 響應
 

 

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