对于Web应用程序来说,过滤器是一个驻留在服务器端的Web组件,它可以截取客户端与资源之间的请求与相应信息,并对这些信息进行过滤
执行顺序是:当Web服务器接收到对资源文件的请求时,先判断是否有与该资源文件关联的过滤器,如果有,那么容器讲请求先交个过滤器进行处理,过滤器处理完后再转交给目标资源。当目标资源对请求作出响应时,容器同样会将响应先交给过滤器处理,最后再将响应发给客户端。
当部署了多个过滤器时就组成了过滤器链,过滤器依次对请求做处理,交给目标资源,然后再按照相反的顺序处理响应信息,直到客户端。
过滤器并不是必须将请求交给目标资源或下一个过滤器,它可以自行处理请求,然后发送响应到客户端,或者将请求交给另一个目标资源。
与过滤器相关的接口和类主要有以下几个:
具体各类解释可参考j2ee api(简单记载以下,通过继承HttpServletRequestWrapper类可以重写getParameter方法,从而可以对请求的参数做一些特殊处理,通过继承HttpServletResponseWrapper类可以将响应流暂时存放到内存中,从而对响应留做一些替换处理后再发送到浏览器显示)
Servlet容器对部署描述符中声明的每一个过滤器只会创建一个实例。与Servlet类似,容器将在同一个过滤器实例上运行多个线程同时为多个请求服务,因此开发过滤器时也要注意线程安全问题。
<filter-mapping>中可以包含0到4个<dispatcher>元素,该元素指定过滤器对应的请求方式,可以使REQUESR、Include、Forward和Error四种之一,默认为Request(如果目标资源是通过RequestDispatcher的include或forward方法访问时,那么该过滤器不被调用)。
以下由一个例子来解释过滤器和目标资源之间的处理顺序:
a.jsp
<% response.sendRedirect("b.jsp"); System.out.println(3); %>
b.jsp
<% System.out.println(4); %>
myfilter
System.out.println(1); chain.doFilter(request,response); System.out.println(2);
web.xml中对调用a、b页面都设置了过滤器(默认request模式)
当在浏览器中输入对a.jsp的访问地址后,后台打印顺序是1、3、2、1、4、2
这里涉及到sendRedirect的原理了,它其实是向浏览器发送一个特殊的Header,然后由浏览器来做转向,转到指定的页面(用sendRedirect时浏览器的地址栏上可以看到地址的变化。而用jsp:forword则不会),也就是说sendRedirect相当于浏览器又向服务器发送了一个新的请求,那么就不难理解为何打印书序如上了。
这里,我们将a.jsp改为如下
<% //response.sendRedirect("b.jsp"); System.out.println(3); %> <jsp:forward page="b.jsp"/>
这样一来打印顺序就变了1、3、1、4、2、2。
为什么会这样呢?同样要从jsp:forward的实现原理来分析,sendRedirect方式相当于浏览器接收到了响应之后又向服务器发送了一次请求,所以相当于两次请求,而jsp:forward方式则相当于方法调用,在执行当前文件的过程中转向执行目标文件,两个文件(当前文件和目标文件)属于同一次请求,最本质的特点就是两次请求共享了reques对象和response对象
相关推荐
初识C++ 初识C++ 初识C++初识C++初识C++初识C++初识C++
初识servlet Servlet与Jsp的比较 Servlet API
资源名称:j2ee视频servlet视频教程资源目录:【】j2ee视频servlet第0讲开山【】j2ee视频实战教程servlet第1讲初识【】j2ee视频实战教程servlet第2讲(上集)【】j2ee视频实战教程servlet第2讲(下集)【】j2ee视频实战...
第5章 Java Servlet中的网络编程 5. 1 Java套接字网络编程 5. 1. 1 InetAddress类 5. 1. 2 Socket类 5. 1. 3 给手机发送网上短信息 5. 2 Java网络编程中的高层类 5. 2. 1 URL类 5. 2. 2 URLConnection类 第6...
北大青鸟 Servlet 基础 教学幻灯片PPT
初识云计算初识云计算初识云计算初识云计算初识云计算初识云计算初识云计算初识云计算
初识计算机初识计算机初识计算机
python 列表初识,通过此代码,你能够了解到python的列表操作
初识计算机PPT课件.pptx
初识C语言.pdf
jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识...
三年级信息技术课程《初识画图》课件内容 因为要参加比赛,所属机房 装不上
初识Scratch.ppt
操作系统实验报告 实验一 WINDOWS进程初识 实验二 进程管理 实验三 进程同步的经典算法 实验四 存储管理 实验五 文件和设备管理
本课是初中信息技术初识excel的教学设计
你好,放大器,初识篇,西安交通大学杨建国编著
初识计算机 幼儿园计算机课程《初识计算机》全文共15页,当前为第1页。 1. 计算机发展过程 结绳记事 算筹 幼儿园计算机课程《初识计算机》全文共15页,当前为第2页。 1. 计算机发展过程 珠算 幼儿园计算机课程《初识...
初识JavaScript(源代码)初识JavaScript(源代码)初识JavaScript(源代码)初识JavaScript(源代码)初识JavaScript(源代码)初识JavaScript(源代码)初识JavaScript(源代码)初识JavaScript(源代码)初识...
初识电脑朋友课件
Python基本概念 海龟编辑器 绘图准备 课程知识点 使用画笔 少儿编程python教案——初识Python全文共24页,当前为第2页。 Python基本概念 少儿编程python教案——初识Python全文共24页,当前为第3页。 1.Python是...