2020年Servlet課堂筆記

Servlet

概念:運行在服務器端的小程序

Servlet接口:定義了java類被瀏覽器訪問到的規則

使用步驟

  1. 創建javaEE項目

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

    • public class MyServlet implements Servlet
  3. 實現接口的抽象方法

  4. 配置Servlet,在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_3_1.xsd"
             version="3.1">
      
        <servlet>
            <!--Servlet實現類名-->
            <servlet-name>MyServlet</servlet-name>
            <!--全類名-->
            <servlet-class>ChenXing.MyServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <!--Servlet實現類名-->
            <servlet-name>MyServlet</servlet-name>
            <!--/Servlet實現類名-->
            <url-pattern>/MyServlet</url-pattern>
        </servlet-mapping>
    </web-app>
    

Servlet的生命週期

  1. 被創建:執行init()方法,只能執行一次

    • 設置Servlet被創建的時間:(在<servlet>標籤下設置)
      • 第一次訪問時被創建:<load-on-startup>的值爲負數
      • 在服務器被啓動時被創建:<load-on-startup>的值爲0或正整數

    注意

    1. 一個Servlet在內存只能存在一個對象
    2. 多個用戶同時訪問時,可能存在線程安全問題
    3. 解決:儘量不要在Servlet中定義成員變量,即使定義了成員變量,也不要修改值
  2. 提供服務:執行Service()方法,執行多次

    • 每次訪問Servlet時,Service()方法都會被調用一次
  3. 被銷燬:執行destroy()方法,只執行一次

    • 當服務器正常關閉時,用於釋放資源

Servlet3.0

好處:支持註解配置。不需要web.xml

使用步驟:

  1. 創建javaEE項目,選擇Servlet的版本3.0以上,可以不創建web.xml
  2. 定義一個類,實現Servlet接口
  3. 實現接口中的抽象方法
  4. 在類上使用@WebServlet註解,進行配置
    • @WebServlet("資源路徑"):資源路徑是自定義的訪問路徑

實例代碼

package ChenXing;

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

@WebServlet("/ChenXing")
public class MyServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("開始!!!");
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
    //提供服務的方法
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("hello servlet");
    }

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

    @Override
    public void destroy() {
        System.out.println("服務器結束!");
    }
}

Servlet的體系結構

Servlet接口 —— 接口

​ | 繼承

GenericServlet—— 抽象類

​ | 繼承

HttpServlet—— 抽象類

  • GenericServlet抽象類:將Servlet接口中其他的方法做了默認空實現,只能將Service()方法作爲抽象
  • HttpServlet抽象類:對http協議的一種封裝,簡化操作
    1. 定義類繼承HttpServlet
    2. 複寫doGet()doPost()方法

Servlet相關配置

  1. urlparttern:Servlet訪問路徑
    1. 一個Servlet可以定義多個訪問路徑:@WebServlet({"/路徑1","/l路徑2","/路徑3"})
    2. 路徑定義規則:
      1. /xxx:路徑匹配
      2. "/xxx/xxx":多層路徑,目錄結構
      3. *.do:擴展名匹配
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章