Spring boot 配置Servelt、Filter、Listener

来源:互联网 发布:python openwrt 模拟 编辑:程序博客网 时间:2024/06/08 19:19

Spring Boot集成了servlet容器,当我们在pom文件中增加spring- boot-starter-web的maven依赖时,不做任何web相关的配置便能提供web服务,这还得归于spring boot 自动配置的功能(因为加了EnableAutoConfiguration的注解),帮我们创建了一堆默认的配置,以前在web.xml中配置,现在都可 以通过spring bean的方式进行配置,由spring来进行生命周期的管理,大多数情况下,我们需要重载这些配置(例如修改服务的启动端 口,contextpath,filter,listener,servlet,session超时时间等)

本节讲解在SpringBoot中如何配置ServeltFilterListener。大家可能已经注意到,在SpringBoot中,不光将Spring的配置文件省略了,连web容器的web.xml文件都省略了,而之前,我们通常都是将Servelt、Filter、Listener等配置在web.xml中配置的,而SpringBoot提供了更加简化的配置。在讲解如何配置之前,我们先将演示用Servelt、Filter、Listener的准备好。


DemoServelt.java

  1. import javax.servlet.ServletException;
  2. import javax.servlet.http.HttpServlet;
  3. import javax.servlet.http.HttpServletRequest;
  4. import javax.servlet.http.HttpServletResponse;
  5.  
  6. public class DemoServlet extends HttpServlet{
  7.  
  8. /**
  9.  * 
  10.  */
  11. private static final long serialVersionUID = 2600143224322327782L;
  12.  
  13. @Override
  14. protected void doGet(HttpServletRequest req, HttpServletResponse resp)
  15. throws ServletException, IOException {
  16. System.out.println("==>DemoServlet接受请求");
  17. resp.getWriter().write("DemoServlet access success");
  18. }
  19.  
  20. @Override
  21. protected void doPost(HttpServletRequest req, HttpServletResponse resp)
  22. throws ServletException, IOException {
  23. this.doGet(req, resp);
  24. }
  25. }


DemoFilter.java

  1. import java.io.IOException;
  2.  
  3. import javax.servlet.Filter;
  4. import javax.servlet.FilterChain;
  5. import javax.servlet.FilterConfig;
  6. import javax.servlet.ServletException;
  7. import javax.servlet.ServletRequest;
  8. import javax.servlet.ServletResponse;
  9.  
  10. public class DemoFilter implements Filter{
  11.  
  12. @Override
  13. public void init(FilterConfig filterConfig) throws ServletException {
  14. System.out.println("==>DemoFilter启动");
  15. }
  16.  
  17. @Override
  18. public void doFilter(ServletRequest request, ServletResponse response,
  19. FilterChain chain) throws IOException, ServletException {
  20. System.out.println("==>DemoFilter拦截请求");
  21. chain.doFilter(request, response);
  22. }
  23.  
  24. @Override
  25. public void destroy() {
  26. }
  27. }


DemoListener.java

  1. import javax.servlet.ServletContextEvent;
  2. import javax.servlet.ServletContextListener;
  3.  
  4. public class DemoListener implements ServletContextListener{
  5.  
  6. @Override
  7. public void contextInitialized(ServletContextEvent sce) {
  8. System.out.println("==>DemoListener启动");
  9. }
  10.  
  11. @Override
  12. public void contextDestroyed(ServletContextEvent sce) {
  13. }
  14.  
  15. }


在准备好这些文件之后,我们开始配置。SpringBoot提供了2种方式配置Servlet、Listener、Filter。一种是基于RegistrationBean,另一种是基于注解。


1、基于RegistrationBean的配置

spring boot提供了 ServletRegistrationBeanFilterRegistrationBeanServletListenerRegistrationBean这3个东西来进行配置Servlet、Filter、Listener


编写配置类WebConfig.java

  1. import java.util.ArrayList;
  2. import java.util.EventListener;
  3. import java.util.List;
  4.  
  5. import org.springframework.boot.context.embedded.FilterRegistrationBean;
  6. import org.springframework.boot.context.embedded.ServletListenerRegistrationBean;
  7. import org.springframework.boot.context.embedded.ServletRegistrationBean;
  8. import org.springframework.context.annotation.Bean;
  9. import org.springframework.context.annotation.Configuration;
  10. import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
  11.  
  12. import com.tianshouzhi.springbootstudy.web.filter.DemoFilter;
  13. import com.tianshouzhi.springbootstudy.web.listener.DemoListener;
  14. import com.tianshouzhi.springbootstudy.web.servlet.DemoServlet;
  15.  
  16. @Configuration
  17. public class WebConfig extends WebMvcConfigurerAdapter{
  18. @Bean
  19. public FilterRegistrationBean getDemoFilter(){
  20. DemoFilter demoFilter=new DemoFilter();
  21. FilterRegistrationBean registrationBean=new FilterRegistrationBean();
  22. registrationBean.setFilter(demoFilter);
  23. List<String> urlPatterns=new ArrayList<String>();
  24. urlPatterns.add("/*");//拦截路径,可以添加多个
  25. registrationBean.setUrlPatterns(urlPatterns);
  26. registrationBean.setOrder(1);
  27. return registrationBean;
  28. }
  29. @Bean
  30. public ServletRegistrationBean getDemoServlet(){
  31. DemoServlet demoServlet=new DemoServlet();
  32. ServletRegistrationBean registrationBean=new ServletRegistrationBean();
  33. registrationBean.setServlet(demoServlet);
  34. List<String> urlMappings=new ArrayList<String>();
  35. urlMappings.add("/demoservlet");////访问,可以添加多个
  36. registrationBean.setUrlMappings(urlMappings);
  37. registrationBean.setLoadOnStartup(1);
  38. return registrationBean;
  39. }
  40. @Bean
  41. public ServletListenerRegistrationBean<EventListener> getDemoListener(){
  42. ServletListenerRegistrationBean<EventListener> registrationBean
  43.                            =new ServletListenerRegistrationBean<>();
  44. registrationBean.setListener(new DemoListener());
  45. //registrationBean.setOrder(1);
  46. return registrationBean;
  47. }
  48. }


这个类编写好,就相当于已经完成了配置。

运行Application.java,控制台输出:

QQ截图20160219222237.png

可以看到Listener和Filter在应用启动的时候,都初始化了。


在浏览器中访问servlet:http://localhost:8080/demoservlet

QQ截图20160219222540.png

可以看到servlet可以接受到请求并响应。而在控制台中,我们还可以看到

QQ截图20160219222750.png

说明对于servlet的请求,Filter是可以进行成功拦截的。


2、基于注解的配置


阅读全文
0 0