Servlet学习笔记2

简述Servlet接口中的抽象方法

  1. Servlet 接口中的抽象方法

    复制
    // 初始化方法
    void init(ServletConfig var1);
    // 获取Servlet配置对象
    ServletConfig getServletConfig();
    // 提供服务的方法
    void service(ServletRequest var1, ServletResponse var2);
    // 获取Servlet信息,如版本、作者...
    String getServletInfo();
    // 销毁方法
    void destroy();
  2. 初始化方法

    复制
    /**
    * 初始化方法(只执行一次)
    * @param servletConfig servlet 配置
    * @throws ServletException servlet 异常
    */
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
    System.out.println("这是初始化方法!!!");
    }
  3. 提供服务的方法

    复制
    /**
    * 提供服务的方法
    * @param servletRequest servlet 请求
    * @param servletResponse servlet 响应
    * @throws ServletException servlet 异常
    * @throws IOException io 异常
    */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse)
    throws ServletException, IOException {
    System.out.println("这是一个提供服务的方法!!!");
    }
  4. 销毁方法

    复制
    /**
    * 这是一个销毁方法,在服务器正常关闭,就如tomcat执行了 `shutdown.sh` 。
    * 只执行一次。
    */
    @Override
    public void destroy() {
    System.out.println("这是一个销毁方法!!!");
    }
  5. 实现 Servlet 接口代码

    复制
    import javax.servlet.*;
    import java.io.IOException;
    public class ServletDemo02 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("这是一个提供服务的方法!!!");
    }
    @Override
    public String getServletInfo() {
    return null;
    }
    @Override
    public void destroy() {
    System.out.println("这是一个销毁方法!!!");
    }
    }
  6. 配置文件 web.xml

    复制
    <servlet>
    <servlet-name>demo2</servlet-name>
    <servlet-class>my.servlet.study.ServletDemo02</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>demo2</servlet-name>
    <url-pattern>/my.servlet.study.ServletDemo02</url-pattern>
    </servlet-mapping>

Servlet 接口实现类的使用

  1. 启动服务器,控制台输出:

    复制
    这是初始化方法!!!
  2. 启动服务器后,访问:http://localhost:8080/TomcatServletStudy_war_exploded/my.servlet.study.ServletDemo02 ,控制台输出:

    复制
    这是一个提供服务的方法!!!

    每次访问该网址,都会执行一次 service 方法

  3. 关闭服务器,控制台输出:

    复制
    这是一个销毁方法!!!
  4. 利用 web.xml 配置文件,修改 init 方法的执行时机:

    复制
    <servlet>
    <servlet-name>demo2</servlet-name>
    <servlet-class>my.servlet.study.ServletDemo02</servlet-class>
    <!--
    指定Servlet的创建时机
    1. 第一次被访问是创建
    <load-on-startup> 的值为负数
    2. 服务器启动时被创建
    <load-on-startup> 的值为0或者正数
    -->
    <load-on-startup>-5</load-on-startup>
    </servlet>

备注:

  1. Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象, Servlet是单例的。
  2. 因此多个用户同时访问时,可能存在线程安全问题。
  3. 解决:尽不要在 Servlet中定义成员変。即使定义了成员变,也不要对修改值。

参考文献

  1. Servlet 生命周期
  2. [Servlet 生命周期、工作原理]
posted @   LeeHua  阅读(100)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示

目录导航