过滤器
什么是过滤器
这里讨论的是SpringMVC框架中使用的过滤器,是一个服务器端的组件,通过在web.xml中配置过滤器,截取用户端的请求和响应信息,完成对用户端请求内容的过滤。比如,一名未登录的用户想要访问登录后的信息页面,通过过滤器,可以过滤该请求,使返回登录页面。
生命周期:init(FilterConfig config)-》doFilter(HttpServletRequest r,HttpServletResponse r2,FilterChain fc)-》destroy()。
通过源码可以看出,在启动web容器的时候,会加载拦截器,生成FilterConfig ,通过使用config可以获取web.xml中配置的properties:
过滤器类型有:request、include、forward、error。(过滤什么类型的请求,默认是request)
只有符合目标url地址的才会触发过滤器:
过滤器链执行过程:根据web.xml中的生命顺序
怎么使用过滤器
以Spring自带的编码过滤器为例,只需要在web.xml中配置过滤器:
通过配置filter标签来设置过滤器的名称和类等信息,async-support表示支持多线程编程。我们来到该实现类中查看源码如下:
通过继承Filter类实现了doFilterInternal()方法:
在方法内完成对response内容的编码修改。
使用注解的方式注册过滤器:https://www.cnblogs.com/xdp-gacl/p/4224837.html
拦截器
什么是拦截器
拦截器是指通过统一拦截从浏览器发往服务器的请求来完成功能的增强的组件。
使用场景:解决一些共性问题(乱码问题、权限认证问题)。
怎么使用拦截器
在SpringMVC中配置:
通过增加<mvc:mapping path="/*" />标签来配置拦截目标url
编写拦截器实现HandlerInterceptor接口:
使用注解的方式实现拦截:https://www.cnblogs.com/meitian/p/9078994.html
拦截器和过滤器的区别
拦截器是通过框架,运用反射技术来拦截请求,而过滤器是通过servlet容器拦截全部的请求:
https://www.cnblogs.com/panxuejun/p/7715917.html
监听器
什么是监听器
是指对于其他对象发生事件或者状态改变进行监听并处理的对象。例如:统计在线用户数量。
监听器的分类:
监听器的启动顺序:
怎么使用监听器
首先在web.xml中生命监听器(以log4j为例):
进入源码中可以看到主要重写了两个方法:
当web容器启动的时候,加载监听器,获得ServletContextEvent的实例,根据监听器类别的不同,可以从event中获取监听对象(attribute等等)。
使用注解的方式注册监听器:https://www.cnblogs.com/xdp-gacl/p/4226851.html