前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot: 集成Servlet、Filter和Listener实践

SpringBoot: 集成Servlet、Filter和Listener实践

作者头像
Freedom123
发布2024-03-29 13:37:05
1250
发布2024-03-29 13:37:05
举报
文章被收录于专栏:DevOpsDevOps

简介

使用 Spring Boot 开发项目之后,就基本上告别 Servlet、Filter 和 Listener 了。但是有时在整合一些第三方框架时,可能还是不得不使用 Servlet。Spring Boot 中对于整合这些基本的 Web 组件也提供了很好的支持。

SpringBoot 整合 Servlet 有两种方式:1. 通过注解扫描完成 Servlet 组件的注册;2. 通过方法完成 Servlet 组件的注册;下面分别讲解俩种注解方式。

一、通过注解实现

1. 定义组件

1)下面代码代码定义一个基本的 Servlet 组件,并使用 @WebServlet 注解进行标注。

代码语言:javascript
复制
@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 注解进行标注。

代码语言:javascript
复制
@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 注解进行标注。

代码语言:javascript
复制
@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 注解自动注册。

代码语言:javascript
复制
@SpringBootApplication
@ServletComponentScan
public class DemoApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext context
                = SpringApplication.run(DemoApplication.class, args);
    }
}
3. 测试运行

(1)我们通过浏览器访问如下地址: http://localhost:8080/my?name=hangge (2)可看到控制台输出的日志如下:

二、通过方法完成 Servlet 组件的注册

1.定义组件
代码语言:javascript
复制
package com.example.combine.servlet.sbservlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 
 * @author servlet整合springboot方式2
 *
 */

// 这种方式无须在servlet这个类中添加@WebServlet这个注释声明
public class ServletDemo2 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // TODO Auto-generated method stub
        super.doGet(req, resp);
        System.out.println("这是第二种整合的方式");
    }

}
2. 项目配置
代码语言:javascript
复制
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class App1 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        SpringApplication.run(App1.class, args);
    }

    // 添加如下的方法
    // 实现在启动类中注册servlet的方法
    @Bean // 添加@Bean的注释
    public ServletRegistrationBean getServlet() {
        // 通过ServletRegistrationBean完成对servlet的注册
        ServletRegistrationBean bean = new ServletRegistrationBean(new ServletDemo2());
        bean.addUrlMappings("/second"); // 该方法完成的是对urlPattern的配置
        return bean; // 将对象返回
    }

}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 一、通过注解实现
    • 1. 定义组件
      • 2. 项目配置
        • 3. 测试运行
        • 二、通过方法完成 Servlet 组件的注册
          • 1.定义组件
            • 2. 项目配置
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档