文档章节

43 过滤器 filter

恋佳
 恋佳
发布于 2015/07/22 14:05
字数 483
阅读 2
收藏 0
1Servlet过滤器本身并不生成请求和响应对象,它只提供过滤作用。
2Servlet过滤器能够在Servlet被调用之前检查Request对象,修改Request Header和Request内容;

3在Servlet被调用之后检查Response对象,修改Response Header和Response内容。Servlet过滤器负责过滤的Web组件可以是Servlet、JSP或HTML文件。

4 filter 的执行流程


5 Filter的定义  需要实现Filter接口,

init(FilterConfig):这是Servlet过滤器的初始化方法,Servlet容器创建Servlet过滤器实例后将调用这个方法。在这个方法中可以读取web.xml 文件中Servlet过滤器的初始化参数
•doFilter(ServletRequest, ServletResponse,FilterChain):
这个方法完成实际的过滤操作。当客户请求访问与过滤器关联的URL时,Servlet容器将先调用过滤器的doFilter方法。FilterChain参数用于访问后续过滤器
•destroy():Servlet容器在销毁过滤器实例前调用该方法,在这个方法中可以释放Servlet

public class LoginFilter implements Filter
{

	@Override
	public void destroy()
	{
		// TODO Auto-generated method stub

	}

	@Override
	public void doFilter(ServletRequest arg0, ServletResponse arg1,
			FilterChain arg2) throws IOException, ServletException
	{
		HttpServletRequest request=(HttpServletRequest) arg0;
		
		HttpSession session=request.getSession();
		
		User user=(User)session.getAttribute("user");
		
		if (request.getRequestURI().endsWith("login.jsp")||request.getRequestURI().endsWith("Check"))
		{

			arg2.doFilter(arg0,arg1);
			System.out.println("if 1");
			return;
		}
		
		else if (null==user) {
			request.getRequestDispatcher("filter/login.jsp").forward(arg0,arg1);
			System.out.println("if 2");
			return;

		}
		
		else 
		
		{
			arg2.doFilter(arg0,arg1);
			System.out.println("if 3");
		}
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException
	{
		// TODO Auto-generated method stub

	}

}


6 配置filter 在web.xml中配置

<filter>
  <filter-name>LoginFilter</filter-name>
  <filter-class>com.songxu.filter.LoginFilter</filter-class>
  </filter>
  
  
  <filter-mapping>
  <filter-name>LoginFilter</filter-name>
  <url-pattern>/*</url-pattern>
   </filter-mapping>


 

7 串联的Filter的执行流程



客户端提交请求后,执行F1中Code1 遇到doFilter 转向F2 执行,遇到dofiter转向后续,直到servlet返回,并依次进入F2,F1分别执行dofilter之后的代码片段 code2


测试代码


public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException
	{
		System.out.println("F1 before");
		chain.doFilter(request,response);
		System.out.println("F1 after");

	}

@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException
	{
		System.out.println("F2 before");
		chain.doFilter(request,response);
		System.out.println("F2 after");
		
	}








© 著作权归作者所有

共有 人打赏支持
恋佳
粉丝 0
博文 76
码字总数 62107
作品 0
大连
私信 提问
启动日志frameworkInfo.log的思考

2016-12-07 10:15:43.272 [localhost-startStop-1] INFO o.s.web.context.ContextLoader - Root WebApplicationContext: initialization started 2016-12-07 10:15:43.374 [localhost-startS......

anlve
2016/12/07
54
0
Servlet过滤器,Servlet过滤器创建和配置

第一:Servlet的过滤器的创建和配置,创建一个过滤器对象需要实现javax.servlet.Filter接口,同时实现Filter的3个方法。 第一方法是过滤器中的init()方法用于对过滤器的初始值进行处理,第二...

别叫小伙
2016/10/13
0
0
session过期跳转登录页面

项目需要做一个自动登出的功能,查询了网上的资料,一开始准备用session监听做,按照下面方式配置监听器 1.在项目的web.xml文件中添加如下代码: ? 2.编写java类。 ? 配置完成后等session失效...

mrliuze
2014/12/17
0
0
Filter(过滤器)

Filter简介: 可以使用户改变一个Request和修改一个Response,Filter不是Servlet,他不能产生一个Response。但他能够在Request到达Servlet之前预处理Request,也可以在离开Request时处理Res...

晨曦之光
2012/05/16
807
2
第七章 过滤器基础 Filter

简介:SUN从Servlet2.3开始添加一项激动人心的功能,就是过滤器(Filter)。WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行...

陈嘻嘻哈哈
2015/11/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java并发编程

并发与并行 并发指的是同时应对多个事件的能力,并行指的是同时做多件事的能力。 位级并行:32位计算机能够同时处理32位数运算,而8位计算机却要进行多次运算。 指令级并行:表面上看cpu是串...

春哥大魔王的博客
30分钟前
2
0
js数组遍历和对象遍历

数组遍历 for for(var i=0,len=arr.length;i<len;i++){console.log(arr[i]);} forEach - ES5语法,性能比for弱,不能使用break终止循环,不能使用return arr.forEach(function(item,inde......

祖达
49分钟前
3
0
Spring "reg:zookeeper" 的前缀 "reg" 未绑定等类似问题解决方案。

今天同事遇到一个Spring启动加载配置文件时,不识别reg:zookeeper标签的问题。 我查看配置,发现是Spring配置文件的头部没有引入reg标签的命名空间,具体如下图: 所以,以后遇到类似的标签未...

花漾年华
今天
2
0
阿里云领衔云市场

近期,2018年Q4及全年的全球云基础设施服务市场数据新鲜出炉,发布方是美国市场研究机构Synergy Research Group。这个机构是专做电信网络市场情报的公司,成立于1999年,每年都会公布各大公有...

linuxCool
今天
2
0
C++友元函数和友元类(C++ friend)详解

私有成员只能在类的成员函数内部访问,如果想在别处访问对象的私有成员,只能通过类提供的接口(成员函数)间接地进行。这固然能够带来数据隐藏的好处,利于将来程序的扩充,但也会增加程序书...

shzwork
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部