Filter 过滤器

过滤器是个方便开关的程序功能

request 和 response 在被 servlet处理 之前之后 都得被 过滤器链先处理

代码上看则是 servlet的service同步在 doFilter()方法里


Filter基本使用

实现接口 javax.servlet.Filter

Filter 接口和 servlet接口类似
初始化方法同样可以 web.xml中配置初始化参数
过滤方法中得到的参数 request 和 response是接着要给servlet使用的, 可以对其进行修改包装代理. chain是一串过滤器的链, 到链尾之后才是servlet
销毁方法在服务器关闭前调用

public class OneFilter implements Filter {
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		System.out.println(filterConfig);
		//服务器启动时调用
		System.out.println(this);	//输出:com.filter.OneFilter@127da4b
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		
		System.out.println(chain);	//输出:org.apache.catalina.core.ApplicationFilterChain@6e3b4c
		chain.doFilter(request, response);
	}

	@Override
	public void destroy() {
		System.out.println("destroy");
		//服务器关闭时调用
	}
}

配置web.xml

映射类
<Filter> 中 : filter-name 是唯一标识 <filter-class>为实现类
<filter-mapping> 通过 filter-name映射

映射资源 
<servlet-name> : 直接关联servlet唯一标识
<url-pattern> : 关联URL资源路径, 支持通配符, [ * ] 只能一边出现 需通配字符

其中测试说明不同映射方式重合时, 重合servlet会被重复过滤多次
	<filter-mapping>
		<filter-name>OneFilter</filter-name>
		<url-pattern>/*</url-pattern>
		<url-pattern>/servlet/OneServlet</url-pattern>
		<servlet-name>OneServlet</servlet-name>
	</filter-mapping>

访问:  http://127.0.0.1:8080/Filter/servlet/OneServlet 过滤2次

Dispatcher 拦截类型
该项参数很少设置, 默认情况下, 过滤器只通过URL 和 servlet标识拦截, 即缺省值 <dispatcher>REQUEST</dispatcher>

<dispatcher>FORWARD</dispatcher> : 对转发拦截
<dispatcher>INCLUDE</dispatcher>   : 对包含式转发拦截

<dispatcher>ERROR</dispatcher> : 错误页面 404 等进行拦截

当填写该参数时, 缺省方式要生效的话得一起加上


过滤器链 javax.servlet.FilterChain

多个过滤器时, mapping中排前面的先处理, 返回拦截时后调用
















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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值