springboot mvc 配置servlet filter lister

本文介绍如何在SpringBoot中自定义MVC配置而不覆盖默认配置,并演示了如何自定义servlet、listener等组件,以及如何配置servlet容器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


虽然Spring Boot默认的配置很多情况都可以满足我们的项目需求,可是有的时候我们可能还是会需要更加灵活的SpringMVC配置,这个时候我们只需要自定义类继承自WebMvcConfigurerAdapter,然后使用@Configuration和@EnableWebMvc注解,这样我们会完全屏蔽掉Spring Boot的默认配置,但是正常情况下我们可能只是希望在Spring Boot已有默认配置的基础上再添加一些配置即Spring Boot提供的默认配置和我自定义的配置并存的情况,这个也简单,只需要去掉@EnableWebMvc注解就行了。如下代码:

@Configuration
//@EnableWebMvc//无需使用该注解,否则会覆盖掉SpringBoot的默认配置值
public class WebMVCConfig extends WebMvcConfigurerAdapter {
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/hello").setViewName("/hello");
    }

}

如何自定义servlet listener ?

 

1  可以把servlet 或者listener 注册成configuration 里的一个bean.

@Bean

public XxServlet xxServlet(){

return new XxServlet();

}

listener 和filter 类似。

2 可以定义成一个componenet 

  1. @Component("myServlet")  
  2. public class MyServlet implements Servlet{  
  3.     /** 
  4.      *  
  5.      * @see javax.servlet.Servlet#destroy() 
  6.      */  
  7.     @Override  
  8.     public void destroy() {  
  9.         System.out.println("destroy...");  
  10.     }  
  11.     /** 
  12.      * @return 
  13.      * @see javax.servlet.Servlet#getServletConfig() 
  14.      */  
  15.     @Override  
  16.     public ServletConfig getServletConfig() {  
  17.         return null;  
  18.     }  
  19.     /** 
  20.      * @return 
  21.      * @see javax.servlet.Servlet#getServletInfo() 
  22.      */  
  23.     @Override  
  24.     public String getServletInfo() {  
  25.         return null;  
  26.     }  
  27.     /** 
  28.      * @param arg0 
  29.      * @throws ServletException 
  30.      * @see javax.servlet.Servlet#init(javax.servlet.ServletConfig) 
  31.      */  
  32.     @Override  
  33.     public void init(ServletConfig arg0) throws ServletException {  
  34.         System.out.println("servlet init...");  
  35.     }  
  36.     /** 
  37.      * @param arg0 
  38.      * @param arg1 
  39.      * @throws ServletException 
  40.      * @throws IOException 
  41.      * @see javax.servlet.Servlet#service(javax.servlet.ServletRequest, javax.servlet.ServletResponse) 
  42.      */  
  43.     @Override  
  44.     public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException,  
  45.                                                                     IOException {  
  46.         System.out.println("service...");  
  47.     }  


  1. @Component("myFilter")  
  2. public class MyFilter implements Filter{  
  3.     /** 
  4.      *  
  5.      * @see javax.servlet.Filter#destroy() 
  6.      */  
  7.     @Override  
  8.     public void destroy() {  
  9.         System.out.println("destroy...");  
  10.     }  
  11.     /** 
  12.      * @param arg0 
  13.      * @param arg1 
  14.      * @param arg2 
  15.      * @throws IOException 
  16.      * @throws ServletException 
  17.      * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain) 
  18.      */  
  19.     @Override  
  20.     public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)  
  21.                                                                                         throws IOException,  
  22.                                                                     ServletException {  
  23.         System.out.println("doFilter...");  
  24.         arg2.doFilter(arg0, arg1);  
  25.     }  
  26.     /** 
  27.      * @param arg0 
  28.      * @throws ServletException 
  29.      * @see javax.servlet.Filter#init(javax.servlet.FilterConfig) 
  30.      */  
  31.     @Override  
  32.     public void init(FilterConfig arg0) throws ServletException {  
  33.         System.out.println("filter init...");  
  34.     }  
  35.        
  36. }<span style="font-family: Arial, Helvetica, FreeSans, sans-serif; font-size: 13.3333330154419px; line-height: 17.3333339691162px; background-color: transparent;">   </span>  



  1. @Component("myListener")  
  2. public class MyListener implements ServletContextListener{  
  3.     /** 
  4.      * @param arg0 
  5.      * @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent) 
  6.      */  
  7.     @Override  
  8.     public void contextDestroyed(ServletContextEvent arg0) {  
  9.         System.out.println("contextDestroyed...");  
  10.     }  
  11.     /** 
  12.      * @param arg0 
  13.      * @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent) 
  14.      */  
  15.     @Override  
  16.     public void contextInitialized(ServletContextEvent arg0) {  
  17.         System.out.println("listener contextInitialized...");  
  18.     }  
  19.        
  20. }  


如果觉得控制力度不够灵活(例如你想修改filter的映射),spring boot还提供了 ServletRegistrationBean,FilterRegistrationBean,ServletListenerRegistrationBean这3个东西来进行配置


  1. @Configuration  
  2. public class WebConfig {  
  3.     @Bean  
  4.     public FilterRegistrationBean filterRegistrationBean(MyFilter myFilter){  
  5.         FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();  
  6.         filterRegistrationBean.setFilter(myFilter);  
  7.         filterRegistrationBean.setEnabled(true);  
  8.         filterRegistrationBean.addUrlPatterns("/bb");  
  9.         return filterRegistrationBean;  
  10.     }     
  11. }  


servlet 容器配置?


可以通过两种方式配置servlet容器,一种是通过properties文件,例如:

[java]  view plain  copy
  1. server.port=8081  
  2. server.address=127.0.0.1  
  3. server.sessionTimeout=30  
  4. server.contextPath=/springboot  
完整的配置信息可以看这  http://github.com/spring-projects/spring-boot/tree/master/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java

    另一种方式是Java代码的形式:

[java]  view plain  copy
  1. @Component  
  2. public class MyCustomizationBean implements EmbeddedServletContainerCustomizer  {  
  3.     /** 
  4.      * @param container 
  5.      * @see org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer#customize(org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer) 
  6.      */  
  7.     @Override  
  8.     public void customize(ConfigurableEmbeddedServletContainer container) {  
  9.          container.setContextPath("/sprintboot");  
  10.          container.setPort(8081);  
  11.          container.setSessionTimeout(30);  
  12.     }  
  13.        
  14. }  





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值