Filter概念(Filter的作用)
Filter :过滤器从名字可以看出来,他就是过滤我们的请求他和serlvet很相似,在serlvet处理之前我们可以用filter来进行处理,同理在servlet处理完后,我们也可以处理响应。
但是,在到达servlet的时候servlet自己并不知道,他的前面经过了这些过滤器。这样我们就可以做很多的事情了,这是不是有点像我们的AOP的概念。
Filter的作用
serlvet处理之前
1.权限的验证(判断是否登录)2.请求的格式化的处理(比如request中的字符的编码)
3.建立日志
servlet处理之后
1.压缩响应流2.追加或者是修改响应流
3.创建一个完全不同的响应
filter的是实现Filter这个接口,一般要重写里面的三个方法init(FilterConfig filerConfig),destory(),doFilter(ServletRequest serlvetRequest, ServletResponse serlvetResponse,FilterChain filterChain);
1.init方法中有FilterConfig 对象,这个对象会保存起来,在后面的两个方法中使用,filterConfig 和 servletConfig 一样都是我们在DD中配置的参数,可以通过方法去获取里面配置的参数。
2.doFilter(ServletRequest serlvetRequest, ServletResponse serlvetResponse,FilterChain filterChain); 也是我们进行拦截的方法,也是处理我们的请求,响应的地方
3.ServletRequest ,ServletResponse 两个对象不是Http的 ,但是他们是HttpServletRequest和HttpServletResponse的超类,所以我们可以向下转型
filter也是有他的生命周期的和Serlvet类似,init 由我们的容器来调用,doFilter 是一个Url地址匹配到的时候,我们会调用的方法,destory 是我们容器销毁的时候调用的方法。同样一个jvm中只会有一个这种filter的实例。