当前位置: 首页 > news >正文

Servlet继承结构

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;// 调用了重载的无参的initthis.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 和 ServletResponsepublic void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {// 参数的转子,将 ServletRequest 转为 HttpServletRequestHttpServletRequest request = (HttpServletRequest) req;// 将 ServletResponse 转为 HttpServletResponseHttpServletResponse response = (HttpServletResponse) res;// 调用重载的 service 方法,传入转换后的 HttpServletRequest 和 HttpServletResponsethis.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初始化时调用(仅一次,在构造器之后)@Overridepublic void init() throws ServletException {System.out.println("初始化");}// 服务方法:每次请求都会调用(处理业务逻辑)@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {i++;System.out.println("服务");}// 销毁方法:Servlet销毁前调用(仅一次,释放资源)@Overridepublic void destroy() {System.out.println("destory");}
}

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

http://www.lryc.cn/news/575501.html

相关文章:

  • [附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+vue实现的考研图书电子商务平台管理系统,推荐!
  • Docker 入门教程(二):Docker 的基本原理
  • Java基础知识(十一)GUI图形用户界面设计
  • iOS App 上架流程工具链解析:开发者视角下的协作实践总结
  • ubuntu 远程桌面 xrdp + frp
  • AI in CSR Writing: Revolutionizing Clinical Trial Reports
  • 专题:2025中国游戏科技发展研究报告|附130+份报告PDF、原数据表汇总下载
  • Linux命令与脚本:高效系统管理的双刃剑
  • 记dwz(JUI)前端框架使用之--服务端响应提示框
  • Llama 3 + Qwen2双模型实战:单张3090构建企业级多模态知识库(2025精解版)
  • MyBatis深度面试指南
  • 【PX4-AutoPilot教程-TIPS】PX4系统命令行控制台ConsolesShells常用命令(持续更新)
  • 2025Q1东南亚移动游戏:休闲游戏主导下载,本地化是出海重要战略!
  • Unified、Remark 和Rehype 是 JavaScript 生态中用于处理结构化文本(如 Markdown 和 HTML)的核心工具
  • UDP 和 TCP 可以同时使用相同的端口号
  • 创客匠人解析视频号公私域互通逻辑:知识变现的破圈与沉淀之道
  • Vue-15-前端框架Vue之应用基础编程式路由导航
  • MR30分布式IO:产线改造省时 70%
  • 七天学会SpringCloud分布式微服务——03——一些细节的心得感悟(续)
  • FANUC机器人教程:用户坐标系标定及其使用方法
  • 腾讯混元API调用优化实战:用API网关实现流量控制+缓存+监控
  • 向量数据库milvus中文全文检索取不到数据的处理办法
  • SQL学习笔记3
  • recipes的版本比较老如何更新到新版本?
  • Twitter外贸精准获客全景策略(2025实战版)
  • dlib检测视频中的人脸并裁剪为图片保存
  • 【C#】 DevExpress.XtraEditors.SidePanel
  • OSEK/VDX OS ISO17356-3,【2】OS架构概述
  • 《大模型 Agent 应用实战指南》第4章:核心 Agent 设计与提示工程
  • 热点代码探测确定何时JIT