ServletRegistrationBean 小记

794 阅读1分钟

ServletRegistrationBean 是一个用来包装自定义 Servlet 的 Spring Bean,它可以让 Spring 容器来管理我们的 Servlet,并且可以设置一些属性,如 URL 映射,初始化参数,加载顺序等。举例来说,如果我们有一个自定义的 Servlet 类 MyServlet,我们可以通过以下方式使用 ServletRegistrationBean 来注册它:

  • 通过 XML 配置文件,在 web.xml 中定义一个 bean 元素,并指定 class 属性为 org.springframework.boot.web.servlet.ServletRegistrationBean,并设置 init-method 属性为 onStartup。然后在 bean 元素中添加 constructor-arg 元素,分别传入 MyServlet 的实例和 URL 映射。
  • 通过 Java 注解,在 Spring Boot 的启动类或者配置类上添加 @ServletComponentScan 注解,并在 MyServlet 类上添加 @WebServlet 注解,并指定 urlPatterns 属性为 URL 映射
  • 通过 Java 代码,在 Spring Boot 的配置类中定义一个方法,返回一个 ServletRegistrationBean 的实例,并使用构造器或者 setter 方法来传入 MyServlet 的实例和 URL 映射

举个例子: 在SpringBoot项目集成Druid对SQL的监控页面,需要SpringBoot项目支持Servlet功能,此时就可以使用ServletRegistrationBean接口进行配置:

 @Bean
    public ServletRegistrationBean statViewServlet(){
        ServletRegistrationBean bean=new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
 
        Map<String,String> initParams=new HashMap<>();
        initParams.put("loginUsername","admin");
        initParams.put("loginPassword","admin");
        initParams.put("allow","0.0.0.0");//默认允许所有访问
 
        bean.setInitParameters(initParams);
        return bean;
    }