Servlet


一 Servlet簡介

Servlet是JavaWeb三大組件之一 運行在服務器上的小程序

Servlet是一個接口 定義了Java類被服務器(Tomcat等等)識別的規則

 

二 新建一個Servlet

1. 新建一個Web項目

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

/**
 * Servlet快速入門
 * Created by Hy on 2020/6/29.
 */
public class ServletDemo1 implements Servlet {

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {}

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

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

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

    @Override
    public void destroy() {}
}

3. 配置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_4_0.xsd"
         version="4.0">

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

啟動項目 訪問 http://localhost:8080/demo1

 

三 Servlet執行原理

瀏覽器輸入地址 -> 找到對應主機對應端口對應項目對應資源名稱 -> 服務器檢索web.xml -> 根據servlet-mapping匹配servlet -> 服務器將全類名對應的字節碼文件加載進內存 創建實例 調用service()

 

四 Servlet生命周期

/**
 * Servlet生命周期
 * Created by Hy on 2020/6/29.
 */
public class ServletDemo2 implements Servlet {

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        // 生命周期方法 創建
        // 在Servlet被創建時執行 只會執行一次
        System.out.println("init()");
    }

    @Override
    public ServletConfig getServletConfig() {
        // 獲取Servlet的配置對象
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        // 生命周期方法 提供服務
        // 每一次Servlet被訪問時執行 執行多次
        System.out.println("service()");
    }

    @Override
    public String getServletInfo() {
        // 獲取Servlet的一些信息 比如版本 作者等等
        return null;
    }

    @Override
    public void destroy() {
        // 生命周期方法 銷毀
        // 在服務器正常關閉時執行 只會執行一次
        System.out.println("destroy()");
    }

}

1. 被創建 執行init() 只會執行一次

Servlet在內存中只存在一個實例 Servlet是單例的

當多個用戶同時訪問時 可能存在線程安全問題 所以盡量不要在Servlet中定義需要修改的成員變量

Servlet默認情況下 第一次被訪問時創建 可以配置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_4_0.xsd"
         version="4.0">

    <servlet>
        <servlet-name>demo2</servlet-name>
        <servlet-class>com.hy.servlet.ServletDemo2</servlet-class>
        <!-- 配置Servlet創建時機
                1. 第一次被訪問時創建 值為負數
                2. 在服務器啟動時創建 值為0或正數 -->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>demo2</servlet-name>
        <url-pattern>/demo2</url-pattern>
    </servlet-mapping>
</web-app>

2. 提供服務 執行service() 執行多次

每次訪問Servlet時 service()都會被調用一次

3. 被銷毀 執行destroy() 只會執行一次

Servlet被銷毀前執行 服務器正常關閉時 Servlet被銷毀

 

五 Servlet3.0注解

使用注解代替web.xml配置

/**
 * Servlet3.0注解 路徑定義規則
 * 1. /xxx 路徑匹配
 * 2. /xxx/xxx 多層路徑 目錄結構
 * 3. *.do 擴展名匹配
 * 注意: *是匹配所有 但是優先級最低
 * Created by Hy on 2020/6/29.
 */
//@WebServlet("/demo3") //路徑匹配
//@WebServlet(urlPatterns = "/demo3", loadOnStartup = 1) //路徑匹配 配置Servlet創建時機
//@WebServlet({"/demo3", "/d3"}) //一個Servlet可以定義多個訪問路徑
@WebServlet({"/demo3", "/d3", "/user/d", "/abc/*", "*.do"})
public class ServletDemo3 implements Servlet {

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init...");
    }

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

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

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

    @Override
    public void destroy() {
        System.out.println("destroy...");
    }
}

 

六 Servlet體系結構

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM