Web 项目启动和关闭执行的某个方法

本文介绍如何在web.xml中配置监听器,并在servlet中实现服务的启动与停止。通过实现ServletContextListener接口,可以在应用初始化和销毁时分别调用SMSServiceByOwn实例的startService和stopService方法。

一、web.xml配置

     

<listener>
      <listener-class>com.servlet.InitListener</listener-class>
</listener>

     com.servlet.InitListener为工程下包地址

二、servlet 代码

public class InitListener implements ServletContextListener 

     public void contextInitialized(ServletContextEvent servletContextEvent) {

               SMSServiceByOwn.getInstance().startService();  

    } 

    public void contextDestroyed(ServletContextEvent servletContextEvent) { 

              SMSServiceByOwn.getInstance().stopService();

     }

}

 

### ### Spring Boot Web项目中Servlet的执行流程时机 在 Spring Boot Web 项目中,`Servlet` 的执行流程与其生命周期紧密相关。当一个 HTTP 请求到达服务器时,会经过一系列处理步骤,最终由匹配的 `Servlet` 进行响应。 #### Servlet 的注册与初始化 Spring Boot 使用嵌入式的 Web 容器(如 Tomcat、Jetty 等),默认情况下不再需要传统的 `web.xml` 文件来配置 `Servlet`。开发者可以通过编程方式使用 `ServletRegistrationBean` 来注册自定义的 `Servlet` 实例。例如: ```java @Bean public ServletRegistrationBean<MyServlet> myServletRegistration() { return new ServletRegistrationBean<>(new MyServlet(), "/my-servlet/*"); } ``` 在这个过程中,`Servlet` 被创建并初始化。初始化发生在容器启动时或首次请求该 `Servlet` 时,具体取决于 `loadOnStartup` 参数的设置[^3]。 #### Servlet 的执行时机 `Servlet` 的执行主要涉及以下三个阶段: 1. **初始化阶段**:`init()` 方法会在 `Servlet` 第一次加载时调用,通常用于执行一次性初始化操作。 2. **服务阶段**:每次 HTTP 请求到达时,`service()` 方法会被调用,根据请求类型(GET、POST 等)分别调用 `doGet()`、`doPost()` 等方法进行处理。 3. **销毁阶段**:当 `Servlet` 被卸载时,`destroy()` 方法会被调用,用于释放资源。 `Servlet` 的执行时机可以总结为: - 当客户端发起 HTTP 请求,并且请求路径匹配某个已注册的 `Servlet` 时,容器会调用该 `Servlet` 的 `service()` 方法。 - 如果 `Servlet` 尚未被加载,则容器会先调用其构造函数创建实例,然后调用 `init()` 方法进行初始化,最后才执行 `service()` 方法[^1]。 #### DispatcherServlet 的特殊角色 在基于 Spring MVC 的 Web 应用中,`DispatcherServlet` 是核心组件之一,负责协调整个请求处理流程。它会在应用启动时通过 `WebApplicationInitializer` 接口完成初始化[^3]。以代码为例: ```java public class WebInit implements WebApplicationInitializer { public void onStartup(ServletContext servletContext) throws ServletException { AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext(); ctx.register(SpringMVCConfig.class); ServletRegistration.Dynamic springmvc = servletContext.addServlet("springmvc", new DispatcherServlet(ctx)); springmvc.addMapping("/"); springmvc.setLoadOnStartup(1); } } ``` 在此配置中,`DispatcherServlet` 在启动时加载,并映射到根路径 `/`,所有请求都会首先经过它进行分发。`DispatcherServlet` 会进一步触发 Spring MVC 的各种组件(如 `HandlerMapping`、`ViewResolver` 等)来处理请求[^5]。 #### 生命周期事件与监听器 除了直接通过 `Servlet` 处理请求外,还可以通过 `ServletContextListener` 监听 Web 应用的生命周期事件。例如,在应用启动关闭执行某些操作: ```java public class MyContextListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { // 执行初始化逻辑 } @Override public void contextDestroyed(ServletContextEvent sce) { // 执行清理逻辑 } } ``` 此类监听器可以通过 `ServletListenerRegistrationBean` 注册到 Spring Boot 应用中[^1]。 #### 总结 在 Spring Boot Web 项目中,`Servlet` 的执行时机主要取决于请求的到来以及其生命周期状态。开发者可以通过编程方式灵活地注册管理 `Servlet` 及其相关的监听器,从而实现对请求处理流程的精确控制。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值