最近被这几个概念搞的很混,刚好今天有时间就缕一缕。
下面都是我参考过的博客:
参考-1-springBoot(6)—过滤器,监听器,拦截器
参考-2-springboot 整合 ServletRequestListener监听器
参考-3-过滤器,拦截器,监听器的配置与说明
以下个人总结,纯属个人笔记,有问题请指出
过滤器:在进入servlet
前对请求进行拦截,主要处理编码和授权
拦截器:在web
中拦截器是在mvc
中对请求进行拦截,主要在进controller
前和后进行拦截
监听器:servlet
中的监听器主要用来监听某些对象的创建和销毁,如session
,request
等
springboot中实现过滤器,监听器,拦截器
一、过滤器:
- 实现
filter
接口,标注下面两个注解
@WebFilter(initParams = @WebInitParam(name =
"aa",value = "123",description = "哈哈"),urlPatterns = "/test")
@Order(1)
- 在启动类上标注
servlet
的扫描注解,这个注解不仅是配置扫描过滤器,配置监听器的时候也要在这里添加监听器所在的包
@ServletComponentScan(basePackages =
{"com.nihaosi.filterdemo.filter","com.nihaosi.filterdemo.lister"})
二、拦截器
这里以HandlerInterceptor
拦截器为例
- 实现
HandlerInterceptor
接口并实现方法,下面是对应方法的解释
public class CosuIntercepteor implements HandlerInterceptor{
/**
* 简单理解:进入controller之前
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//该方法被调用的时机是,HandlerMapper根据url找到Handler之后,HandlerAdapter执行请求之前调用
System.out.println("prehandle======");
return true;
}
/**
* 执行完controller之后,渲染视图之前
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
//处理器执行完请求后,前端控制器渲染视图前
System.out.println("postHandle======");
}
/**
* 处理完请求并且渲染完视图后执行
* 适用于资源清理
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion======");
}
}
- 使用配置类添加拦截器
@Configuration
public class CustWebMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
//添加拦截器
registry.addInterceptor(new CosuIntercepteor()).addPathPatterns("/test01");
}
}
三、监听器
servlet的监听接口,
1)ServletContextListener监听web应用的启动和关闭
2)ServletContextAttributeListener监听ServletContext范围内属性的改变
3)ServletRequestListener监听用户的请求
4)ServletRequestAttributeListener监听ServletRequest范围内(request)内属性的变化
5)HttpSessionListener监听用户session的开始和结束
6)HttpSessionAttributeListener监听HttpSession范围内session内属性的改变。
springmvc的监听器ContextLoaderListener(实现ServletContextListener)用于加载spring容器的配置文件。
###2.2监听器配置流程(以ContextLoaderListener为例)
以ServletRequestListener
监听器为例
- 实现该接口
- 在启动类添加注解,配置监听器所在的包
@ServletComponentScan(basePackages =
{"com.nihaosi.filterdemo.filter","com.nihaosi.filterdemo.lister"})
以上就是本次学习总结,每天进步一点点,加油!!