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

网站开发 书站长之家站长工具综合查询

网站开发 书,站长之家站长工具综合查询,做网站买虚拟服务器,博客式笑话网站织梦源码文章目录 生命周期方法生命周期被创建(init 方法,只执行一次)提供服务(service 方法,执行多次)被销毁(destroy 方法,只执行一次) 参考 生命周期方法 WebServlet("/…

文章目录

    • 生命周期方法
    • 生命周期
      • 被创建(`init` 方法,只执行一次)
      • 提供服务(`service` 方法,执行多次)
      • 被销毁(`destroy` 方法,只执行一次)
    • 参考

生命周期方法

@WebServlet("/demo")
public class ServletDemo implements Servlet {/*** 初始化 Servlet 的方法,可以在部署应用时执行一些初始化操作* 被创建时执行,只会执行一次* @param servletConfig* @throws ServletException*/@Overridepublic void init(ServletConfig servletConfig) throws ServletException {System.out.println("Servlet 初始化");}/*** 返回 Servlet 的配置信息* @return*/@Overridepublic ServletConfig getServletConfig() {return null; // 尚未实现,应返回Servlet的配置信息}/*** 提供服务的方法* 每一次 Servlet 被访问时执行,可以执行多次* @param servletRequest* @param servletResponse* @throws ServletException* @throws IOException*/@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println("Hello Servlet!"); // 输出欢迎信息到控制台}/*** 返回 Servlet 的相关信息,如作者、版本等* @return*/@Overridepublic String getServletInfo() {return ""; // 尚未实现,应返回Servlet的相关信息}/*** 在 Servlet 被移除前调用,用于释放资源* 在服务器正常关闭时执行,只会执行一次*/@Overridepublic void destroy() {System.out.println("Servlet 销毁");}
}

根据抽象实现 Servlet 接口 Servlet 类,简单了解 Servlet 的生命周期

  • 被创建:执行 init 方法,只执行一次
  • 提供服务:执行 service 方法,可以执行多次
  • 被销毁:执行 destroy 方法,只执行一次

根据启动 SpringBoot 服务,调用 /demo 接口,最后终止服务,可以看出打印信息

Servlet 初始化
Hello Servlet!
2025-06-03T15:57:54.774+08:00  INFO 78287 --- [ionShutdownHook] o.s.b.w.e.tomcat.GracefulShutdown        : Commencing graceful shutdown. Waiting for active requests to complete
2025-06-03T15:57:56.784+08:00  INFO 78287 --- [tomcat-shutdown] o.s.b.w.e.tomcat.GracefulShutdown        : Graceful shutdown complete
Servlet 销毁

生命周期

被创建(init 方法,只执行一次)

触发时机具体配置load-on-startup 取值
第一次被访问 时创建<servlet> 标签下省略或显式配置负数
服务器启动 时创建<servlet> 标签下配置0正整数
  • init() 仅在 Servlet 实例化后调用一次,这意味着 同一个 Servlet 在内存中只有一个对象(单例)
  • 多用户并发访问时可能出现 线程安全问题。尽量不要在 Servlet 中定义可变的成员变量;若必须定义,也避免对其修改。

而在 SpringBoot 中,也是只会被调用一次,Servlet 规范在容器层面确保“单实例、线程复用”,只是把把实例创建这件事自动化配置

Spring Boot 组件创建时机对应的 Servlet 生命周期
DispatcherServlet(Spring MVC 默认入口)Spring 容器启动完毕后,由 DispatcherServletAutoConfiguration 注册到嵌入式 Tomcat,并默认 loadOnStartup=1 → 随 应用启动即实例化调用一次 init() 做框架级别初始化(HandlerMapping、ViewResolver 等)
你自定义的 @WebServletServletRegistrationBean 注册的原生 Servlet- 若显式设置 loadOnStartup≥0 → 跟随应用启动立刻实例化
- 否则懒加载:第一次请求命中 URL 才建实例
同上,实例化后立即执行一次 init()
@WebServlet(value = "/demo", loadOnStartup = 20)
public class ServletDemo implements Servlet {}

loadOnStartup≥0 时,根据启动信息输出,自定义 Servlet 类根据 SpringBoot 启动类初始化,无需调用对应接口调用时初始化

2025-06-03T16:27:16.598+08:00  INFO 78895 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 250 ms
Servlet 初始化
2025-06-03T16:27:16.703+08:00  INFO 78895 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port 8080 (http) with context path '/'
2025-06-03T16:27:16.706+08:00  INFO 78895 --- [           main] web.servlet.DemoApplication              : Started DemoApplication in 0.505 seconds (process running for 0.668)

提供服务(service 方法,执行多次)

每次客户端请求该 Servlet,容器都会调用一次 service()(或其内部的 doGet() / doPost() 等方法)。

而在 SpringBoot 中主要探究就是 service 方法在 Spring MVC 链路中的位置,根据请求流程,在 SpringBoot 中几乎只会写 Controller 层,但是这些 Servlet 都能被调用起来,根源仍是 Servlet 的 service() 被 Tomcat 触发

  • Tomcat 接受到 HTTP 报文并解析为 HttpServletRequest/Response 对象
  • 请求被派发到 DispatcherServlet.service() ,这就是经典 Servlet service() 回调
  • DispatcherServlet 再把请求继续分发
    • 走一系列 HandlerInterceptor / Filter
    • 通过 HandlerMapping 匹配到 @Controller / @RestController 方法
    • 适配器 (HandlerAdapter) 解析参数、执行方法、序列化返回值(HttpMessageConverter
  • 最终写回 HttpServletResponse,返回给浏览器

被销毁(destroy 方法,只执行一次)

  • 当服务器正常关闭或应用下线时,Servlet 被销毁,容器调用 destroy()
  • destroy() 在实例被回收前执行,通常用于 释放资源(关闭连接、清理缓存等)。

当 SpringBoot 正常关闭(终止服务),根据之前的实例输出可得

  • SpringBoot 发送 ContextClosedEvent -> Spring Bean 的 PreDestory 先执行
  • Tomcat 停机流程开始,依次调用注册的 Servlet destory 方法

当 SpringBoot 容器崩溃/强杀时,操作系统直接回收进程,destroy() 也不会被调用

根据以上两种情况得知,关键资源(连接池、临时文件)依旧建议交给 Spring-managed Bean 来托管并在 @PreDestroyDisposableBean 里关闭

参考

  • 3_Servlet_执行原理_哔哩哔哩_bilibili
http://www.dtcms.com/wzjs/181789.html

相关文章:

  • 做网站需要看的书上海今天发生的重大新闻
  • 阿里云网站备案注销青岛seo网站关键词优化
  • 网站备案工信部广州seo运营
  • 免费推广网站2024哪些平台可以发布推广信息
  • seo销售话术开场白网站优化入门免费教程
  • 网站建设案例收费情况四年级说新闻2023
  • 网站建设创作思路怎么写太原百度推广排名优化
  • 靠谱网站建设公司代引流推广公司
  • 国内b2b网站大全排名软文拟发布的平台与板块
  • 平板购物网站建设东莞搜索网络优化
  • 最新新闻热点评论合肥seo排名扣费
  • 电子商务及网站建设站长工具综合查询系统
  • 上哪个网站做forma和co青岛网站seo推广
  • 网站建设公司新报郑州官网网站推广优化
  • 成都品牌设计公司有哪些万词优化
  • 那些网站可以做自媒体沈阳专业网站seo推广
  • 没有网站怎么推广百度代运营公司
  • 东莞网站推广需要多少钱网络营销的10个特点
  • 长春长春网站建设网seo职业
  • 国内最好的软件网站建设晚上网站推广软件免费版
  • 网站建设合同书简单版百度搜索引擎推广收费标准
  • 便宜网站建设公司成都网站建设团队
  • app网站开发报价市场调研报告模板
  • 要求维护公司做网站整改的函谷歌优化的网络公司
  • 网站seo推广优化报价表好的seo公司营销网
  • 关键词的选择网站提示游戏推广员招聘
  • 沧州做网站哪家公司好如何推广公司
  • 网页设计网站大全台州网站seo
  • 网站建设公司的服务定位百度一下你就知道下载
  • 网站空间送数据库做小程序公司哪家好