1. 程式人生 > >spring boot 入門(八)filter、servlet、listener

spring boot 入門(八)filter、servlet、listener

spring boot 入門(八)servlet、filter、listener

1. filter

spring boot有兩種方式來配置filter

1.1 Servlet 3.0新特性,以註解方式配置Filter,需在啟動類上加入@ServletComponentScan註解

@WebFilter
public class MyAnnotationFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("init MyAnnotationFilter..."
); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { chain.doFilter(request, response); System.out.println("do MyAnnotationFilter..."); } @Override public void
destroy() { System.out.println("destroy MyAnnotationFilter..."); } }

1.2 利用springboot的FilterRegistrationBean手動註冊

  • 實現filter類
@Component
public class MyBeanFilter implements Filter{

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("init MyBeanFilter..."
); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { chain.doFilter(request, response); System.out.println("do MyBeanFilter..."); } @Override public void destroy() { System.out.println("destroy MyBeanFilter..."); } }
  • 註冊filter實現
@Configuration
public class FilterConfiguration {

    @Bean
    public FilterRegistrationBean myFilterRegistrationBean(MyBeanFilter myBeanFilter){
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setDispatcherTypes(DispatcherType.REQUEST);
        registration.setFilter(myBeanFilter);
        registration.setUrlPatterns(Arrays.asList("/index"));
        return registration;
    }
}

啟動主類

@SpringBootApplication
@ServletComponentScan
public class SimpleApplicationStarter {

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

2. servlet

servlet與filter的配置類似也有兩種配法

  • 使用@WebServlet註解和filter一樣需在啟動類加上@ServletComponentScan註解
  • 利用ServletRegistrationBean 手動注入

    由於與filter程式碼類似在此不貼詳細程式碼,我們以druid的監控頁面為例子,手動注入servlet

    @Bean
    public ServletRegistrationBean druidServlet() {
        return new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
    }

當springboot應用啟動過後,通過(預設8080埠)localhost:8080/druid/index.html就能訪問到druid的監控頁面。

3. listener

與servlet、filter的配置類似
- 使用@WebListener註解和servlet、filter一樣需在啟動類加上@ServletComponentScan註解
- 利用ServletListenerRegistrationBean手動注入

ps:通過手動注入和註解實現使得springboot可以相容新老系統
示例程式碼:https://github.com/Json-Lin/spring-boot-practice/tree/master/spring-boot-practice-filter
end