在spring boot中,注册servlet组件,可以使用注解的方式,需要三个步骤:
- 编写开发要注册的组件(Filter、Servlet、Listener);
- 使用注解标记组件,也可以在注解的属性中进行配置并设置;
- 使用 @ServletComponentScan 启用扫描servlet组件。
但是注解中的配置一般不能从配置文件读取,只能设置常量值。所以,这种情况下就需要使用一种编程式的配置servlet组件方法。
编程式的配置servlet组件
首先,需要我们编写好相应的组件,例如:实现接口javax.servlet.Filter
、 继承父类HttpServlet
、实现对应的listener。
然后使用RegistrationBean进行注册: Filter、Servlet、Listener 分别使用以下的子类进行注册:

示例如下:
package com.jvm123.example.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import javax.servlet.ServletRequest;
/**
* @author yawn http://jvm123.com
* 2020/3/17 15:28
*/
@Configuration
public class ServletComponentConfig {
@Value("${app.key}")
private String appkey;
@Bean
public FilterRegistrationBean registerFilter(ServletRequest servletRequest) {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new MyFilter());
registration.setName("myFilter");
registration.setOrder(Ordered.HIGHEST_PRECEDENCE + 1000);
registration.addInitParameter("issso", "true");
registration.addInitParameter("appkey", appkey);
return registration;
}
@Bean
public ServletRegistrationBean registerServlet() {
ServletRegistrationBean registration = new ServletRegistrationBean();
registration.setServlet(new Myservlet());
registration.setName("myServlet");
registration.addUrlMappings("/servlet1");
registration.setLoadOnStartup(1);
return registration;
}
@Bean
public ServletListenerRegistrationBean registerListener() {
ServletListenerRegistrationBean registration = new ServletListenerRegistrationBean();
registration.setListener(new MySessionListener());
registration.setOrder(1);
return registration;
}
}