Servlet继承结构

发布于:2025-06-27 ⋅ 阅读:(16) ⋅ 点赞:(0)

1. 顶级 Servlet 接口

// 顶级的Servlet接口
public interface Servlet {
    // 初始化方法,构造完毕后,由tomcat自动调用完成初始化功能的方法
    void init(ServletConfig var1) throws ServletException;

    // 获取ServletConfig对象的方法
    ServletConfig getServletConfig();

    // 接收用户请求,向用于响应信息的方法
    void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;

    // 返回Servlet字符串形式描述信息的方法
    String getServletInfo();

    // Servlet在回收前,由tomcat调用的销毁方法,往往用于做资源的释放工作
    void destroy();
}

2. 抽象类 GenericServlet 

// 抽象的类  GenericServlet(对Servlet接口的基础实现,简化子类开发)
public abstract class GenericServlet implements Servlet {
    private transient ServletConfig config;

    public void destroy() {
        // 将抽象方法,重写为普通方法,在方法内部没有任何的实现代码
        // 空实现
    }

    // tomcat在调用init方法时,会读取配置信息进入一个ServletConfig对象并将该对象传入init方法
    public void init(ServletConfig config) throws ServletException {
        // 将config对象存储为当前的属性
        this.config = config;
        // 调用了重载的无参的init
        this.init();
    }

    // 重载的初始化方法,我们重写初始化方法时对应的方法(子类可重写此方法做自定义初始化)
    public void init() throws ServletException {
    }

    // 返回ServletConfig的方法(供子类或外部获取配置)
    public ServletConfig getServletConfig() {
        return this.config;
    }

    // 再次抽象声明service方法(子类必须实现,处理具体请求)
    public abstract void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
}

3. 抽象类 HttpServlet 

// HttpServlet 抽象类,侧重 service 方法的处理
public abstract class HttpServlet extends GenericServlet {
    // service 方法,处理 ServletRequest 和 ServletResponse
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        // 参数的转子,将 ServletRequest 转为 HttpServletRequest
        HttpServletRequest request = (HttpServletRequest) req;
        // 将 ServletResponse 转为 HttpServletResponse
        HttpServletResponse response = (HttpServletResponse) res;
        // 调用重载的 service 方法,传入转换后的 HttpServletRequest 和 HttpServletResponse
        this.service(request, response);
    }
}

 

4. 自定义 Servlet 类

 ServletLifeCycle 注释

// @WebServlet:将Servlet映射到路径,loadOnStartup=6指定启动优先级(数值越小越先初始化)
@WebServlet(value = "/servletLifeCycle", loadOnStartup = 6)
public class ServletLifeCycle extends HttpServlet {
    int i = 10;

    // 构造器:Servlet实例化时调用(仅一次)
    public ServletLifeCycle() {
        System.out.println("构造器");
    }

    // 初始化方法:Servlet初始化时调用(仅一次,在构造器之后)
    @Override
    public void init() throws ServletException {
        System.out.println("初始化");
    }

    // 服务方法:每次请求都会调用(处理业务逻辑)
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        i++;
        System.out.println("服务");
    }

    // 销毁方法:Servlet销毁前调用(仅一次,释放资源)
    @Override
    public void destroy() {
        System.out.println("destory");
    }
}

 service 方法不要修改 成员变量 避免产生并发修改异常


网站公告

今日签到

点亮在社区的每一天
去签到