过滤器(Filter)
什么是过滤器过滤器是Javaweb的三大组件之一。他与servlet很相似,不过过滤器是用来拦截请求的,而不是处理请求的。
当用户请求某个servlet时,会先执行部署在这个请求上的Filter,如果Filter“放行”,那么,会继续执行用户请求的servlet,如果Filter不放行,那么就不会执行用户请求的Servlet。
他会在一组资源(servlet jsp CSS HTML .....)的前面执行
他可以让请求得到目标资源,也可以不让请求达到!
*过滤器有拦截请求的能力!
如:没有登录的人拦截 不然其访问对应的资源
过滤器如何编写?
写一个类实现javax.servlet.Filter接口
2.在web.xml中就行配置【与servlet非常相似】
Tips当编写多个filter时,会按照配置顺序执行filter。
Filter的生命周期
和Serlvet几乎一致。
在服务器启动时创建对象,之创建一次。在服务器关闭时销毁filter对象
初始化方法:
publicvoidinit(FilterConfig config)
在filter对象创建之后执行,用于初始化filter对象。
Config参数可以获取初始化参数。
销毁的方法:
publicvoiddestroy()
在服务器关闭时,销毁filter对象之前执行,主要用于释放资源。
过滤器处理方法:
publicvoiddoFilter(ServletRequest request, ServletResponse response, FilterChainchain)
处理要过滤的请求的方法。
参数:
ServletRequest 是HttpServletRequest的父接口。
实际上服务传入的对象就是HttpServletRequest类型的参数。
所以可以直接强制类型转化
HttpServletRequestreq= (HttpServletRequest)request;
ServletResponse 是HttpServletResponse父接口。
服务器传入的实际也是HttpServletResponse对象。同样可以强制类型转换。
tips:
在filter中同样可以使request转发,或者response重定向。
FilterChain:主要是调用其方法 doFilter(request,response)
如果存在下一个filter,则直接调用下一个filter,如果不存在,则直接访问资源。