spring boot 入門(八)filter、servlet、listener
阿新 • • 發佈:2018-12-31
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