过滤器

         过滤器是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响应内容。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值