- 浏览: 199942 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
weituotian:
这个楼主热心肠,看得简单明了
HttpServletRequest地址获取 -
u011701322:
...
Jquery UI sortable 所有事件 -
CoderDream:
Mark!
jquery ajax post 传递数组 ,多checkbox 取值 -
maomao14:
楼主写的不错,感谢分享,最近我在 http://gotoma ...
jquery ajax post 传递数组 ,多checkbox 取值
从J2EE1.3开始,Servlet2.3规范中加入了对过滤器的支持。过滤器能够对目标资源的请求和响应进行截取。过滤器的工作方式分为四种,下面让我们分别来看看这四种过滤器的工作方式:
1、request过滤器
这种过滤器的工作方式比较简单,大家也经常遇到,如下所示:以下是web.xml文件配置方式:
<filter>
<filter-name>myFilter</filter-name>
<filter-class>packagename.MyFilterName</filter-class>
</filter>
<filter-mapping>
<filter-name>myFilter</filter>
<servlet-name> 目标资源</servlet-name>
</filter-mapping>
<filter>
下面我们更改一下web.xml文件的配置,如下方式:
<filter-name>myFilter</filter-name>
<filter-class>packagename.MyFilterName</filter-class>
</filter>
<filter-mapping>
<filter-name>myFilter</filter>
<servlet-name> 目标资源1</servlet-name>
</filter-mapping>
<filter-mapping>
<filter-name>myFilter</filter>
<servlet-name> 目标资源2</servlet-name>
</filter-mapping>
也就是说此过滤器对目标资源一和目标资源二都进行过滤,然后当目标资源一被访问的时候我们将请求转发给目标资源二,那么这个时候过滤器是怎么工作的呢?如下图所示:我们可以看到,当我们访问目标资源一时过滤器截取了请求,然后再转发给目标资源一,然后再转发给目标资源二,从图中我们可以看到过滤器没有截取转发到目标资源二的请求,但是我们已经在web.xml文件中配置了该过滤器对目标资源二的过滤,为什么又没有起到过滤作用呢?
答案就在于,目标资源一是客户端直接访问,而目标资源二是被转发过来的,这时过滤器就不能过滤目标资源二。如果你直接访问目标资源二,你会发现该过滤器起到了作用?
我们上面的web.xml文件配置与以下方式等价:
<filter-name>myFilter</filter-name>
<filter-class>packagename.MyFilterName</filter-class>
</filter>
<filter-mapping>
<filter-name>myFilter</filter>
<servlet-name> 目标资源1</servlet-name>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>myFilter</filter>
<servlet-name> 目标资源2</servlet-name>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
这种方式的配置,说明只有直接访问该目标资源时该过滤器才会起作用,对转发到该目标资源的请求将忽略不处理。
那如果我想对转发到目标资源二的请求进行过滤,那怎么办呢?答案见,下一种过滤器,forward过滤器。
2、forward过滤器
我们将web.xml文件的配置修改如下:
<filter-name>myFilter</filter-name>
<filter-class>packagename.MyFilterName</filter-class>
</filter>
<filter-mapping>
<filter-name>myFilter</filter>
<servlet-name> 目标资源1</servlet-name>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>myFilter</filter>
<servlet-name> 目标资源2</servlet-name>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
我们看对目标资源二过滤的配置方式,这时过滤方式为forward,也就是说对转发到目标资源二的请求过滤,如果直接访问目标资源二,过滤器将不起作用。
3、include过滤器
理解了forward过滤器之后,include过滤器就不难理解了。以下方式:
<filter-name>myFilter</filter-name>
<filter-class>packagename.MyFilterName</filter-class>
</filter>
<filter-mapping>
<filter-name>myFilter</filter>
<servlet-name> 目标资源1</servlet-name>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>myFilter</filter>
<servlet-name> 目标资源2</servlet-name>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
此表示对包含了目标资源二的请求过滤,如果直接访问目标资源二,则此过滤器将不起作用。
在JSP页面中的动作:指令包含,这时此过滤器不工作。
4、error过滤器
当我们访问一个web目标资源时,如果服务器没有找到该目标资源,那么服务器就会给出一个404错误代码。如果我们给404错误代码定义一个页面,那么当404错误发生时就会调用该页面,请看以下web.xml文件的配置:
<filter-name>myFilter</filter-name>
<filter-class>packagename.MyFilterName</filter-class>
</filter>
<filter-mapping>
<filter-name>myFilter</filter>
<servlet-name> /error.jsp</servlet-name>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
<error-page>
<error-code>404</error-code>
<location>/error.jsp</location>
</error-page>
当我们访问一个不存在的文件时,就会访问error.jsp,但是配置了过滤器对错误页面进行过滤,所以过滤器先接受到请求,然后再转发给error.jsp。
如果我们访问一个已经存在的页面,会不会调用error.jsp呢?如果这个页面中有response.sendError(404,"出错了!");那么该错误页面仍然会被调用,过滤器也会工作。
发表评论
-
java web 文件下载
2013-10-15 09:33 770File file = new File(fileName) ... -
JSP使用JDBC显示BLOB图片文件
2012-05-24 12:07 3056<%@page import="java ... -
字符串连接效率测试:stringbuilder》stringbuffer》+ 【转:尽量使用StringBuilder和StringBuffer进行字符串连接】
2012-05-15 10:05 3426前几天性能测试的时 ... -
java Servlet 下载 itext 生成的2003 word 文档(java生成word文档3)
2012-05-08 15:22 1958package cn.net.seek.servlet. ... -
java 通过使用itext 生成2003 word 文档(java生成word文档2)
2012-05-08 15:20 1306public static RtfWriter2 get ... -
java 通过使用poi hpsf 生成2003 word 文档(java生成word文档1)
2012-05-08 15:18 7524import java.io.*; import ... -
EL表达式取值
2011-12-13 00:26 865${param.id} ==》request.getPa ... -
getOutputStream() has already been called for this response异常的原因和解决方法
2011-12-07 10:05 8411.tomcat5下jsp出现getOutputStre ... -
response文件下载四步骤【转】
2011-12-06 15:44 1227//1. 设置下载类型 response. ... -
java压缩图片【转】
2011-11-08 17:06 1078在我们浏览网页的时候,我们呢时常见到这样的效果,点击小图 ... -
过滤字符串中的HMTL实体
2011-09-28 10:36 854sourceStr.replaceAll("& ... -
Java深度理解——Java字节代码的操纵
2011-09-23 10:20 832导读:Java作为业界应用最为广泛的语言之一,深得众多软件 ... -
浅谈java中的四个核心概念【转】
2011-09-23 10:18 823Java已经成为一个庞大而复杂的技术平台,对于开发人员而言 ... -
java中的移位运算
2011-09-23 10:14 1091一 基本概念 所有的整数类型以二进制数字位的变 ... -
json所需包
2011-09-14 18:33 832commons-logging-1.0.4.jar ... -
ASCII,Unicode,UTF-8,GB2312一些关于编码的理解【转】
2011-08-16 11:37 875字符编码:ASCII,Unicode,UTF-8,GB23 ... -
Java序列化的作用
2011-07-07 15:36 788序列化是什么: ... -
Jsp抓取页面内容
2011-06-24 16:41 1918<%@ page contentType=&quo ... -
Struts2 保存用户IP到cookie
2011-06-22 15:18 1515// 保存用户IP到cookie public vo ... -
Java计算百分比
2011-06-08 10:54 1296/** * 获取百分比 ...
相关推荐
jsp+servlet登录验证过滤器jsp+servlet登录验证过滤器jsp+servlet登录验证过滤器
java-web servlet 拦截器 过滤器使用 java-web servlet 拦截器 过滤器使用
servlet四个有用的过滤器,包括中文转码,缓存过滤等等
servlet过滤器实例经典过滤器,手把手交你配置过滤器,五大常用过滤器源码,走过路过的同事们注意了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Servlet过滤器的简单使用,实现一个登陆界面。代码和博文几乎一致。
Jsp+JavaBean+Servlet+Session+过滤器+sql2008数据库,代码绝对正确!运用MyEclipse10.0+Tomcat7.0开发。
servlet 过滤器做的简单登陆demo 初学者的简单例子。
java中servlet文字过滤器,取出一下页面上的乱码。我就就要用到servlet这个过滤器。
tomcat、struts2、servlet Filter(过滤器) 工作原理 学习servlet的好资料,懂得工作原理,更容易理解问题.
这是Servlet过滤器的初始化方法,Servlet容器创建Servlet过滤器实例后将调用这个方法。在这个方法中可以读取web.xml文件中Servlet过滤器的初始化参数。 b、doFilter(ServletRequest,ServletResponse,FilterChain)...
如果输入是中文,后台servlet再次输出这个内容时,可能就会是乱码,这是因为serlvet中默认是以ISO-8859-1格式编码的,如果后台有多个Servlet,多个参数,这样就不合适,这个问题,我们可以通过一个过滤器统一解决,使...
比较好也比较常见的方法是用专门的servlet过滤器进行过滤。java中有个Filter类专门从事这类工作,下面以一个简单的实例进行演示: 实例说明:假设有一个web应用软件,如果是正常途径登录,我们会在其session中放入...
小型的基于servlet的过滤器,直接在tomcat上执行即可。用来对访问网站的用户进行计数
servlet,filter,过滤器技术servlet,filter,过滤器技术
servlet过滤器详解
简单的实现了一个Servlet过滤器,并配有文档按步骤教你怎么做
第13章使用Servlet过滤器和监听器,基础知识
主要为大家详细介绍了servlet+jsp实现过滤器,防止用户未登录访问,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
servlet过滤器和监听器,servlet过滤器和监听器课件,servlet过滤器和监听器PPT
sevlet里设置过滤器,利用索引过滤不符合自己想要的url,达到重定向的目的