Spring Boot Servlet Filter Listener

本文介绍了在Spring Boot中注册Servlet的两种方法:代码注册和注解自动注册。此外,文章还提到了Filter和Listener的注册方法,并提供了具体的代码示例。

在spring boot中添加自己的Servlet有两种方法,代码注册Servlet和注解自动注册(Filter和Listener也是如此)。

1.通过代码注册Servlet

代码注册通过ServletRegistrationBean、 FilterRegistrationBean 和 ServletListenerRegistrationBean 获得控制。也可以通过实现 ServletContextInitializer 接口直接注册。

2.使用注解注册Servlet

在 SpringBootApplication 上使用@ServletComponentScan 注解后,Servlet、Filter、Listener 可以直接通过 @WebServlet、@WebFilter、@WebListener 注解自动注册,无需其他代码。

application.java

@SpringBootApplication
@ServletComponentScan
public class SpringbootSampleApplication {

    /**
     * 使用代码注册MyServlet1
     * @return
     */
    @Bean
	public ServletRegistrationBean servletRegistrationBean(){
        return new ServletRegistrationBean(new MyServlet1(),"/servlet1/*");
    }

	public static void main(String[] args) {
		SpringApplication.run(SpringbootSampleApplication.class, args);
	}
}

 

Myservlet1.java

public class MyServlet1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("-------------<doGet>---------------");
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("-------------<doPost>---------------");
        PrintWriter out = resp.getWriter();
        out.println("success");
    }
}

Myservlet2.java

@WebServlet(urlPatterns = "/servlet2/*",description = "servlet2")
public class MyServlet2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("-------------<doGet>---------------");
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("-------------<doPost>---------------");
        PrintWriter out = resp.getWriter();
        out.println("success2");
    }
}

效果:

155400_MckM_2942412.png155413_rpzC_2942412.png

 

 

Filter的注册

filter可以像servlet那样用着两种方式注册,但是在我尝试中,还有一种方式,

在不修改application.java的情况下,自定义一个filter实现Filter接口,在类上使用@Component注解,

也同样可以注册filter。

listener的注册

同上

转载于:https://my.oschina.net/zk875/blog/826596

### 创建和注册自定义 FilterServletSpring Boot 应用中,可以通过多种方式创建和注册自定义的 FilterServlet。以下方法展示了如何实现这一点。 #### 使用 @WebFilter 注解 可以通过 `@WebFilter` 注解来标记一个类为 Filter,并通过 `@Order` 或者 `@Component` 来指定其顺序和组件扫描[^1]。例如: ```java import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException; @WebFilter("/*") public class CustomFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 在请求处理之前执行的操作 System.out.println("Before processing the request"); chain.doFilter(request, response); // 在请求处理之后执行的操作 System.out.println("After processing the request"); } } ``` #### 自定义 Filter 并添加到 Spring Security 的 Filter 链中 如果使用了 Spring Security,则可以将自定义的 Filter 添加到 Spring Security 的 Filter 链中的指定位置。这通常涉及到配置类的编写,其中包含对 `SecurityProperties` 的修改以及 `addFilterBefore` 或 `addFilterAfter` 方法的调用[^2]。 #### 使用 @ServletComponentScan 注解 为了启用基于注解方式的 Servlet 组件扫描支持,可以在主程序启动类上使用 `@ServletComponentScan` 注解。这样就可以让整合 Servlet 的三大组件(ServletFilterListener)的注解生效[^3]。例如: ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.ServletComponentScan; @SpringBootApplication @ServletComponentScan public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` #### 显式注册 FilterRegistrationBean 和 ServletRegistrationBean 另一种方法是显式地创建 `FilterRegistrationBean` 和 `ServletRegistrationBean` 实例来注册自定义的 FilterServlet。这种方法提供了更多的控制选项,比如设置 URL 映射、过滤器名称等。 对于 Filter: ```java import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class FilterConfig { @Bean public FilterRegistrationBean<CustomFilter> customFilterRegistration() { FilterRegistrationBean<CustomFilter> registration = new FilterRegistrationBean<>(); registration.setFilter(new CustomFilter()); registration.addUrlPatterns("/*"); // 设置URL模式 registration.setName("customFilter"); // 设置过滤器名称 return registration; } } ``` 对于 Servlet: ```java import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class ServletConfig { @Bean public ServletRegistrationBean<MyServlet> myServletRegistration() { MyServlet myServlet = new MyServlet(); return new ServletRegistrationBean<>(myServlet, "/my-servlet/*"); // 注册Servlet并设置映射路径 } } ``` #### 示例:自定义 Servlet 类 下面是一个简单的自定义 Servlet 类的例子: ```java import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class MyServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().println("Hello from MyServlet!"); } } ``` 以上方法确保了在 Spring Boot 应用中能够灵活地创建和注册自定义的 FilterServlet,同时保持代码的清晰和可维护性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值