- 浏览: 1477700 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (798)
- struts2 (42)
- servlet (20)
- quartz (4)
- jquery & ajax (24)
- tomcat (5)
- javascript (15)
- struts1 (8)
- 搜索关键字及链接 (3)
- fckeditor (3)
- Apache (5)
- spring (22)
- linux (3)
- 企业应用 (8)
- 综合应用 (13)
- 服务器 (2)
- 数据库 (85)
- 性能调优 (21)
- 网络应用 (15)
- 缓存技术 (8)
- 设计模式 (39)
- 面试题 (7)
- 程序人生&前辈程序员 (29)
- java基础 (59)
- hibernate (75)
- log4j (4)
- http (11)
- 架构设计 (28)
- 网页设计 (12)
- java邮件 (4)
- 相关工具 (11)
- ognl (7)
- 工作笔记 (18)
- 知识面扩展 (12)
- oracle异常 (1)
- 正则表达式 (2)
- java异常 (5)
- 项目实践&管理 (1)
- 专业术语 (11)
- 网站参考 (1)
- 论坛话题 (2)
- web应用 (11)
- cxf&webservice (22)
- freemarker (3)
- 开源项目 (9)
- eos (1)
- ibatis (6)
- 自定义标签 (3)
- jsp (3)
- 内部非公开文档(注意:保存为草稿) (0)
- 国内外知名企业 (2)
- 网店 (3)
- 分页 (1)
- 消费者习惯 (2)
- 每日关注 (1)
- 商业信息 (18)
- 关注商业网站 (1)
- 生活常识 (3)
- 新闻 (2)
- xml&JSON (5)
- solaris (1)
- apache.common (3)
- BLOB/CLOB (1)
- lucene (2)
- JMS (14)
- 社会进程 (8)
- SSH扩展 (2)
- 消费心理 (1)
- 珠三角 (1)
- 设计文档 (1)
- XWork&webwork (1)
- 软件工程 (3)
- 数据库及链接 (1)
- RMI (2)
- 国内外知名企业&人物 (1)
最新评论
-
司c马:
简介易懂、
OutputStream和InputStream的区别 -
在世界的中心呼喚愛:
解决我的问题
Java获取客户端的真实IP地址 -
bo_hai:
都是些基本的概念呀!
SSO -
tian_4238:
哥们,你也是搞水利这块的吧。
巧用SQLQuery中的addScalar -
loveEVERYday:
java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp小结
Filter是从Servlet2.3规范开始新增的功能,并在Servlet2.4规范中得到增强。以下是Filter在Web开发中的应用。
过滤器概述:
过滤器就是在源数据和目的数据之间起过滤作用的中间组件。对Web应用来说,过滤器是一个驻留在服务器端的Web组件,它可以截取客户端和资源之间的请求与响应信息,并对这些信息进行过滤。
当Web容器接受到一个对资源的请求时,它将判断是否有过滤器与这个资源相关联。如果有,那么容器将把请求交给过滤器进行处理。在过滤器中,你可以改变请求的内容,或者重新设置请求的报头信息,然后再将请求发送给目标资源。当目标资源对请求作出响应时候,容器同样会将响应先转发给过滤器,再过滤器中,你可以对响应的内容进行转换,然后再将响应发送到客户端。
过滤器在Web开发中的一些主要应用:
·对用户请求进行统一认证。
·对用户的访问请求进行记录和审核。
·对用户发送的数据进行过滤或替换。
·转换图象格式。
·对响应内容进行压缩,减少传输量。
·对请求或响应进行加解密处理
·触发资源访问是事件。
·对XML的输出应用XSLT。
Filter API :
与过滤器开发相关的接口与类都包含在javax.serlvet和javax.servlet.http包中,主要有下面的接口和类。
·javax.servlet.Filter接口
·javax.servlet.FilterConfig接口
·javax.servlet.FilterChain接口
·javax.servlet.ServletRequestWrapper类
·javax.servlet.ServletResponseWrapper类
·javax.servlet.http.HttpServletRequestWrapper类
·javax.servlet.http.HttpServletResponseWrapper类
Filter接口:
开发过滤器要实现javax.servlet.Filter接口,与开发servlet要实现
javax.servlet.Servlet接口类似。提供了一个公开的不带参数的构造方法。在Filter
接口中,定义了下面的三个方法:
·public void init(FilterConfig filterConfig)throws ServletException
Web容器调用该方法该方法来初始化过滤器。容器在调用该方法时,向过滤器传递
FIlterConfig对象,FilterConfig的用法和ServletConfig(参见以前相关内容)类似
。利用FilterConfig对象可以得到ServletContext对象,以及部署描述符中配置的过滤
器的初始化参数。在这个方法中,可以抛出ServletException异常,通知容器该过滤器
不能正常工作。
·public void doFilter(ServletRequest request,ServletResponse
response,FilterChain chain)throws java.io.IOException,ServletException
doFilter()方法类似于Servlet接口的service()方法。当客户端请求目标资源的时候,容器就会调用与这个目标资源相关联的过滤器的doFilter()方法。在特定的操作完成后,可以调用chain.doFilter(request,response)将请求传给下一个过滤器(或目标资源),也可以直接向客户端返回响应信息,或者利用RequestDispatcher的forward()和include()方法,以及HttpServletResponse的sendRedirect()方法将请求转向到其他资源。需要注意的是,这个方法的请求和响应参数的类型是ServletRequest和ServletResponse,也就是说,过滤器的使用并不依赖于具体的协议。
·public void destroy()
Web容器调用该方法指示过滤器的生命周期结束。在这个方法中,可以释放过滤器使用的资源。
与开发Servlet不同的是,Filter接口并没有相应的实现类可供继承,要开发过滤器,只能直接实现Filter接口。
FilterConfig接口:
javax.servlet.FilterConfig接口类似于javax.servlet.ServletConfig接口,用于在过滤器初始化时,向其传递信息。FilterConfig接口有容器实现,容器将其作为参数传入过滤器对象的init()方法中。在FilterConfig接口,定义了4个方法:
·public java.lang.String getFilterName()
得到描述符中指定的过滤器的名字。
·public java.lang.String getInitParameter(java.lang.String name)
返回在部署描述中指定的名字为name的初始化参数的值。如果不存在返回null.
·public java.util.Enumeration getInitParameterNames()
返回过滤器的所有初始化参数的名字的枚举集合。
·public ServletContext getServletContext()
返回Servlet上下文对象的引用。
FilterChain接口:
FilterChain接口由容器实现,容器将其实例作为参数传入过滤器对象的doFilter()方法中。过滤器对象使用FilterChain对象调用过滤器链中的下一个过滤器,如果该过滤器是链中最后一个过滤器,那么将调用目标资源。FilterChain接口只有一个方法,如下:
·public void doFilter(ServletRequest request,ServletResponse response) throws java.io.IOException
调用该方法将使过滤器链中的下一个过滤器被调用。如果是最后一个过滤器,会调用目标资源。
过滤器的部署:
在实现一个过滤器后,需要在部署描述符中对过滤器进行配置,这是通过<filter>和<filter-mapping>元素来完成的。
<filter>元素用于在Web应用程序中声明一个过滤器。
在<filter>元素内,<description>、<display-name>、<icon>元素和以往servlet的配置中的相同。<filter-name>用于为过滤器指定一个名字,该元素的内容不能为空。<filter-class>元素用于指定过滤器的完整的限定类名。<init-param>元素用于为过滤器指定初始化参数,它的子元素<param-name>指定参数的名字,<param-value>指定参数的值。在过滤器中,可以使用FilterConfig接口对象来访问初始化参数。
下面是<filte>元素的一个小例子:
- <filter>
- <filter-name>testFitler</filter-name>
- <filter-class>org.test.TestFiter</filter-class>
- <init-param>
- <param-name>word_file</param-name>
- <param-value>/WEB-INF/word.txt</param-value>
- </init-param>
- </filter>
Servlet容器对部署描述符中声明的每一个过滤器,只创建一个实例。与Servlet类似,容器将在同一个过滤器实例上运行多个线程来同时为多个请求服务,因此,开发过滤器时,也要注意线程安全的问题。
<filter-mapping>元素用于指定过滤器关联的url样式或者Servlet。
其中<filter-name>子元素的值必须是在<filter>元素中声明过的过滤器的名字。<url-pattern>元素和<servlet-name>元素可以选择一个;<url-pattern>元素指定过滤器关联的URL样式;<servlet-name>元素指定过滤器对应的Servlet。用户在访问<url-pattern>元素指定的URL上的资源或<servlet-name>元素指定的Servlet时,该过滤器才会被容器调用。<filter-mapping>元素还可以包含0到4个<dispatcher>,指定过滤器对应的请求方式,可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默认REQUEST.
·REQUEST
当用户直接访问也面时,Web容器将会调用过滤器。如果目标资源是通过RequestDispatcher的include()或forward()方法访问时,那么该过滤器就不会被调用。
·INCLUDE
如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用。
·FORWARD
如果目标资源是通过RequestDispatcher的forward()方法访问时,那么该过滤器将被调用,除此之外,该过滤器不会被调用。
·ERROR
如果目标资源是通过声明式异常处理机制调用时,那么该过滤器将被调用。除此之外,过滤器不会被调用。
例子:
- <filter-mapping>
- <filter-name>testFilter</filter-name>
- <url-pattern>/test.jsp</url-pattern>
- </filter-mapping>
当用户访问test.jsp页面时,容器就会调用testFilter过滤器。
- <filter-mapping>
- <filter-name>testFilter</filter-name>
- <url-pattern>/index.jsp</url-pattern>
- <dispatcher>REQUEST</dispatcher>
- <dispatcher>FORWARD</dispatcher>
- </filter-mapping>
当用户直接访问index.jsp页面,或者通过RequestDispatcher的forward()方法访问时,容器就会调用testFilter过滤器。
1.定义:ServletFilter是Servlet2.3规范中新增加的,它是截取用户从客户端提交的请求,在还没有到达需要访问的资源时欲行的一个类.它的操纵来自客户端的请求,在资源还没有发送到客户端前截取响应,并处理这些还没有发送到客户端的响应.
2.ServletFilter的作用:
权限的校验,日志记录,图片的转换,数据的加密等等.
要作为 ServletFilter的Java类必须实现Filter接口.该接口由一对自描述的生命周期方法 init(FilterConfig),destroy()和一个行为方法doFilter(ServletRequest, ServletResponse, FilterChain).
a.实现Filter接口
b.实现doFilter方法
c.传递过滤链,放请求通过
d.在web.xml文件中注册过滤器
发表评论
-
ServletContext接口
2011-08-03 19:57 13171. 获取web应用(tomcat的Context ... -
ServletConfig接口
2011-08-03 19:41 13481. ServletConfig接口用于描述Ser ... -
HttpServletResponse
2011-08-03 19:31 17901. 控制消息头 add ... -
基于AOP设计思想的拦截器(Interceptor)与传统拦截器(Filter)的区别
2011-07-11 11:46 9372现在AOP的设计开发理念在软件开发中用的越来越广泛,在我们开发 ... -
HttpSessionListener用法
2010-12-02 20:46 1480继上次说到Listener的功效,这里就不得不说说另外一个接口 ... -
一个简单jsp-servlet例子
2010-10-15 11:17 5443以下的简单 jsp-servlet 例子流程为: inde ... -
过滤器(filter)在web 中的应用(二)
2010-06-25 16:42 1084Filters是在请求资源(Servl ... -
web.xml 中的listener、 filter、servlet 加载顺序及其详解(2)
2010-06-25 13:56 159822、配置Struts <dis ... -
web.xml 中的listener、 filter、servlet 加载顺序及其详解(1)
2010-06-25 13:46 2832在项目中总会遇到一 ... -
web.xml中context-param,listener,filter,servlet加载顺序
2010-06-25 13:35 1864不同类别加载顺序:先 context-param 然后 lis ... -
javax.servlet基本类和接口
2010-06-19 21:25 2115基本类和接口一、javax.servlet.Servlet ... -
Session机制详解(jsp-servlet 技术)
2010-06-17 20:51 1447虽然session机制在web应用程序中被采用已经很长时间 ... -
servlet中配置文件web.xml中的参数context-param和init-param区
2010-06-17 09:56 1820web.xml里面可以定义两种参数:(1)applicatio ... -
优化Servlet配置为web.xml瘦身
2010-06-17 09:46 1722本文介绍优化Servlet配置为web.xml瘦身,web.x ... -
Java中用Servlet Listener实现定时监听
2010-06-12 13:50 1508分两步走: (1)实现 javax.servlet. ... -
戏说java web开发中的listener和filter
2010-06-12 11:26 1566今天在公司看到有同事在写filter,晚上一个人在家无聊,就想 ... -
谈谈Listener Servlet的应用
2010-06-12 10:53 1228... -
web中的listener简介
2010-06-12 10:42 1308... -
利用HttpSessionListener实现网站在线人数统计功能
2010-06-12 10:17 2031在网站中经常需要进行在线人数的统计。过去的一般做法是结合登录 ...
相关推荐
实现一个禁止缓存的过滤器。 要求和提示: (1)禁止浏览器缓存所有动态页面; (2)有3个http响应头字段可以禁止浏览器缓存当前页面,它们在Servlet中的示例代码如下。 response.setDateHeader("Expires",-1); ...
2021-05-28-WebAPI高级应用三--过滤器Filter
在一个常规的web应用中,我们...实例说明:假设有一个web应用软件,如果是正常途径登录,我们会在其session中放入一个“user”对象进行标记,在随后的会话中我们都用过滤器进行检查,如果无效则会转向一个出错的页面。
Java Web基础入门第七十九讲 Filter(过滤器)——Filter(过滤器)常见应用(三):权限管理系统(下)-附件资源
使用过滤器实现GET请求和POST请求的中文乱码问题,只需在自己的Web应用中的web.xml中配置该filter即可使用。
在J2EE Web开发中有过滤器filter,该filter可以对指定的URL访问进行拦截,并执行过滤器的方法,根据实际应用情况,在过滤器中修改请求的代码、判断会话信息,也可以做权限控制,总之这个过滤器是非常有意义的,也...
XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin...
PHP 过滤器用于验证和过滤...通过使用过滤器,您能够确保应有程序获得正确的输入类型。 您应该始终对外部数据进行过滤! 输入过滤是最重要的应用程序安全课题之一。 什么是外部数据? •来自表单的输入数据 •Cook
Web页面的过滤与监听 了解Filter基本概念和适用场合 掌握使用Filter的基本步骤 会定义和使用Filter 掌握全局对象监听器的使用和应用 掌握会话对象监听器的使用和应用
<filter></filter> 过滤器元素将一个名字与一个实现javax.servlet.Filter接口的类相关联。 <filter-mapping></filter-mapping> 一旦命名了一个过滤器,就要利用filter-mapping元素把它与一个或多个servlet或JSP页面...
<?... ... use Filterus\Filter; $filter = Filter::map(array('foo' => 'string,min:4,default:test'));...通过使用过滤器,您能够确保应有程序获得正确的输入类型。您应该始终对外部数据进行过滤!
我们引入了一个Web过滤器,该过滤器将用户不想要的主题作为输入,并使用Wikidata查找相关术语。 应用我们的过滤算法后,不需要的内容将被隐藏起来,如果用户仍然希望看到它,则可以决定取消隐藏它。 我们的系统设法...
Struts2执行流程 1. web.xml 部署描述符 2. FilterDispatcher 实现StrutsStatics, Filter接口 (1)Filter:一个filter是一个对象用于执行过滤任务为每个请求资源(一个servlet...过滤器的配置在Web应用程序的部署描述符中.
<filter></filter> 过滤器元素将一个名字与一个实现javax.servlet.Filter接口的类相关联。<filter-mapping></filter-mapping> 一旦命名了一个过滤器,就要利用filter-mapping元素把它与一个或多个servlet或JSP页面相...
第20章 filter在web开发中的应用 588 20.1 过滤器概述 588 20.2 filter api 589 20.2.1 filter接口 589 20.2.2 filterconfig接口 590 20.2.3 filterchain接口 590 20.3 过滤器的部署 591 20.4 过滤器的开发 ...
在 J2EE 中,web.xml 文件扮演着非常重要的角色,它是一个基于 XML 的配置文件,用于描述 Web 应用的各个方面的配置信息。通过 web.xml 文件,我们可以对 Web 应用进行配置,例如设置应用程序的名称、描述、过滤器、...
<?... namespace DMS\Filter; class Filter implements FilterInterface ...通过使用过滤器,您能够确保应用程序获得正确的输入类型。您应该始终对外部数据进行过滤!输入过滤是最重要的应用程序安全课题之一。
基于Servlet Filter的访问控制过滤器插件,汪克炎,龙毅宏,对于部署在互联网上的J2EE Web应用系统,用户的安全访问是至关重要的。本文介绍使用Servlet Filter技术设计一种可插入的、可扩展的、对��
能够在MyEclipse IDE中设计简单的Servlet过滤器。 能够综合运用前面7个模块所学的知识进行Java Web项目开发,能够把前端开发技术运用到项目的开发过程中。 《Java-Web应用开发基础》教学课件08课程设计实例全文共73...
第20章 filter在web开发中的应用 588 20.1 过滤器概述 588 20.2 filter api 589 20.2.1 filter接口 589 20.2.2 filterconfig接口 590 20.2.3 filterchain接口 590 20.3 过滤器的部署 591 20.4 过滤器的开发 ...