一、Struts拦截器
拦截器(Interceptor):拦截器是struts2的核心,struts2的众多功能都是通过拦截器来实现的。
1.拦截器的配置
编写实现Interceptor接口的类
在struts.xml文件中定义拦截器
在action中使用拦截器
一旦定义了自己的拦截器,将其配置到action上后,我们需要在action的最后加上默认的拦截器栈:defaultStack
2.定义拦截的三种方法
(1)实现Interceptor接口类
public class TheInterceptor1 implements Interceptor{ public void destroy(){} public void init(){} public String intercept(ActionInvocation invocation) throws Exception{ String result = invocation.invoke();//如果还有拦截器,将传递给下一拦截器,否则执行Action return result; } }
struts.xml文件中定义拦截器
<struts> <package name="struts" extends="struts-default"> <interceptors> <interceptor name="theInterceptor1" class="com.interceptor.TheInterceor1"></interceptor> </interceptors> <action name="action1" extends="default-struts"> <interceptor-ref name="theInterceptor1"> </interceptor-ref> </action> </package> </struts>
拦截器中传递参数
public class TheInterceptor1 implements Interceptor{ private String test;//拦截器中传递参数,在tomcat启动时,便已执行setTest(),init()方法,setTest()方法在init()方法之前执行 public String getTest(){ return test; } public void setTest(String test){ this.test = test; } public void destroy(){} public void init(){} public String intercept(ActionInvocation invocation) throws Exception{ String result = invocation.invoke();//如果还有拦截器,将传递给下一拦截器,否则执行Action return result; } }
struts.xml文件中定义拦截器
<struts> <package name="struts" extends="struts-default"> <interceptors> <interceptor name="theInterceptor1" class="com.interceptor.TheInterceor1"> <param name="test">aaaa</param> </interceptor> </interceptors> <action name="action1" extends="default-struts"> <interceptor-ref name="theInterceptor1"> </interceptor-ref> </action> </package> </struts>
(2)继承AbstractInterceptor抽象类(该类实现了interceptor接口,并且对init和destroy方法进行了空实现),然后实现其抽象方法intercept即可。
(3)方法过滤拦截器(可以对指定方法进行拦截的拦截器,继承了MethodFilterInterceptor类,实现doIntercept(ActionInvocation invocation)抽象方法)
[MethodFilterInterceptor类重写了AbstractInterceptor类的intercept(ActionInvocation invocation)方法,但提供了一个doIntercept(ActionInvocation invocation)抽象方法。从这种设计方式可以看出,MethodFilterInterceptor类的intercept已经实现了对Action的拦截行为(只是实现了方法过滤的逻辑),但真正的拦截逻辑还需要开发者提供,也就是通过回调doIntercept方法实现。可见,如果用户需要实现自己的拦截逻辑,则应该重写doIntercept(ActionInvocation invocation)方法]
在方法过滤拦截器中,如果没有制定includeMethods参数,也没有指定execludeMethods参数,那么所有的方法都会被拦截,也就是所有的方法都被认为是includeMethods的;如果仅仅指定了includeMethods,那么只会拦截includeMethods中的方法,没有包含在includeMethods中的方法就不会被拦截。
[如果对于相同的方法指定了execludeMethods参数,includeMethods参数,includeMethods参数优先级高,也就是说依旧会被拦截]
注:execludeMethods、includeMethods参数需要在struts.xml的interceptor标签中配置params标签。
相关推荐
本文主要介绍了一种针对CF-19笔记本电脑的系统恢复方法,强调了使用随机OEM版光盘进行恢复安装的重要性,因为这样的光盘包含了专为此型号笔记本定制的驱动程序。在进行系统恢复前,需要备份重要数据,并准备好必要的...
2023-04-06-项目笔记-第三百二十...写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的作用域 4.4.2.1全局变量的作用域_1 4.4.2.320局变量的作用域_320- 2024-11-19
笔记 2023-11-17 19-09-00.txt
《涂抹Oracle--三思笔记》是一份专注于Oracle数据库技术的学习资料,主要涵盖了Oracle数据库系统的基础知识、高级特性和常见问题的解决策略。这份文档可能是由一位经验丰富的IT专家撰写,旨在帮助读者深入理解和掌握...
2023-04-06-项目笔记-第二十一阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的作用...
网络管理员笔记-软考笔记(超级详细!!!超级认真)软考学习笔记(带资料!!)a网络管理员考试介绍。都是自己做的!!!制作不易!点个赞哈!!都是根据视频一步一步做出来的,带真题的笔记,考前复习一遍记过!...
2023-04-06-项目笔记-第七十七阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的作用...
2023-04-06-项目笔记-第四十八阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的作用...
这些笔记和SQL脚本为学习Oracle 11g的各个方面提供了丰富的实践材料,对于理解数据库管理、优化性能和确保数据安全都具有重要意义。通过深入学习和实践这些内容,可以提升对Oracle数据库系统的理解和操作技能。
2023-04-06-项目笔记-第二百三十阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的...
2023-04-06-项目笔记-第一百零八阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的...
2023-04-06-项目笔记-第二百九十一阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的...
2023-04-06-项目笔记-第二百六十一阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的...