struts2拦截器interceptor的三种配置方法
1、struts2拦截器interceptor的三种配置方法
方法1. 普通配置法
<struts>
<package name="struts2" extends="struts-default">
<interceptors>
<interceptor name="myInterceptor" class="edu.hust.interceptor.MyInterceptor"></interceptor>
</interceptors> <action name="register" class="edu.hust.action.RegisterAction">
<result name="input">/register.jsp</result>
<result>/result.jsp</result> <!-- 在自定义interceptor并将其ref时, 系统会覆盖掉默认的interceptor-stack(defaultStack), 为了保证系统默认的defaultStack不受印象,
我们需要显式的将其引入 -->
<!-- 注意两个interceptor-ref的顺序, 顺序不同, 执行效果也不同: 先配置的先执行/后配置的先退出(先进后出) -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="myInterceptor"></interceptor-ref>
</action>
</package>
</struts>
方法2. 配置拦截器栈(即将多个interceptor串联的一种元素)。然后在<action>中引入该拦截器栈就可以了。
<struts>
<package name="struts2" extends="struts-default"> <interceptors>
<interceptor name="myInterceptor" class="edu.hust.interceptor.MyInterceptor"></interceptor> <interceptor-stack name="myInterceptorStack">
<interceptor-ref name="myInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors> <action name="register" class="edu.hust.action.RegisterAction">
<result name="input">/register.jsp</result>
<result>/result.jsp</result> <interceptor-ref name="myInterceptorStack"></interceptor-ref>
</action>
</package>
</struts>
方法3. 修改默认拦截器,将自定义的拦截器栈定义为struts2的默认拦截器。
<struts>
<package name="struts2" extends="struts-default"> <interceptors>
<interceptor name="myInterceptor" class="edu.hust.interceptor.MyInterceptor"></interceptor>
<interceptor-stack name="myInterceptorStack">
<interceptor-ref name="myInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors> <!-- 此默认interceptor是针对所有action的 -->
<!-- 如果某个action中引入了interceptor, 则在这个action中此默认interceptor就会失效 -->
<default-interceptor-ref name="myInterceptorStack"></default-interceptor-ref> <action name="register" class="edu.hust.action.RegisterAction">
<result name="input">/register.jsp</result>
<result>/result.jsp</result>
</action> </package>
</struts>
2. Interceptor的角色对象
(1)拦截目标对象(被代理对象),这里目标对象就是action;
(2)拦截器(一个类,动态的将某些方法插入到目标对象的某方法的before、after);
(3)对目标对象生成的(动态)代理对象(代理对象内部方法综合了目标对象方法+拦截器方法)。程序最终执行的是目标对象的代理,而这个代理已经插入了interceptor。
拦截器作用:拦截action。interceptor相当于一个入口和出口,通过interceptor进入action,执行完action的代码再通过interceptor出去。
下面针对struts2 -- interceptor(Interceptor怎么写) 这篇文章的前两个例子进行配置,如下
<struts>
<package name="struts2" extends="struts-default"> <interceptors>
<interceptor name="myInterceptor" class="edu.hust.interceptor.MyInterceptor"></interceptor>
<interceptor name="myInterceptor2" class="edu.hust.interceptor.MyInterceptor2"></interceptor>
<interceptor-stack name="myInterceptorStack">
<interceptor-ref name="myInterceptor"></interceptor-ref>
<interceptor-ref name="myInterceptor2"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors> <default-interceptor-ref name="myInterceptorStack"></default-interceptor-ref> <action name="register" class="edu.hust.action.RegisterAction">
<result name="input">/register.jsp</result>
<result>/result.jsp</result>
</action> </package>
</struts>
Console会得到以下打印输出
intercept start
intercept2 start
2008-9-19 19:42:06 com.opensymphony.xwork2.validator.ActionValidatorManagerFactory <clinit>
信息: Detected AnnotationActionValidatorManager, initializing it...
intercept2 finish
intercept finish
拦截器
struts2拦截器interceptor的三种配置方法的更多相关文章
- struts2拦截器interceptor的配置方法及使用
转: struts2拦截器interceptor的配置方法及使用 (2015-11-09 10:22:28) 转载▼ 标签: it 365 分类: Struts2 NormalText Code ...
- Struts2拦截器Interceptor执行顺序理解
invocation.invoke()方法是拦截器框架的实现核心,通过确定invocation.invoke()方法执行位置,来实现Action执行前后处理操作,在invocation.invoke( ...
- struts2 拦截器 interceptor
struts2 拦截器详解:http://struts2.group.iteye.com/group/wiki/1397-deep-into-struts2-interceptors
- IntelliJ IDEA 2017版 spring-boot 拦截器的操作三种方式
一.注解方式 @WebServlet(urlPatterns = "/myServlet") public class MyServlet extends HttpServlet ...
- CentOS中JDK的三种配置方法
第一种方法(相对稳妥): 使用yum直接安装,在root用户下执行 "yum install java-openjdk-*" 第二种方法(最为稳妥): 前往'https://www ...
- struts2简单入门-Action的三种配置方式
普通的配置方式 优点:可读性高 缺点:重复的配置太多. 使用情况 一个actian只有一个方法,只需要处理一种请求. 代码演示 <action name="voteResult&quo ...
- Struts2 Action扩展名的三种修改方法
最近在做项目开发过程中犯了一个很低级的错误,在这里列举出来,供大家参考借鉴:我希望通过Url请求一个Action,最终通过服务器的处理能得到一个Json串,所以我在Url中体现这一特点,将action ...
- Debug模式的三种配置方法
使用`app.config.from_object`的方式加载配置文件: 1. 导入`import config`.2. 使用`app.config.from_object(config)`. ### ...
- web虚拟主机的三种配置方法
随机推荐
- listview的头布局把我的ACTION_DOWN事件给吃了.....
因为头布局的viewpager自己处理点击事件 public boolean dispatchTouchEvent(MotionEvent ev) { switch (ev.getAction()) ...
- LeetCode:Construct Binary Tree from Inorder and Postorder Traversal,Construct Binary Tree from Preorder and Inorder Traversal
LeetCode:Construct Binary Tree from Inorder and Postorder Traversal Given inorder and postorder trav ...
- Opencv step by step - 绘图
有时候我们需要在图像上写一些字或者画一些简单的几何图案. 祭上代码: #include <cv.h> #include <highgui.h> int main(int arg ...
- Chrome扩展开发(Gmail附件管理助手)系列之〇——概述
目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...
- js实现黑客帝国二进制雨
置顶文章:<纯CSS打造银色MacBook Air(完整版)> 上一篇:<对于RegExp反向引用的一点理解> 作者主页:myvin 博主QQ:851399101(点击QQ和博 ...
- [BZOJ 1297][SCOI 2009]迷路(矩阵快速幂)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1297 分析:如果每条边的边权都是1,那么就相当于对邻接矩阵自乘T次(因为写一下递推式子 ...
- 6、面向对象以及winform的简单运用(抽象基类与接口)
抽象类与抽象方法 1.书写规范: 在类前面加上abstract关键字,就成为了抽象类:在一个方法前面加上abstract关键字,就成为了抽象方法(抽象方法不能有实现方法,直接在后面加分号) 例: ab ...
- nginx 的中文配置详细解释
文章转自:http://www.ha97.com/5194.html 更详细的模块参数请参考:http://wiki.nginx.org/Main #定义Nginx运行的用户和用户组 user www ...
- mac os x常用快捷键及用法
最近在研究mac os x系统,开始入手,很不习惯,和windows差别很大,毕竟unix内核.使用中总结了一些使用快捷键(默认),持续更新,欢迎大家补充.1.撤销:command+z 保存:comm ...
- JSP基本原理
JSP的基本原理: jsp的本质是servlet.jsp通过在标准的HTML页面中嵌入java代码,其静态的部分无需Java程序控制,只有那些需要从数据库读取或需要 动态生成的的页面内容,才使用Jav ...