过滤器Filter

过滤器Filter

基本概述

    Java中的Filter 并不是一个标准的Servlet ,它不能处理用户请求,也不能对客户端生成响应。 主要用于对HttpServletRequest 进行预处理,也可以对HttpServletResponse 进行后处理,是个典型的处理链。

参考文档:http://tomcat.apache.org/tomcat-5.5-doc/servletapi/index.html

参考博客:http://blog.csdn.net/sd0902/article/details/8395641

 

开发过滤器的步骤

1、创建 

    继承HttpServlet 同时实现Filter接口

默认filter不生效,需要配置.

<!-- 配置的一个filter -->  
  <filter>
  	<filter-name>MyFilter</filter-name>
  	<filter-class>com.pc.filter.MyFilter</filter-class>
  </filter>
<filter-mapping>
	<filter-name>MyFilter</filter-name>
	<url-pattern>/*</url-pattern>  /*表示对该WEB的所有网页都过滤 
</filter-mapping>

2、在filter的方法中添加业务逻辑

package com.pc.filter;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.pc.domain.User;
public class MyFilter1 extends HttpServlet implements Filter {
	public void doGet(HttpServletRequest request, HttpServletResponse response)hrows ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doGet(request, response);
	}
	public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {
		System.out.print("myfilter1...");
		//获取session
HttpServletRequest httpServletRequest=(HttpServletRequest)request;
		//看看请求的资源是什么
		String uri=httpServletRequest.getRequestURI();
	if(uri.startsWith("/UsersManager3/imgs")||uri.startsWith("/UsersManager3/Login")){
			// 该过滤器放行,进入下一个过滤器
			chain.doFilter(request, response);
		}else{
			HttpSession session=httpServletRequest.getSession();
			User user=(User) session.getAttribute("loginuser");
			if(user!=null){
				//该用户合法,放行
				chain.doFilter(request, response);	
			}else{
				request.setAttribute("err", "请好好登陆");
				httpServletRequest.getRequestDispatcher("/LoginServlet")
				.forward(request, response);
			}
		}
	}
	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
	}
}

过滤器链

    过滤器链的概念很容易理解,就是在配置过滤器时,多个过滤器加载进内存中时,当使用过滤器之后调用chain.doFilter(request, response);WEB服务器会按配置顺序决定下一个调用的过滤器是什么。这就可以视为过滤器链。

 

 

 

----------参考《韩顺平.细说Servlet》

文章导航