SpringBoot - 整合Servlet、Filter和Listener(@WebServlet等注解的使用)
使用 Spring Boot 开发项目之后,就基本上告别 Servlet、Filter 和 Listener 了。但是有时在整合一些第三方框架时,可能还是不得不使用 Servlet。Spring Boot 中对于整合这些基本的 Web 组件也提供了很好的支持,下面通过样例进行演示。
(2)下面代码代码定义一个基本的 Filter 组件,并使用 @WebFilter 注解进行标注。
(3)下面代码代码定义一个基本的 Listener 组件,并使用 @WebListener 注解进行标注。
1,定义组件
(1)下面代码代码定义一个基本的 Servlet 组件,并使用 @WebServlet 注解进行标注。
@WebServlet("/my") public class MyServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("name>>>" + req.getParameter("name")); } }
(2)下面代码代码定义一个基本的 Filter 组件,并使用 @WebFilter 注解进行标注。
@WebFilter("/*") public class MyFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("MyFilter>>>init"); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("MyFilter>>>doFilter"); filterChain.doFilter(servletRequest, servletResponse); } @Override public void destroy() { System.out.println("MyFilter>>>destroy"); } }
(3)下面代码代码定义一个基本的 Listener 组件,并使用 @WebListener 注解进行标注。
这里以 ServletRequestListener 为例,对于其它的 Listener,例如 HttpSessionListener、ServletContextListener 等也是支持的。
@WebListener public class MyListener implements ServletRequestListener { @Override public void requestInitialized(ServletRequestEvent sre) { System.out.println("MyListener>>>requestInitialized"); } @Override public void requestDestroyed(ServletRequestEvent sre) { System.out.println("MyListener>>>requestDestroyed"); } }
2,项目配置
我们需要在项目入口类上添加 @ServletComponentScan 注解,实现对 Servlet、Filter 和 Listener 的扫描。这样我们定义的 Servlet、Filter、Listener 就可以直接通过 @WebServlet、@WebFilter、@WebListener 注解自动注册。@SpringBootApplication @ServletComponentScan public class DemoApplication { public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(DemoApplication.class, args); } }
3,测试运行
(1)我们通过浏览器访问如下地址:(2)可看到控制台输出的日志如下: