struts2拦截器详解,struts2的核心控制器是什么 2、什么是拦截器 3、什么是值栈
struts2拦截器详解,struts2的核心控制器是什么 2、什么是拦截器 3、什么是值栈详细介绍
本文目录一览: Struts2框架里拦截器是主要做什么功能?
Strrurs拦截器是可插拔式的拦截器:如果我们要使用某个拦截器,只需要在配置文件中应用该拦截器即可。
Struts拦截器由struts-default.xml,struts.xml等配置文件中进行管理。
Struts2中已经默认启动了大量通用功能的拦截器(这些拦截器以name-class对的形式配置在struts-default.xml文件中),只要我们配置Action的package继承了struts-default包,这些拦截器就会起作用。
拦截器几乎完成了Sturts2框架70%的工作。
Sturts2几个常用内建拦截器的介绍:
1)conversation:这是一个处理类型转换错误的拦截器,它负责将类型转换错误从ActionContext中取出,并转换成Action的FieldError错误。
2)Exception:这个拦截器负责处理异常,它将异常映射成结果。
3)fileUpload:这个拦截器主要用于文件上传,它负责解析表单中文件域的内容。
4)i18n:这是支持国际化的拦截器,它负责把所选的语言、区域放入用户Session中。
5)params:这是最基本的一个拦截器,它负责解析HTTP请求中的参数,并将参数值设置成Action对应的属性值。
6)scope:这是范围转换拦截器,它可以将Action状态信息保存到HttpSession范围,或者保存到ServletContext范围内。
7)token:这个拦截器主要用于阻止重复提交,它检查传到Action中的token,从而防止多次提交。
只要我们定义的包继承了struts-default包,就可以直接使用这些拦截器。
struts2拦截器作用
查看用户是否为合法登陆,及用户是否拥有权限,等情况下可以自定义拦截器。当然也可以自定义过滤器解决上述问题
自己看看吧:http://deepin.javaeye.com/blog/279042
拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。
拦截是AOP的一种实现策略。
拦截器是动态拦截Action调用的对象。
它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,
也可以在一个action执行前阻止其执行。
同时也是提供了一种可以提取action中可重用的部分的方式。
拦截器栈(Interceptor Stack)类似于过滤器链。
拦截器栈就是将拦截器按一定的顺序联结成一条链。
在访问被拦截的方法或字段时,拦截器栈的拦截器就会按其之前定义的顺序被调用。
也可以叫做拦截器链(Interceptor Stack),拦截器栈一词更明确的表名了连接器链的实现方式。
Struts2的拦截器和Filter类似。
在执行Action的execute方法之前,Struts2会首先执行在struts.xml中引用的拦截器,
在执行完所有引用的拦截器的intercept方法后,
会执行Action的execute方法。
当请求到达Struts 2的ServletDispatcher时,Struts 2会查找配置文件,
并根据其配置实例化相对的拦截器对象,然后串成一个列表(list)
最后一个一个地调用列表中的拦截器。
struts2 拦截器和过滤器的作用是什么?
struts2拦截器,在AOP中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。过滤器是输送介质管道上不可缺少的一种装置,通常安装在减压阀、泄压阀、定水位阀 ,方工过滤器其它设备的进口端设备。
介绍:
java里的拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行,同时也提供了一种可以提取action中可重用部分的方式。在AOP中拦截器用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。
原理:
大部分时候,拦截器方法都是通过代理的方式来调用的。Struts 2的拦截器实现相对简单。当请求到达Struts 2的ServletDispatcher时,Struts 2会查找配置文件,并根据其配置实例化相对的拦截器对象,然后串成一个列表(list),最后一个一个地调用列表中的拦截器。Struts2拦截器是可插拔的,拦截器是AOP的一种实现。Struts2拦截器栈就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,Struts2拦截器链中的拦截器就会按其之前定义的顺序被调用。
拓展:
过滤器由壳体、多元滤芯、反冲洗机构、和差压控制器等部分组成。壳体内 的横隔板将其内腔分为上、下两腔,上腔内配有多个过滤芯,这样充分利用了过滤空间,显着缩小了过滤器的体积,下腔内安装有反冲 洗吸盘。工作时,浊液经入口进入过滤器下腔,又经隔板孔进入滤芯的内腔。大于过滤芯缝隙的杂质被截留,净液穿过缝隙到达上腔, 最后从出口送出。
struts2的核心控制器是什么 2、什么是拦截器 3、什么是值栈
1.FilterDiapatcher
2.在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在 之前或之后加入某些操作。拦截是AOP的一种实现策略。
3.值栈(Value Stack)是Struts 2框架的核心概念。所有核心组件都以某种方式与之进行交互,它提供对上下文信息和执行环境中元素的访问机制
FilterDispatcher也是Struts2的核心技术。
FilterDispatcher核心控制器执行以下操作:
(1)读取静态数据信息
(2)决定需要转发或者导航的Action配置
(3)创建Action的Context
(4)创建Action代理
(5)内存清理和性能优化
拦截器:Interceptor
拦截器本身是一个普通的Java对象,它能动态拦截Action调用,在Action执行前后执行拦截器本身提供的各种个样的Web项目需求。
也可以阻止Action的执行,同时也可以提取Action中可以复用的部分。
(1)在Action调用之前提供系统处理流程逻辑控制
(2)和Action交互时,提供Ation执行时的一些初始信息
(3)在Action结束后,一些事后的处理流程逻辑
(4)修改Action中返回的Result信息
(5)捕获异常
值栈是用ognl表达式存值的最初地方,即一个存值的栈
struts2为什么用拦截器?有什么好处?起什么作用?
1、拦截器是struts2的核心,拦截器可以让你在Action和result被执行之前或之后进行一些处理。
2、好处:拦截器也可以让你将通用的代码模块化并作为可重用的类。Struts2中的很多特性都是由拦截器来完成的。
3、作用:可以构成拦截器栈,完成特定功能。比如日志记录、登录判断、权限检查等作用。
拦截器可以说相当于是个过滤器:就是把 不想要的或不想显示的内容给过滤掉。拦截器可以抽象出一部分代码可以用来完善原来的action。同时可以减轻代码冗余,提高重用率。
比如在登入一个页面时,如果要求用户密码、权限等的验证,就可以用自定义的拦截器进行密码验证和权限限制。对符合的登入者才跳转到正确页面。这样如果有新增权限的话,不用在action里修改任何代码,直接在interceptor里修改就行了。
(个人观点,请选择看待!)
Struts2中过滤器和拦截器的区别
1、拦截器是基于java反射机制的,而过滤器是基于函数回调的。
2、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器。
3、拦截器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用。
4、拦截器可以访问Action上下文、值栈里的对象,而过滤器不能。
5、在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次。
过滤器其主要特点在于:取你需要的东西,忽视那些不需要的东西!在程序中,你希望选择中篇文章中的所有数字,你就可以针对性的挑选数字!
拦截器其主要特点在于:针对你不要的东西进行拦截,比如说,在一个BBS里面你希望人家不要留“小乌鸦”的这个词,那你就可能采用拦截器!
监听器!
是一个事件处理过程,这个过程的取舍,可以让你的代码成为过滤器,还是成为拦截器~~~
比如,你想监听一段用户的数据中有没有1有的话就打印111!这就需要程序都监听用户输入的东西了!
if(***..equls('1')){ //打印111 }像这个就是去过滤其它的东西。。。。。
当然如果你把它当作一个拦截器看也可以,就是只要出现了1,你里面执行的正是反的东西,比如你输的数据中不能包含1。。。等等。
过滤器和拦截器,其实两者没有什么区别,最大的一点就是,过滤!是一个正面的东西,而拦截是一个反面的东西!过滤留下你想要的东西,拦截,针对你不需要的东西进行...
struts2的核心控制器、拦截器、值栈分别是什么?
FilterDispatcher也是Struts2的核心技术。\x0d\x0a\x0d\x0aFilterDispatcher核心控制器执行以下操作:\x0d\x0a(1)读取静态数据信息\x0d\x0a(2)决定需要转发或者导航的Action配置\x0d\x0a(3)创建Action的Context\x0d\x0a(4)创建Action代理\x0d\x0a(5)内存清理和性能优化\x0d\x0a拦截器:Interceptor\x0d\x0a 拦截器本身是一个普通的Java对象,它能动态拦截Action调用,在Action执行前后执行拦截器本身提供的各种个样的Web项目需求。\x0d\x0a 也可以阻止Action的执行,同时也可以提取Action中可以复用的部分。\x0d\x0a\x0d\x0a(1)在Action调用之前提供系统处理流程逻辑控制\x0d\x0a(2)和Action交互时,提供Ation执行时的一些初始信息\x0d\x0a(3)在Action结束后,一些事后的处理流程逻辑\x0d\x0a(4)修改Action中返回的Result信息\x0d\x0a(5)捕获异常\x0d\x0a值栈是用ognl表达式存值的最初地方,即一个存值的栈
struts2拦截器的作用是什么(它拦截什么)??过滤器的作用是什么呢(过滤什么)??
拦截器是对调用的Action起作用,它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。同时也是提供了一种可以提取action中可重用的部分的方式。
过滤器是对整个的请求过程起作用!换句话说就是拦截器没有过滤器的范围广
拦截器是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法
比如动态代理就是拦截器的简单实现,
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
{
Object result = null;
System.out.println("before invoke method :" + method.getName());
result = method.invoke(this.targetObj, args);
System.out.println("after invoke method : " + method.getName());
return result;
}
在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,
甚至在你抛出异常的时候做业务逻辑的操作。
过滤器是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者 struts的action前统一设置字符集,或者去除掉一些非法字符(聊天室经常用到的,一些骂人的话).
\比如判断用户提交的数据是否存在非法字符等等
拦截器只能拦截Action,说明白点拦截器其实是Action的功能块,只在Action前后执行,初学者肯定会有疑问,把功能全都写在Action中就行了呀,为什么要把功能分出来,其实这个struts2的一个强大之处,你想想,假如这个功能块很多Action都要用,难道你的这些Action中都要写呀,就算复制粘贴也不方便呀,你把它做成功能块,哪个Action需要就在哪个Action中配置就好了,更好的方法是,创建一个公共的Action,把通用的东西全配置到这里面,其他Action引用(继承)就可以了
过滤器是拦截用户请求的,范围明显比拦截器大的多,你上网时肯定碰到过这中效果,你想下载个东西,点击下载先跳出登陆页面,这就是拦截器搞的鬼,没有登录前很多页面或Action都被他拦截了
struts2过滤器和拦截器的区别
过滤器,是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者 struts的action前统一设置字符集,或者去除掉一些非法字符.
拦截器,是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作。
拦截器与过滤器的区别:
拦截器是基于java的反射机制的,而过滤器是基于函数回调。
拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次
执行顺序:过滤前 - 拦截前 - Action处理 - 拦截后 - 过滤后。个人认为过滤是一个横向的过程,首先把客户端提交的内容进行过滤(例如未登录用户不能访问内部页面的处理);过滤通过后,拦截器将检查用户提交数据的验证,做一些前期的数据处理,接着把处理后的数据发给对应的Action;Action处理完成返回后,拦截器还可以做其他过程(还没想到要做啥),再向上返回到过滤器的后续操作。