J2EE三大组件——Filter过滤器

Filter过滤器的生命周期为:init——>doFilter——>destory;这三个也是实现Filter需要重写的方法;

Filter过滤器 接受用户的请求,过滤并设置用户的请求 implements Filter /*过滤所有 包括视图jsp、html、css、js,动作admin、update、query

Filter程序同servlet一样,需要在web.xml文件中进行注册和设置拦截目标。拦截目标可以使web服务器管理的所有web资源:Jsp,Servlet,静态图片或静态html文件等。

他的应用有:拦截非法留言,拦截图片等等

/ 过滤全部*
J2EE三大组件——Filter过滤器
init方法
web应用启动时,web服务器根据web.xml文件,创建所有注册的Filter实例对象,并保存在服务器中,同时调用该Filter对象的init方法
init方法在Filter生命周期中只执行一次。
FilterConfig的作用:包含着过滤器的配置和运行环境,获得ServletContext对象,以及web.xml中配置的过滤器的初始化参数

doFilter方法
当客户端请求目标资源的时候,容器就会调用与这个目标资源相关联的过滤器的doFilter方法。
Request,response为web容器或者Filter链上的上一个Filter传递过来的请求和响应对象;
类型是ServletRequest和ServletResponse,因此过滤器的使用不依赖于具体的协议。

Chain为代表当前Filter链的对象。
chain.doFilter(request,response)把请求交付给Filter链中的下一个Filter或者Servlet程序去处理,也可以直接向客户端返回响应信息,或者重定向,跳转将请求转向其他资源。

destory方法
在web容器卸载Filter对象之前被调用,可以释放过滤器使用的资源。在Filter的生命周期中仅执行一次

过滤器如果可以访问,要放行 chain.doFilter()放行到目标

那为什么要使用Filter【过滤器】呢

1、filter层中可以获取用户的身份
2、filter层中可以做一些常规的校验(如参数校验,referer校验等)

前我们在servlet中,每个servlet的子类都需要设置字符类型,现在我们可以利用过滤器的机制,直接在doFilter中设置一次,之后就不需要继续设置了。
J2EE三大组件——Filter过滤器
getRequestURI获取所有的url连接路径

sendRedirect派发视图

设置字符集类型为UTF-8

J2EE三大组件——Filter过滤器