java过滤器 Fliter

定义:过滤器是一个服务器端组件,他可以截取用户端请求信息与响应信息,并对信息进行过滤

例:当进入csdn要进行文章编辑时,检测用户是否登录,若未登录,跳转到登录界面。

过滤器操作方法:

init() : 初始化过滤器,创建过滤器实例后调用这个方法,可以读取web.xml过滤器中的参数

doFilter() : 完成过滤操作,过滤器的核心方法,当用户请求访问预过滤出其关联的url
* 时调用这个方法 FilterChain参数可以调用chain.doFilter方法,将请求传给下一个
* 过滤器,或利用转发、重定向将请求转发到其他资源

destroy() : 销毁过滤器 释放资源


工作原理:

   用户请求----->过滤器----->web资源

    web资源----->过滤器----->用户

生命周期:

    实例化----->初始化------>过滤----->销毁

web.xml--->init()---->dofilter()--->destory()

过滤器链:指一个网页需要经过多个过滤器的过滤才能对web资源进行请求 

用户请求--->过滤器1--->过滤器2--->过滤器3---->.......------>web资源

经过多个过滤器的步骤为dofilter1(start)------>dofilter2(start)----->dofilter2(end)----->dofilter1(end) 即多个过滤器嵌套实现功能

例子:

首先先在web.xml中配置过滤器(也可以在代码中直接配置)

<filter>    <!-- 指定一个过滤器 -->
  	<filter-name>JavaFilter</filter-name>     <!-- 给过滤器指定名字 -->
  	<filter-class>com.th.JavaFilter</filter-class>  <!-- 指定过滤器的完整路径名 -->
  </filter>
  <filter-mapping>               <!-- 设置一个Filter所负责拦截的资源 -->
  	<filter-name>JavaFilter</filter-name>
  	<url-pattern>/index.jsp</url-pattern>   <!-- 设置Filter所拦截的请求路径 ,即过滤index.jsp页面的请求-->
  </filter-mapping>
设置一个编码过滤器

//@WebFilter(
//	urlPatterns={"*"},
//    initParams={@WebInitParam(name="encoding",value="utf-8")})
public class JavaFilter implements Filter{
	private String defaultEncoding="utf-8";
	
	/**
	 * 销毁方法。  当web应用移除或服务器停止时才销毁
	 */
	@Override
	public void destroy() {
		
		
	}
	/**
	 * 这个事过滤器的核心方法,完成实际操作,FilterChain方法用于访问Filter中的后续过滤器
	 */
	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		request.setCharacterEncoding(defaultEncoding);
		response.setCharacterEncoding(defaultEncoding);
		chain.doFilter(request, response);
		
	}


	/**
	 * Filter的创建和销毁由web服务器负责,web应用启动时,创建Filter对象,调用init方法,读取web.xml配置
	 * Filter对象只会创建一次,init方法也执行一次,
	 */
	@Override
	public void init(FilterConfig config) throws ServletException {
		String encoding = config.getInitParameter("encoding");  
		if(encoding!=null){
			defaultEncoding=encoding;
		}
		
	}
	
}
https://www.cnblogs.com/coderland/p/5902878.html



原文地址:https://www.cnblogs.com/tonghao/p/8506035.html