过滤器工作原理 java过滤器原理
当客户端发出Web资源的请求时,Web服务器根据应用程序配置文件设置的过滤规则进行检查,若客户请求满足过滤规则,则对客户请求/响应进行拦截,对请求头和请求数据进行检查或改动,并依次通过过滤器链,最后把请求/响应交给请求的Web资源处理。请求信息在过滤器链中可以被修改,也可以根据条件让请求不发往资源处理器,并直接向客户机发回一个响应。当资源处理器完成了对资源的处理后,响应信息将逐级逆向返回。同样在这个过程中,用户可以修改响应信息,从而完成一定的任务。
二、Filter简介:
过滤器通常也被称作拦截器
ServletAPI中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter。通过Filter技术,开发人员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截,如下所示:
Web浏览器-->Web服务器-->过滤器-->Web资源JSP、Servlet、Html-->过滤器-->Web服务器-->Web浏览器
三、Filter是如何实现拦截的?
1、Filter接口中有一个doFilter方法,开发人员编写的Filter需要实现此方法
2、
WEB服务器每次在调用servlet的service方法之前,会在xml文件中
查找当前url地址是否被拦截,如果有,会调用对应的filter对象的doFilter方法
3、
编写好的Filter必须在web.xml中做映射,说明拦截的url地址,此
filter才能起作用
web服务器在调用doFilter方法时,会传递一个filterChain对象进来,
filterChain对象是filter接口中最重要的一个对象,它也提供了一个
doFilter方法,开发人员可以根据需求决定是否调用此方法,调用
该方法,相当于过滤器放行,web服务器就会继续调用servlet的
service方法,即web资源就会被访问,否则web资源不会被访问。
四、实现第一个Filter程序
Filter开发分为二个步骤:
1、编写java类实现javax.servlet.Filter接口,并实现其doFilter方法。
2、在 web.xml 文件中使用和元素对编写的filter类进行注册,并设置它所能拦截的资源、
Filter链
1、在一个web应用中,可以开发编写多个Filter,这些Filter组合起来称之为一个Filter链。
2、web服务器根据Filter在web.xml文件中的注册顺序,决定先调用哪个Filter,当第一个Filter的doFilter方法被调用时,相当于Filter链的当前拦截器放行,web服务器会访问下一个Filter
3、当链上所有的Filter都放行了,web服务器才会访问目标资源
五、Filter的生命周期
1、Init方法
服务器创建一个Filter对象时会自动调用对象的init方法
通过init(FilterConfigfilterConfig)方法可以获得Filter的初始化参数
2、destroy方法
在Web容器卸载 Filter 对象之前被调用,该方法主要用于释放Filter
占用的资源
六、方案
1、统一全站字符编码的过滤器response.setCharacterEncoding(“utf-8”);
response.setContentType(“text/html;charset=utf-8”);
2、禁止浏览器缓存所有动态页面的过滤器
有 3 个 HTTP 响应头字段都可以禁止浏览器缓存当前页面,它们在 Servlet中的示例代码如下:
response.setDateHeader("Expires",-1);
response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma","no-cache");
并不是所有的浏览器都能完全支持上面的三个响应头,因此最好是同时使用上面的三个响应头。
Expires数据头:值为GMT时间值,为-1指浏览器不要缓存页面
Cache-Control响应头有两个常用值:
no-cache指浏览器不要缓存当前页面。
max-age:xxx指浏览器缓存页面xxx秒。
3、控制浏览器缓存页面中的静态资源的过滤器
场景:有些动态页面中引用了一些图片或css文件以修饰页面效果,这些图片和css文件经常是不变化的,所以为减轻服务器的压力,可————以使用filter控制浏览器缓存这些文件,以提升服务器的性能。对有可能需要缓存的资源进行拦截
通过设置Expires头通知浏览器将页面进行缓存
通过读取配置文件获得不同格式文件的缓存时间
4、实现用户自动登陆的过滤器
在用户登陆成功后,发送一个名称为user的cookie给客户端,cookie的值为用户名和md5加密后的密码。
编写一个AutoLoginFilter,这个filter检查用户是否带有名称为user的cookie来,如果有,则调用dao查询
cookie的用户名和密码是否和数据库匹配,匹配则向session中存入user对象(即用户登陆标记),以实现程序完成自动登陆。
七、Filter的部署—注册Filter
testFitlerorg.test.TestFiter
word_file
/WEB-INF/word.txt
用于为过滤器指定一个名字,该元素的内容不能为空。
元素用于指定过滤器的完整的限定类名。
元素用于为过滤器指定初始化参数,它的子元素指定参数的名字,指定参数的值。在过滤器中,可以使用FilterConfig接口对象来访问初始化参数。
八、Filter的部署—映射Filter
1、元素用于设置一个 Filter 所负责拦截的资源。一个Filter拦截的资源可通过两种方式来指定:Servlet名称和资源访问的请求路径
子元素用于设置filter的注册名称
设置 filter 所拦截的请求路径(过滤器关联的URL样式)
指定过滤器所拦截的Servlet名称
指定过滤器所拦截的资源被 Servlet容器调用的方式,可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默认REQUEST。用户可以设置
多个 子元素用来指定 Filter 对资源的多种调用方式进行拦截
2、 子元素可以设置的值及其意义:
REQUEST:当用户直接访问页面时,Web容器将会调用过滤器。如果目标资源是通过RequestDispatcher的include()或forward()方法访问时,那么该过滤器就不会被调用。
INCLUDE:如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用。
FORWARD:如果目标资源是通过RequestDispatcher的forward()方法访问时,那么该过滤器将被调用,除此之外,该过滤器不会被调用。
ERROR:如果目标资源是通过声明式异常处理机制调用时,那么该过滤器将被调用。除此之外,过滤器不会被调用。
更多阅读
暖气片工作原理 暖气片原理结构图
暖气片工作原理——简介暖气通常有水暖和气暖两种,一般暖气片指水暖,就是利用壁挂炉或者锅炉加热循环水,再通过管材链接到暖气片,最终通过暖气片将适宜的温度输出,形成室内温差,最后进行热循环使整个室内温度均匀上升。而气暖则是加热空气
小天鹅干洗机的工作原理解说 干洗机的原理
我们把采用四氯乙烯作为洗涤溶剂的干洗设备称为四氯乙烯干洗机,对采用石油作为溶剂的干洗设备称为石油干洗机;环保型干洗机是指在运行全过程中符合环保要求,对环境的危害没有或低于国家标准要求。小天鹅干洗机根据以下可能对环境和人
电力猫的工作原理 tplink电力猫说明书
相信大家已经对电力线上网不会感到陌生了。“随便一个插座,你就可以上网”这就是电力宽带所描述的前景,不过就目前来说,此种上网方式还 并未普及开来,除了其采用的设备价格较高外,技术问题也是影响其发展的瓶颈。不过任何新生技术的普及
液下泵的工作原理介绍 plc工作原理介绍
液下泵是一种单螺杆式输运泵,它的主要工作部件是偏心螺旋体的螺杆(称转子)和内表面呈双线螺旋面的螺杆衬套(称定子)。其工作原理是当电动机带动泵轴转动时,螺杆一方面绕本身的轴线旋转,另一方面它又沿衬套内表面滚动,于是形成泵的密封腔室。
洗碗机是什么工作原理? 洗碗机工作原理
洗碗机是什么工作原理?——简介随着生活水平的提高,人们对于家电的挑选要求是越来越高了,其中洗碗机是一个新兴的实物,那么下面我们就来了解一下各种洗碗机的工作原理,以方便我们做出挑选的时候有一个参考!洗碗机是什么工作原理?——方法/