首页 > 学院 > 开发设计 > 正文

过滤器

2019-11-08 01:53:05
字体:
来源:转载
供稿:网友

         过滤器是Servlet 2.3中定义的,可以对Servlet容器传给web组件的ServletRequest和ServletResponse对象进行检查和修改。过滤器本身不会产生ServletRequset和ServletResponse对象。可以为web组件提供一下功能:

         1.在调用web组件之前检查ServletRequest对象,修改请求头和修改正文内容,或者对请求进行预处理操作。

         2.在web组件被调用之后检查ServletResponse对象。修改响应头和响应正文。

过滤器的特点:

         1.可以检查ServletRequest和ServletResponse对象,并利用ServletRequestWrapper和ServletResponseWrapper包装类来修改这两个对象。

         2.可以在web文件中为过滤器映射特定的url。请求这些url时,servlet会先触发过滤器工作。

         3.servlet2.3以上的版本都支持过滤器。

         4.多个过滤器可以串联在一起,协同过滤请求对象和响应对象。

创建过滤器

        所有的过滤器类都要实现javax.servlet.Filter接口。有三个必须实现的方法。

        1.init(FilterConfig config)servlet容器创建FilterConfig对象,让后创建Filter对象,调用init(FilterConfig)方法.config可以读取web.xml中为配置的初始化参数。

        2.doFilter(ServletRequest request,ServletResponse response,FilterChain chain)请求url和配置url相同时调用这个方法。用于访问后续过滤器或者web组件。

        3.destroy()销毁对象调用。

过滤器的生命周期

       1.初始化,web应用启动,servlet容器加载过滤器类,创建过滤器配置对象和过滤器对象。调用init方法。

        2.运行时,只有过滤器映射url和请求url匹配时,调用doFilter方法。

       3.销毁阶段,web应用终止时。servlet容器调用destroy方法,销毁对象。

发布过滤器

       要在web.xml中加入Filter。

         <filter>		<description></description>		<filter-name>名字</filter-name>		<filter-class>过滤器的class路径</filter-class>		<init-param>//参数可以有多个,可以用FilterConfig.getInitParameter(String name)来得到			<description></description>			<param-name></param-name>			<param-value></param-value>		</init-param>		<init-param>			<param-name></param-name>			<param-value></param-value>		</init-param>	</filter>	<filter-mapping>		<filter-name>跟上面的名字对应</filter-name>		<url-pattern>/*</url-pattern>/*为过滤所有	</filter-mapping>

串联过滤器

       web.xml中一个请求url与多个过滤器匹配就可以串联。按顺序调用,先调用第一个过滤器的doFilter方法,然后执行chain.doFilter之前的方法,然后执行chain.doFilter,跳到第二个过滤器,在执行chain.filter之前的方法.同理一直到最后一个过滤器的chain.doFilter,调用servlet方法。结束后返回前一个过滤器,执行chain.doFilter之后的方法。

        使用自定义的wrapper继承ServletRequestWrapper,修改里面的方法,把自定义的Wrapper传给chain.doFilter()中的request就可以修改request对象,同理也可以修改response响应内容。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表