Web开发---过滤器(Filter)

开发人员通过对Filter配置,可以管理所有的web资源,对jsp,servlet,静态图片或者静态html进行拦截。还可以在返回之前进行拦截处理。

一个java类实现了Filter接口,就可以成为一个Filter(过滤器)。想要调用它,需要在web.xml中配置。下面分两部分来介绍:

1.web.xml中配置元素

想要在web.xml请求之后正确的进行拦截操作(调用过滤器),需要配置两部分参数:

//第一先配置调用的哪个filter类,如下

<filter>

<filter-name>encodingFilter</filter-name>

<filter-class>com.sinitek.managerframework.base.filter.WebFilterTemplate</filter-class>

</filter>

//第二,配置对哪些网页请求进行过滤

             <filter-mapping> 

<param-name>encodingFilter</param-name>

<url-pattern>*.action</url-pattern>

<dispatcher>REQUEST</dispatcher>

     </filter-mapping>

这里需要注意的是两个红色部分的名称必须相等,它才能正确去调用。/*表示对所有的请求进行拦截,还可以指定某个jsp等。这里有一 个dispatcher标签。如果不写,默认为REQUEST, 指定过滤器所拦截的资源被 Servlet 容器调用的方式。

还有其他几个:

REQUEST:

当用户直接访问页面时,Web容器将会调用过滤器。如果目标资源是通过RequestDispatcher的include()或forward()方法访问或ERROR情况时,那么该过滤器就不会被调用。


INCLUDE:

如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用。


FORWARD:

如果目标资源是通过RequestDispatcher的forward()方法访问时,那么该过滤器将被调用,除此之外,该过滤器不会被调用。


ERROR:

如若在A.jsp页面page指令中指定了error属性=examError.jsp,那么A.jsp中若出现了异常,会跳转到examError.jsp中处理。而在跳转到examError.jsp时,若过滤器配置了

ERROR的dispather那么则会拦截,否则不会拦截。


2.Filter类

package com.test.filter;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class Demo1Filter implements Filter {
	private FilterConfig filterConfig;

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		System.out.println("Demo1过滤前");
		System.out.println(filterConfig.getInitParameter("param1"));
		chain.doFilter(request, response);//放行。让其走到下个链或目标资源中
		System.out.println("Demo1过滤后");
	}

	public void init(FilterConfig filterConfig) throws ServletException {
		System.out.println("初始化了");
		this.filterConfig = filterConfig;
	}

	public void destroy() {
		System.out.println("销毁了");
	}
}
如图就是一个Filter类。有三个方法:

init方法在加载启动web容器时就会加载

doFilter方法就是调用拦截器方法。通过控制对chain.doFilter的方法的调用,来决定是否需要访问目标资源。

destroy,当应用服务被停止或重新装载了,则会执行Filter的destroy方法,Filter对象销毁。

init方法与destroy方法只会直接一次。

如果web.xml中配置多个filter,它会依次调用每个filter的放行方法以及放行前方法,然后在逆着执行放行后的方法。最终返回。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值