过滤器、监听器、拦截器的区别
2013-10-30 08:49
447 查看
1.过滤器
Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是过滤字符编码、做一些业务逻辑判断等。其工作原理是,只要你在web.xml文件配置好要拦截的客户端请求,它都会帮你拦截到请求,此时你就可以对请求或响应(Request、Response)统一设置编码,简化操作;同时还可进行逻辑判断,如用户是否已经登陆、有没有权限访问该页面等等工作。它是随你的web应用启动而启动的,只初始化一次,以后就可以拦截相关请求,只有当你的web应用停止或重新部署的时候才销毁,
2.监听器
现在来说说Servlet的监听器Listener,它是实现了javax.servlet.ServletContextListener 接口的服务器端程序,它也是随web应用的启动而启动,只初始化一次,随web应用的停止而销毁。主要作用是: 做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象等等。
3.拦截器
拦截器是在面向切面编程中应用的,就是在你的service或者一个方法前调用一个方法,或者在方法后调用一个方法。是基于JAVA的反射机制。拦截器不是在web.xml,比如struts在struts.xml中配置,
Filter基于回调函数,我们需要实现的filter接口中doFilter方法就是回调函数,而interceptor则基于java本身的反射机制,这是两者最本质的区别。
Filter是依赖于servlet容器的,即只能在servlet容器中执行,很显然没有servlet容器就无法来回调doFilter方法。而interceptor与servlet容器无关。
Filter的过滤范围比Interceptor大,Filter除了过滤请求外通过通配符可以保护页面,图片,文件等等,而Interceptor只能过滤请求。
Filter的过滤例外一般是在加载的时候在init方法声明,而Interceptor可以通过在xml声明是guest请求还是user请求来辨别是否过滤
======================================================================================================
1、拦截器是基于java的反射机制的,而过滤器是基于函数回调。
2、过滤器依赖于servlet容器,而拦截器不依赖于servlet容器。
3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
4、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次
拦截器:就是在你调用一个方法前,或者调用一个方法后,做一些业务逻辑的操作,例如打印字符串。
下面通过实例来看一下过滤器和拦截器的区别:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
使用拦截器进行/admin 目录下jsp页面的过滤:
<package name="newsDemo" extends="struts-default" namespace="/admin">
<interceptors>
<interceptor name="auth" class="com.test.news.util.AccessInterceptor" />
<interceptor-stack name="authStack">
<interceptor-ref name="auth" />
</interceptor-stack>
</interceptors>
<!-- action -->
<action name="newsAdminView!*" class="newsAction" method="{1}">
</interceptor-ref>
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="authStack">
</interceptor-ref>
</action>
</package>
下面是我实现的拦截器:
package com.test.news.util;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.test.news.action.AdminLoginAction;
public class AccessInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = -4291195782860785705L;
public String intercept(ActionInvocation actionInvocation) throws Exception {
ActionContext actionContext = actionInvocation.getInvocationContext();
Map session = actionContext.getSession();
Object action = actionInvocation.getAction();
if (action instanceof AdminLoginAction) {
return actionInvocation.invoke();
}
//check session
if(session.get("user")==null ){
return "logout";
}
return actionInvocation.invoke();//go on
}
}
过滤器:就是在你访问某个JSP、Servlet或者Action之前,过滤掉一些信息。
使用过滤器进行/admin 目录下jsp页面的过滤,首先在web.xml进行过滤
器配置:
<filter>
<filter-name>access filter</filter-name>
<filter-class>
com.test.news.util.AccessFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>access filter</filter-name>
<url-pattern>/admin</url-pattern>
</filter-mapping>
Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是过滤字符编码、做一些业务逻辑判断等。其工作原理是,只要你在web.xml文件配置好要拦截的客户端请求,它都会帮你拦截到请求,此时你就可以对请求或响应(Request、Response)统一设置编码,简化操作;同时还可进行逻辑判断,如用户是否已经登陆、有没有权限访问该页面等等工作。它是随你的web应用启动而启动的,只初始化一次,以后就可以拦截相关请求,只有当你的web应用停止或重新部署的时候才销毁,
2.监听器
现在来说说Servlet的监听器Listener,它是实现了javax.servlet.ServletContextListener 接口的服务器端程序,它也是随web应用的启动而启动,只初始化一次,随web应用的停止而销毁。主要作用是: 做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象等等。
3.拦截器
拦截器是在面向切面编程中应用的,就是在你的service或者一个方法前调用一个方法,或者在方法后调用一个方法。是基于JAVA的反射机制。拦截器不是在web.xml,比如struts在struts.xml中配置,
Filter基于回调函数,我们需要实现的filter接口中doFilter方法就是回调函数,而interceptor则基于java本身的反射机制,这是两者最本质的区别。
Filter是依赖于servlet容器的,即只能在servlet容器中执行,很显然没有servlet容器就无法来回调doFilter方法。而interceptor与servlet容器无关。
Filter的过滤范围比Interceptor大,Filter除了过滤请求外通过通配符可以保护页面,图片,文件等等,而Interceptor只能过滤请求。
Filter的过滤例外一般是在加载的时候在init方法声明,而Interceptor可以通过在xml声明是guest请求还是user请求来辨别是否过滤
======================================================================================================
1、拦截器是基于java的反射机制的,而过滤器是基于函数回调。
2、过滤器依赖于servlet容器,而拦截器不依赖于servlet容器。
3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
4、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次
拦截器:就是在你调用一个方法前,或者调用一个方法后,做一些业务逻辑的操作,例如打印字符串。
下面通过实例来看一下过滤器和拦截器的区别:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
使用拦截器进行/admin 目录下jsp页面的过滤:
<package name="newsDemo" extends="struts-default" namespace="/admin">
<interceptors>
<interceptor name="auth" class="com.test.news.util.AccessInterceptor" />
<interceptor-stack name="authStack">
<interceptor-ref name="auth" />
</interceptor-stack>
</interceptors>
<!-- action -->
<action name="newsAdminView!*" class="newsAction" method="{1}">
</interceptor-ref>
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="authStack">
</interceptor-ref>
</action>
</package>
下面是我实现的拦截器:
package com.test.news.util;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.test.news.action.AdminLoginAction;
public class AccessInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = -4291195782860785705L;
public String intercept(ActionInvocation actionInvocation) throws Exception {
ActionContext actionContext = actionInvocation.getInvocationContext();
Map session = actionContext.getSession();
Object action = actionInvocation.getAction();
if (action instanceof AdminLoginAction) {
return actionInvocation.invoke();
}
//check session
if(session.get("user")==null ){
return "logout";
}
return actionInvocation.invoke();//go on
}
}
过滤器:就是在你访问某个JSP、Servlet或者Action之前,过滤掉一些信息。
使用过滤器进行/admin 目录下jsp页面的过滤,首先在web.xml进行过滤
器配置:
<filter>
<filter-name>access filter</filter-name>
<filter-class>
com.test.news.util.AccessFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>access filter</filter-name>
<url-pattern>/admin</url-pattern>
</filter-mapping>
相关文章推荐
- 过滤器、监听器、拦截器的区别
- 过滤器,监听器,拦截器的区别
- 过滤器、监听器、拦截器的区别
- 过滤器、监听器、拦截器的区别
- Struts2中过滤器,拦截器,监听器他们之间有什么区别
- java中拦截器 过滤器 监听器都有什么区别
- Servlet,过滤器,监听器,拦截器的区别
- 过滤器,监听器,拦截器的区别
- Servlet,过滤器,监听器,拦截器的区别
- Struts2中过滤器,拦截器,监听器他们之间有什么区别?
- Struts2中过滤器,拦截器, 监听器区别
- 过滤器、监听器、拦截器的区别
- Servlet中的过滤器(拦截器)Filter与监听器Listener的作用和区别
- 过滤器,监听器,拦截器的区别
- 过滤器、监听器、拦截器的区别
- servlet过滤器、监听器、struts2拦截器的区别
- Servlet中的过滤器(拦截器)Filter与监听器Listener的作用和区别
- 过滤器、监听器与拦截器区别
- servlet过滤器、监听器、struts2拦截器的区别
- web.xml 中的过滤器(拦截器)Filter与监听器Listener的作用和区别?