- 浏览: 107286 次
- 性别:
- 来自: 成都
文章分类
最新评论
过滤器是一个程序,它先于与之相关的servlet或JSP页面运行在服务器上。过滤器可附加到一个或多个servlet或JSP页面上,并且可以检查进入这些资源的请求信息。
在这之后,过滤器可以作如下的选择:
①以常规的方式调用资源(即,调用servlet或JSP页面)。
②利用修改过的请求信息调用资源。
③调用资源,但在发送响应到客户机前对其进行修改。
④阻止该资源调用,代之以转到其他的资源,返回一个特定的状态代码或生成替换输出。
定义:必须实现javax.servlet.Filter接口.
public class ClearCacheFilter implements Filter {
public ClearCacheFilter() {
}
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
}
// 这是Servlet过滤器的初始化方法.
在 web 应用程序启动时,web 服务器将根据 web.xml 文件中的配置信息来创建每个注册的 Filter 实例对象,并将其保存在服务器的内存中。Web容器(servlet容器)创建 Filter 对象实例后,将立即调用该 Filter 对象的 init 方法 。
Init 方法在 Filter 生命周期中仅执行一次, servlet容器在调用 init 方法时,会传递一个包含 Filter 的配置和运行环境的 FilterConfig 对象( FilterConfig的用法和ServletConfig类似 ) 。 利用FilterConfig对象可以得到ServletContext对象,以及部署描述符中配置的过滤器的初始化参数 。
public void init(FilterConfig fConfig) throws ServletException {
}
}
注意: 1、doFilter方法 参数不是HttpServletRequest和HttpServletResponse,但是我们在servlet中,请求的一般是http协议,这 时,如果需要处理Http的请求,可以将ServletRequest 强制转换为HttpServletRequest,ServletResponse 强制装换为HttpServletResponse,然后进行处理,如设置Http响应头信息等.
2、与开发Servlet不同的是,Filter接口并没有相应的实现类可供继承,要开发过滤器,只能直接实现Filter接口
作用: Filter 的基本功能是对 Servlet 容器调用 Servlet 的过程进行拦截,
从而在 Servlet 进行响应处理的前后实现一些特殊的功能。
1 、在 Servlet API 中定义了三个接口类来开供开发人员编写 Filter 程序: Filter , FilterChain ,FilterConfig.
2 、 Filter 程序是一个实现了 Filter 接口的 Java 类,与 Servlet 程序相似,它由 Servlet 容器进行调用和执行.
3 、 Filter 程序需要在 web.xml 文件中进行注册和设置它所能拦截的资源: Filter 程序可以拦截 Jsp , Servlet, 静态图片文件和静态 html 文件.
原理:
1、在过滤器使用时,它可以对客户的请求进行处理。处理完成后,它会交给下一个过滤器处理,这样,客户的请求在过滤链里逐个处理,直到请求发送到目标为止。
例如,某网站里有提交“修改的注册信息”的网页,当用户填写完修改信息并提交后,服务器在进行处理时需要做两项工作: 判断客户端的会话是否有效 ; 对提交的数据进行统一编码 。这两项工作可以在由两个过滤器组成的过滤链里进行处理。当过滤器处理成功后,把提交的数据发送到最终目标;如果过滤器处理不成功,将把视图派发到指定的错误页面。
2、在一个 web 应用程序中可以注册多个 Filter 程序,每个 Filter 程序都可以对一个或一组 Servlet 程序进行拦截。
3、若有多个 Filter 程序对某个 Servlet 程序的访问过程进行拦截,当针对该 Servlet 的访问请求到达时, web 容器将把这多个 Filter 程序组合成一个 Filter 链 ( 过滤器链 ) 。 Filter 链中各个 Filter 的拦截顺序与它们在应用程序的 web.xml 中映射的顺序一致
FilterChain:
1、FilterChain 接口:代表当前 Filter 链的对象。由容器实现,容器将其实例作为参数传入过滤器对象的 doFilter () 方法中。过滤器对象使用 FilterChain 对象调用过滤器链中的下一个过滤器,如果该过滤器是链中最后一个过滤器,那么将调用目标资源。
2、方法doFilter ( ServletRequest request,ServletResponse response)throws java.io.IOException :调用该方法将使过滤器链中的下一个过滤器被调用。如果是最后一个过滤器,会调用目标资源。
FilterConfig:
1、javax.servlet.FilterConfig 接口:该接口类似于 ServletConfig 接口,由容器实现。 Servlet 规范将代表 ServletContext 对象和 Filter 的配置参数信息都封装在该对象中。 Servlet 容器将其作为参数传入过滤器对象的 init () 方法中。
2、String getFilterName () :得到描述符中指定的过滤器的名字。
3、String getInitParameter (String name) : 返回在部署描述中指定的名字为 name 的初始化参数的值。如果不存在返回 null.
4、Enumeration getInitParameterNames () :返回过滤器的所有初始化参数的名字的枚举集合。
5、public ServletContext getServletContext () :返回 Servlet 上下文对象的引用。
filtermapping里面定义了对文件进行过滤,
1)、”/*”表示所有URL
2)、如果*.jsp表示对后缀是.jsp的文件进行过滤
3)、如果还有其他的页面,如.do或者.action等,那么可以继续添加
<filter-mapping>这个选项,其中<url-pattern>就填写*.do或者*.action即可。
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>manyfilter.EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<init-param>
<param-name>blacklist</param-name>
<param-value>dao</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/test.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name> EncodingFilter </filter-name>
<url-pattern>*.do</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
ERROR :如果目标资源是通过声明式异常处理机制调用时,那么该过滤器将被调用。除此之外,过滤器不会被调用。
当我们访问一个 web 目标资源时,如果服务器没有找到该目标资源,那么服务器就会给出一个 404 错误代码。如果我们给 404 错误代码定义一个页面,那么当 404 错误发生时就会调用该页面,请看以下 web.xml 文件的配置:
<filter-mapping>
<filter-name>
myFilter
</filter-name>
<
url
-pattern>/
error.jsp
</
url
-pattern>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
<error-page>
<error-code>404</error-code>
<location>/
error.jsp
</location>
</error-page>
当我们访问一个不存在的文件时,就会访问 error.jsp ,但是配置了过滤器对错误页面进行过滤,所以过滤器先接受到请求,然后再转发给 error.jsp 。
发表评论
-
Servlet3.1应用生命周期事件 (转载)
2012-12-29 17:14 619应用生命周期事件 11.1 介绍 应用事 ... -
java远程调试(转载)
2012-12-29 16:43 864新接手的项目采用的是Maven作为编译管理工具,项目内容则是按 ... -
将秒转换成日期格式的java方法:
2012-12-29 12:01 928package net.blogjava.frankieg ... -
java对世界各个时区(TimeZone)的通用转换处理方法(转载)
2012-12-25 15:24 944在进行国际性软件项目开发的过程中,有时候会碰到一些比较特殊的要 ... -
RandomAccessFile
2012-12-19 22:05 757RandomAccessFile RandomAccessF ... -
java-例子:MVC模式,用jstl和el输出数据到jsp页面.
2012-09-09 23:57 1611例子:利用session完成购物车. domain: pac ... -
java中的el——表达式语言
2012-09-09 23:36 830EL 全名为 Expression Lang ... -
servlet知识点回顾
2012-09-03 21:40 7951.Servlet规范 1.1 规范了应用服务器 to ... -
servlet-cookie和session应用示例:模拟购物车
2012-09-02 21:32 1755思路分析: 1. 根据需求抽象出业务对象 User{ ... -
java-servlet、DOM、html综合运用示例
2012-08-30 14:57 1233题目: 学员管理: 学员录入,与Student类中字段对 ... -
Servlet接口中的各方法的生命周期及读取web.xml的配置信息
2012-08-28 22:29 1235package cn.itcast.servletlife.s ... -
java-下载图片(正则表达式、HttpURLConnection、流、socket综合运用)
2012-08-26 22:22 1260package cn.itcast.httpserver; ... -
java-用HttpURLConnection发送Http请求.
2012-08-26 22:00 685注意:利用URL发送的请求,服务器只返回实体部分,不包括htt ... -
java-模拟tomcat服务器
2012-08-26 21:57 1093模拟tomcat服务器端代码示例:package cd.itc ... -
java-SAX解析XML示例
2012-08-25 19:13 789JAVA 解析 XML 通常有两种方式:DOM 和SAX ... -
java-增强for循环示例
2012-08-25 19:14 795package cd.itcast.day1; impo ... -
java-反射示例
2012-08-24 14:13 669package cd.itcast.day1; im ... -
java-可变参数示例
2012-08-24 14:07 509package cd.itcast.day1; pu ... -
java-枚举示例
2012-08-24 14:04 666package cd.itcast.day1; /* ... -
java-注解annotation
2012-08-24 13:54 685package cd.itcast.day2; impo ...
相关推荐
能够在MyEclipse IDE中设计简单的Servlet过滤器。 能够综合运用前面7个模块所学的知识进行Java Web项目开发,能够把前端开发技术运用到项目的开发过程中。 《Java-Web应用开发基础》教学课件08课程设计实例全文共73...
JAVA web过滤器Filter学习资料,精心整理,15页.
c) Filter:过滤器 d) BeanUtils:数据封装 e) Jackson:json序列化工具 4.2 Service层 f) Javamail:java发送邮件工具 g) Redis:nosql内存数据库 h) Jedis:java的redis客户端 4.3 Dao层 i) Mysql:数据库 j) ...
java过滤器-CharsetAllEncodingFilter.java 及 web.xml的配置
character-encoding-filter 是 Java Web 乱码过滤器。 web.xml <filter> <filter-name>character-encoding-filter</filter-name> <filter-class>...
除了添加两个JsFilter.java和GetHttpServletRequestWrapper.java之外,需要在web.xml添加对应的配置。 <!-- 特殊字符过滤 --> <filter> <filter-name>sqlFilter</filter-name> <filter-class>weixin.idea.waiting...
java web 过滤器防止Xss、sql注入,基于spring boot 2.0框架开发。
过滤器Filter也具有生命周期:init()->doFilter()->destroy(),由部署文件中的filter元素驱动。在servlet2.4中,过滤器同样可以用于请求分派器,但须在web.xml中声明,<dispatcher>INCLUDE或FORWARD或REQUEST或ERROR...
java filter打印请求返回参数
第2篇为基础篇,内容包括Servlet技术、JSP技术、会话跟踪、过滤器Filter、监听器Listener等;第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、资源国际化、数据库概述、JDBC详解、XML概述等;第4篇为...
第2篇为基础篇,内容包括Servlet技术、JSP技术、会话跟踪、过滤器Filter、监听器Listener等; 第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、资源国际化、数据库概述、JDBC详解、XML概述等; 第4篇为...
Filter(过滤器)简介和工作原理
内容安全策略过滤器(Java) 将“ Content-Security-Policy”或“ Content-Security-Policy-Report-Only”标头添加到响应中。 另请参阅: 通常,您只需要有限的数目,也不需要任何init参数。 如果未定义init参数...
java web 购物车,字符过滤器,权限过滤器,详细备注,适合初学者,servlet ,jsp,有数据库,简单易懂,
Filter也称之为过滤器,它是Servlet技术中最激动人心的技术.这篇文章主要介绍了Java Web Filter 过滤器学习教程的相关资料,需要的朋友可以参考下
使用该过滤器可以消除java web编程中的乱码问题,把包加入工程后只需在web.xml中设置一下过滤器的属性就可以了
在一个常规的web应用中,我们...实例说明:假设有一个web应用软件,如果是正常途径登录,我们会在其session中放入一个“user”对象进行标记,在随后的会话中我们都用过滤器进行检查,如果无效则会转向一个出错的页面。
Java Web基础入门第七十九讲 Filter(过滤器)——Filter(过滤器)常见应用(三):权限管理系统(下)-附件资源
SQL 安全注入漏洞过滤器类 Java实现 Java类实现,以及配置文件web.xml