过滤器

过滤器是在运行过程中改变进入资源的请求和资源返回的响应。它是一种代码重用的技术。过滤器通常是修改或调整资源的请求和响应。过滤器有以下几种功能

1、执行请求之前访问资源

2、执行请求之前处理资源的请求

3、更改请求对象的header和更改响应对象的header

4、拦截资源调用后的调用

5、作用在 Servlet,一组 Servlet,或静态内容上的零个,一个或多个拦截器按指定的顺序执行。

使用

实现javax.servlet.Filter并提供一个公共的空参构造来创建过滤器。filter再部署描述符中通过<filter>元素声明,条件通过<filter-mapping>来配置。

web.xml声明

<filter>
		<filter-name>filter</filter-name>
		<filter-class>web4.filter</filter-class>
	</filter>
	
	<filter>
		<filter-name>filter2</filter-name>
		<filter-class>web4.filter2</filter-class>
	</filter>
	
		<filter-mapping>
		<filter-name>filter2</filter-name>
		<servlet-name>filters</servlet-name>
	</filter-mapping>
	
	<filter-mapping>
		<filter-name>filter</filter-name>
		<servlet-name>filters</servlet-name>
	</filter-mapping>

filter过滤器

public class filter implements Filter {

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub
		System.out.println("init------filter");
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		// TODO Auto-generated method stub
		System.out.println("doFilter------filter");
		//必须添加这句,不然没有办法去调用下一个过滤器,知道匹配完所有过滤器之后,最后一个将去调用web资源,如servlte
		chain.doFilter(request, response);    
	}

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		System.out.println("destroy------filter");
	}

}

filter2过滤器
public class filter2 implements Filter {

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub
		System.out.println("init------filter2");
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		// TODO Auto-generated method stub
		System.out.println("doFilter------filter2");
		chain.doFilter(request, response); 
	}

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		System.out.println("destroy------filter2");
	}

}
filters

@WebServlet(name="filters",urlPatterns="/filter1")
public class filters extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println("doGet------doGet");
	}
}

url匹配规则符合 12.2 节“映射规则”,当过滤器中匹配到合适的servltename,按照过滤链中的顺序(<filter-mapping>从上到下的顺序)逐一匹配,知道最后一个过滤器 匹配成功后,调用web资源(servlte或者静态资源),<url-pattern>匹配也是这样子的。

过滤器和 RequestDispatcher

使用<dispatcher>来过滤异步请求等的url触发条件

 默认可以由一个带有 REQUEST 值的<dispatcher>元素,或者没有任何<dispatcher>元素来表示。

要在分派forward()方法下触发过滤器<dispatcher>的值就可以是FORWARD

要在分派include()放下触发过滤器,<dispatcher>的值就可以是INCLUDE

要触发错误处理时候触发过滤器,<dispatcher>的值就可以是ERROR

要触发异步处理的dispatch调用处理请求,<dispatcher>的值就可以是ASYNC

或者是以上多种组合在一起

















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值