java web项目中过滤器的使用(过滤器执行多次)????
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java web项目中过滤器的使用(过滤器执行多次)????相关的知识,希望对你有一定的参考价值。
我在我的java web项目里面写了一个过滤器,用于身份验证,但是就是不起作用,加了过滤器之后连网页都打不开了,我在测试过滤器的时候过滤器还执行了多次:这是过滤器的代码部分:
下面是执行的结果(当我请求login.jsp的时候网页就是一片空白根本打不开,而且会重复的执行过滤器很多次):
下面是过滤器的web.xml文件配置:
项目首页进入的就是login.jsp界面:
大家看看应该是哪里的问题,总之我在我的机器上面测试的时候就是不好用的,网页就是打不开。。。我刚学很多东西还不懂,大家教教应该怎么做??
不是本来就打开login.jsp吗,不用再跳转到login.jsp,不是的时候,再跳转。追问
好像没有执行啊。我写在里面的输出语句没有执行啊。。。是本来打开login的,但是通过tomcat打开项目的时候什么东西都不会显示的
追答一直在跳转,那还来得及显示
本来就打开login.jsp吗,不用再跳转到login.jsp
我刚换成了其他的jsp好像还是进不去啊
参考技术A 这样试试:打印出if里面那些东西 看看是不是相等,如果不等,都是什么东西java web 过滤器跟拦截器的区别和使用
1.1 什么是拦截器:
拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。
在Webwork的中文文档的解释为——拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。同时也是提供了一种可以提取action中可重用的部分的方式。
谈到拦截器,还有一个词大家应该知道——拦截器链(Interceptor Chain,在Struts 2中称为拦截器栈 Interceptor Stack)。拦截器链就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。
1.2. 拦截器的实现原理:
大部分时候,拦截器方法都是通过代理的方式来调用的。Struts 2的拦截器实现相对简单。当请求到达Struts 2的ServletDispatcher时,Struts 2会查找配置文件,并根据其配置实例化相对的拦截器对象,然后串成一个列表(list),最后一个一个地调用列表中的拦截器。
1.3 什么是过滤器
过滤器是一个程序,它先于与之相关的servlet或JSP页面运行在服务器上。过滤器可附加到一个或多个servlet或JSP页面上,并且可以检查进入这些资源的请求信息。在这之后,过滤器可以作如下的选择:
①以常规的方式调用资源(即,调用servlet或JSP页面)。
②利用修改过的请求信息调用资源。
③调用资源,但在发送响应到客户机前对其进行修改。
④阻止该资源调用,代之以转到其他的资源,返回一个特定的状态代码或生成替换输出。
1.4 Servlet过滤器的基本原理
在Servlet作为过滤器使用时,它可以对客户的请求进行处理。处理完成后,它会交给下一个过滤器处理,这样,客户的请求在过滤链里逐个处理,直到请求发送到目标为止。例如,某网站里有提交“修改的注册信息”的网页,当用户填写完修改信息并提交后,服务器在进行处理时需要做两项工作:判断客户端的会话是否有效;对提交的数据进行统一编码。这两项工作可以在由两个过滤器组成的过滤链里进行处理。当过滤器处理成功后,把提交的数据发送到最终目标;如果过滤器处理不成功,将把视图派发到指定的错误页面。
2、拦截器与过滤器的区别 :
1. 拦截器是基于java的反射机制的,而过滤器是基于函数回调。
2. 拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
3. 拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
4. 拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
5. 在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次
以上是关于java web项目中过滤器的使用(过滤器执行多次)????的主要内容,如果未能解决你的问题,请参考以下文章