当前位置: 代码网 > it编程>编程语言>Java > SpringBoot配置嵌入式服务器的实操演示

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

2025年11月19日 Java 我要评论
servlet 三大组件是java web开发的核心基础,包括:servlet、filter和listener。servlet:用于处理客户端请求并生成动态响应的java类运行在服务器端的java程序

servlet 三大组件是java web开发的核心基础,包括:servletfilter 和 listener

servlet:

  • 用于处理客户端请求并生成动态响应的java类
  • 运行在服务器端的java程序

filter(过滤器):

  • 用于对请求和响应进行预处理和后处理
  • 在请求到达servlet之前和响应返回客户端之前执行

listener(监听器):

  • 用于监听web应用中的事件
  • 当特定事件发生时自动执行回调方法
组件作用生命周期应用场景
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

  • 浏览器显示响应:hello myservlet!
  • 控制台输出(filter 先执行,再到 servlet):
myfilter执行前
myservlet处理了get请求
myfilter执行后

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

访问http://localhost:8080/hello

  • 浏览器显示响应:hello
  • 控制台输出(filter 拦截 /hello 请求):
myfilter执行前
testcontroller的/hello方法执行
myfilter执行后

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

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

  • 控制台不会输出myfilter的日志(仅控制器方法日志)。

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

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

  • application.properties中修改其拦截路径:
server.servletpath=/app/*  # 修改为拦截/app/*路径
  • 重启应用后,原/hello需访问/app/hello才能被 spring mvc 处理,否则返回 404(证明dispatcherservlet的拦截路径已生效)。

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

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com