java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot配置嵌入式服务器

SpringBoot配置嵌入式服务器的实操演示

作者:春生野草

文章介绍了Servlet、Filter和Listener在JavaWeb开发中的作用及生命周期,文章详细说明了如何在SpringBoot中注册Servlet、Filter和Listener,并通过实操演示验证了它们的功能,本文给大家讲解的非常详细,感兴趣的朋友跟随小编一起看看吧

Servlet 三大组件是Java Web开发的核心基础,包括:ServletFilter 和 Listener

Servlet:

Filter(过滤器):

Listener(监听器):

组件作用生命周期应用场景
Servlet处理请求和生成响应请求-响应业务逻辑处理
Filter请求/响应预处理请求-响应安全检查、日志、编码转换
Listener监听应用事件应用/会话/请求生命周期资源管理、统计、初始化

为什么需要特殊方式注册 Servlet 三大组件?

传统 Java Web 应用(WAR 包部署)通过web.xml配置 Servlet、Filter、Listener:

<!-- 传统web.xml配置Servlet -->
<servlet>
    <servlet-name>myServlet</servlet-name>
    <servlet-class>com.example.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>myServlet</servlet-name>
    <url-pattern>/myServlet</url-pattern>
</servlet-mapping>

Spring Boot 默认以jar 包方式启动,使用嵌入式 Servlet 容器(如 Tomcat),没有web.xml文件。因此,Spring Boot 提供了通过Java 配置类 + @Bean注解的方式注册三大组件。

 注册方式详解

Spring Boot 通过三个 “注册器类” 包装三大组件,再通过@Bean将注册器注入 Spring 容器,完成组件注册:

组件类型注册器类作用
ServletServletRegistrationBean注册自定义 Servlet,指定访问路径
FilterFilterRegistrationBean注册自定义 Filter,指定过滤的路径
ListenerServletListenerRegistrationBean注册自定义 Listener,监听容器事件

DispatcherServlet 本身就是一个 Servlet,是 Spring MVC 的前端控制器,负责接收所有请求并分发。Spring Boot 在DispatcherServletAutoConfiguration中自动注册它,无需手动配置。

实操演示:注册自定义三大组件

步骤 1:创建自定义 Servlet、Filter、Listener

// 1. 自定义Servlet:处理请求
public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        resp.getWriter().write("Hello MyServlet!"); // 响应内容
        System.out.println("MyServlet处理了GET请求");
    }
}
// 2. 自定义Filter:过滤请求
public class MyFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("MyFilter执行前");
        chain.doFilter(request, response); // 放行请求
        System.out.println("MyFilter执行后");
    }
}
// 3. 自定义Listener:监听Servlet容器事件(如启动、关闭)
public class MyListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("MyListener:Servlet容器初始化完成");
    }
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("MyListener:Servlet容器销毁");
    }
}

步骤 2:通过配置类注册组件(SpringBoot 1.x的版本去掉泛型)

@Configuration
public class ServletConfig {
    // 注册Servlet
    @Bean
    public ServletRegistrationBean<MyServlet> myServlet() {
        // 关联自定义Servlet,并指定访问路径为/myServlet
        ServletRegistrationBean<MyServlet> registrationBean = new ServletRegistrationBean<>(new MyServlet(), "/myServlet");
        registrationBean.setLoadOnStartup(1); // 启动顺序(数字越小越先启动)
        return registrationBean;
    }
    // 注册Filter
    @Bean
    public FilterRegistrationBean<MyFilter> myFilter() {
        FilterRegistrationBean<MyFilter> registrationBean = new FilterRegistrationBean<>();
        registrationBean.setFilter(new MyFilter()); // 关联自定义Filter
        // 指定过滤路径:拦截/hello和/myServlet的请求
        registrationBean.setUrlPatterns(Arrays.asList("/hello", "/myServlet"));
        return registrationBean;
    }
    // 注册Listener
    @Bean
    public ServletListenerRegistrationBean<MyListener> myListener() {
        // 关联自定义Listener
        ServletListenerRegistrationBean<MyListener> registrationBean = new ServletListenerRegistrationBean<>(new MyListener());
        return registrationBean;
    }
}

步骤 3:创建测试控制器(辅助验证 Filter)

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
    // 该路径会被MyFilter过滤(因为Filter配置了拦截/hello)
    @GetMapping("/hello")
    public String hello() {
        System.out.println("TestController的/hello方法执行");
        return "hello";
    }
}

步骤 4:启动应用并验证

1. 验证 Listener(容器启动时)

启动 Spring Boot 应用,控制台会输出 Listener 的初始化日志:

MyListener:Servlet容器初始化完成

2. 验证 Servlet 和 Filter

访问http://localhost:8080/myServlet

MyFilter执行前
MyServlet处理了GET请求
MyFilter执行后

3. 验证 Filter 对其他路径的拦截

访问http://localhost:8080/hello

MyFilter执行前
TestController的/hello方法执行
MyFilter执行后

4. 验证未被 Filter 拦截的路径

访问http://localhost:8080/other(假设存在该路径且未被 Filter 配置):

步骤 5:验证DispatcherServlet的默认行为

DispatcherServlet默认拦截/,负责处理 Spring MVC 的所有请求(如/hello)。可以通过以下方式验证:

server.servletPath=/app/*  # 修改为拦截/app/*路径

到此这篇关于SpringBoot配置嵌入式服务器的实操演示的文章就介绍到这了,更多相关SpringBoot配置嵌入式服务器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文