弹簧引导编写Servlet、过滤器、监听器拦截器的方法

  

  

在编写过滤器,监听器,拦截器之前我们需要在spring-boot启动的类上加上注解@ServletComponentScan:

        @SpringBootApplication   @ServletComponentScan   公开课MySpringbootApplication {   公共静态void main (String [] args) {   SpringApplication.run (MySpringbootApplication.class, args);   }   }      

  

spring-boot编写过滤器和春天中差不多,直接看代码:

        @WebServlet (urlpattern="/服务公司”)   公开课MyServlet扩展HttpServlet {   @Override   保护无效doGet (HttpServletRequest请求,HttpServletResponse响应){   System.out.println(“象doget - - - - - - - - - - - - - - - - - - - - - - - - -”);   doPost(请求、响应);   }   @Override   保护无效doPost (HttpServletRequest请求,HttpServletResponse响应){   System.out.println (“- - - - - - - - - - - - dopost - - - - - - - - - - - - -”);   }   }      

其实也就是注解的不同而已:

        @WebServlet (urlpattern="/服务公司”)      

  

在spring-boot里编写过滤器我们只需要实现javax.servlet.Filter

        @WebFilter (filterName=癿yFilter urlpattern="/* ")   公共类MyFilter实现滤波器{   @Override   FilterConfig FilterConfig公共空init()抛出ServletException {   System.out.println(“初始化过滤器”);   }   @Override   公共空间的doFilter (ServletRequest ServletRequest, ServletResponse ServletResponse, FilterChain FilterChain)抛出IOException, ServletException {   System.out.println(“执行过滤器”);   filterChain。doFilter (servletRequest servletResponse);   }   @Override   公共空间摧毁(){   System.out.println(“销毁过滤器!”);   }   }      

然后添加一个注解:

        @WebFilter (filterName=癿yFilter urlpattern="/* ")      

  

在上面,看了下过滤器的使用。其实监听器和拦截器就差不多了,直接上代码:

        @WebListener   公共类MyHttpSessionListener实现HttpSessionListener {   @Override   公共空间sessionCreated (HttpSessionEvent HttpSessionEvent) {   system . out。println(“会话被创建”);   }   @Override   公共空间sessionDestroyed (HttpSessionEvent HttpSessionEvent) {   system . out。println(“会话被摧毁”);   }   }      

我们发现只是注解发生了变化:

  

@WebListener   

  

拦截器大致和上面差不多,不过有一点点不同。我们知道在网上开发中,可以使用过滤器和拦截器来过滤外部的网站请求。但是拦截器提供了更加细致的控制功能。主要有:请求之前,请求之后渲染之前,渲染之后,请求全部结束之后这四个步骤的拦截。

  

  

自定义拦截器,实现org.springframework.web.servlet.HandlerInterceptor

  

自定义WebAppConfigurer,继承WebMvcConfigurerAdapter

  

在自定义的WebAppConfigurer覆盖父类方法addInterceptors (InterceptorRegistry注册表),并在方法中添加自己定义的拦截器

        公共类MyInterceptor实现HandlerInterceptor {   @Override   公共布尔preHandle (HttpServletRequest HttpServletRequest HttpServletResponse HttpServletResponse,对象o){抛出异常   System.out.println (MyInterceptor.class.getName() +”:在请求之前调用”);   返回true;   }   @Override   公共空postHandle (HttpServletRequest HttpServletRequest HttpServletResponse HttpServletResponse,对象o, ModelAndView ModelAndView){抛出异常   System.out.println (MyInterceptor.class.getName() +”:请求处理之后视图渲染之前使用”);   }   @Override   公共空afterCompletion (HttpServletRequest HttpServletRequest HttpServletResponse HttpServletResponse,对象o,异常e){抛出异常   System.out.println (MyInterceptor.class.getName() +”:请视图渲染之后使用”);   }   }      @ configuration   公开课MyWebAppConfigurer延伸WebMvcConfigurerAdapter {   @Override   公共空间addInterceptors (InterceptorRegistry注册表){//多个拦截器组成一个拦截器链//addPathPatterns用于添加拦截规则//excludePathPatterns用户排除拦截   注册表。addInterceptor(新MyInterceptor ()) .addPathPatterns (“/* *”);   注册表。addInterceptor(新MyInterceptor2 ()) .addPathPatterns (“/* *”);   super.addInterceptors(注册表);   }   }

弹簧引导编写Servlet、过滤器、监听器拦截器的方法