笔记:Struts2 拦截器
- 配置拦截器
- Struts.xml 配置文件中,使用<interceptor…/>来定义拦截器,有属性 name 表示拦截器的名称,class 表示拦截器的具体首先类,可以使用<param…/>子元素来配置拦截器的参数,配置示例:
<package name="包名称" extends="抽象包名称">
<interceptors>
<interceptor name="拦截器名称" class="拦截器实现类">
<param name="参数名称">参数值</param>
</interceptor>
</interceptors>
</package>
- 可以把多个拦截器配置为一个拦截器栈,使用<interceptor-stack…/>来配置拦截器栈,归属于<interceptors…>元素下,有属性name表示拦截器栈的名称,使用<interceptor-ref…/>来引用拦截器,可以使用<param…/>子元素来配置拦截器的参数,配置示例:
<interceptor-stack name="拦截器栈名称">
<interceptor-ref name="拦截器名称">
<param name="参数名称">参数值</param>
</interceptor-ref>
</interceptor-stack>
注意:完全可以把拦截器栈当成一个更大的拦截器来处理,因此拦截器栈中,可以引用另一个拦截器栈;如果在<interceptor-ref…/>定义了拦截器参数,则会替换在<interceptor…/>中定义的参数值。
- Action 要使用拦截器和拦截器栈,可以在<Action../>中增加<interceptor-ref…/>子元素,其配置格式和拦截器栈的配置一样,如果要覆盖拦截器栈的某个拦截器的参数值,则可以使用[拦截器名称].[参数名称]这种形式来传入参数。
- 可以在包中使用<default-interceptor-ref…/>来定义默认拦截器,如果 Action 没有定义拦截器,则默认拦截器会生效,如果Action显示的定义了拦截器,则包的默认拦截器会不生效,系统默认的拦截器栈名称是 defaultStack,如果显示定义了拦截器还想使用默认的拦截器,则需要显示的定义这个系统拦截器。
- 自定义拦截器
- Struts2 中需要开发自己的拦截器类,则需要实现 Interceptor 接口,Struts2 还提供了 AbstractInterceptor 抽象类继承Interceptor接口,实现了空白的 init 和 destroy 方法,Interceptor 接口的声明如下:
public interface Interceptor extends Serializable {
void init();
void destroy();
String intercept(ActionInvocation invocation) throws Exception;
}
- 方法 init:拦截器实例化后,在执行拦截前系统将调用该方法,这个方法只执行一次
- 方法 destroy:拦截器销毁前,系统将调用该方法,这个方法只执行一次
- 方法 intercept:该方法是用户需要实现的拦截动作,可以直接返回一个字符串,系统将会跳转到逻辑视图对应的物理视图资源,不会调用被拦截的Action;其参数 ActionInvocation 包含了被拦截的 Action 的引用,可以通过调用该参数 invoke方法,将控制权给下一个拦截器,如果不存在拦截器则会调用被拦截的 Action
- 方法过滤拦截器
- 在默认情况下,拦截器会拦截 Action 的所有方法,如果只需要拦截指定方法,此时就需要使用struts2拦截器的方法过滤特性,struts2 提供了一个 MethodFilterInterceptor 类,该类继承于 AbstractInterceptor类,需要重写 doIntercept 方法来对方法进行过滤,提供了二个参数来对方法进行过滤:
- 参数 excludeMethods:排除的方法,配置了这个参数的方法将不会被拦截器拦截
- 参数 includeMethods:包含的方法,配置了个参数的方法将被拦截,该参数配置的优先级最高,如果都没有配置参数,则默认是所有方法都包含,都会被拦截
- Struts2 提供的支持方法过滤的拦截器有:
- TokenInterceptor:防止表单重复提交的拦截器
- TokenSessionStroreInterceptor
- DefaultWorkflowInterceptor
- ValidationInterceptor
- 拦截器执行顺序,在Action的控制方法执行之前,位于拦截器链前面的拦截器将先发送作用;在Action的控制方法执行之后,位于拦截器链前面的拦截器将后发送作用。
笔记:Struts2 拦截器的更多相关文章
- Struts2学习笔记五 拦截器
拦截器,在AOP中用于在某个方法或字段被访问之前,进行拦截,然后在之前或之后加入某些操作.拦截是AOP的一种实现策略. Struts2中,拦截器是动态拦截Action调用的对象.它提供了一种机制可以使 ...
- Struts2 拦截器配置以及实现
@(Java ThirdParty)[Struts|Interceptor] Struts2 拦截器配置以及实现 Struts2的拦截器应用于Action,可以在执行Action的方法之前,之后或者两 ...
- struts2 拦截器
拦截器:对Action的访问.可以拦截到Action中某个方法.与过滤器不同,过滤器过滤的是请求.过滤JSP.html.但是拦截器不能拦截jsp.html的访问. Struts2 拦截器在访问某个 A ...
- Struts2拦截器的使用 (详解)
Struts2拦截器的使用 (详解) 如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈default ...
- struts2拦截器
一.自定义拦截器 struts2拦截器类似于servlet过滤器 首先定义一个拦截器这个拦截器实现了Interceptor接口: package cn.orlion.interceptor; impo ...
- Struts2拦截器模拟
前言: 接触Struts2已经有一段时间,Student核心内容就是通过拦截器对接Action,实现View层的控制跳转.本文根据自身理解对Struts2进行一个Java实例的模拟,方便大家理解! 示 ...
- Struts2拦截器初涉
Struts2拦截器初涉 正在练习struts,本例是从一个pdf上摘抄的例子,那本pdf都不知道叫什么名字,不过感觉很适合初学者. 在这里要实现一个简单的拦截器"GreetingInter ...
- 浅谈Struts2拦截器的原理与实现
拦截器与过滤器 拦截器是对调用的Action起作用,它提供了一种机制可以使开发者定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行.同时也是提供了 ...
- 基于SSH2框架Struts2拦截器的登录验证实现(转)
大象在这里假设你已经弄清楚了Struts2拦截器的基本概念,可以进入实际运用了.那么我们在之前的基础上只需要做下小小的改变,就可以使用Struts2的拦截器机制实现登录的验证. 修改数 ...
随机推荐
- TCP协议—三次握手四次挥手的原理<转>
三次握手四次挥手的原理 TCP是面向连接的,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接.在TCP/IP协议中,TCP 协议提供可靠的连接服务,连接是通过三次握手进行初始化的.三 ...
- Maven入门(含实例教程)
原文地址:http://blog.csdn.net/u013142781/article/details/50316383 Maven这个个项目管理和构建自动化工具,越来越多的开发人员使用它来管理项目 ...
- SPOJ D-QUERY
以前主席树学 kungbin 最近看了网上的版本 终于发现和我以前学的线段树差不多的了 希望最近能够加强 #include<bits/stdc++.h> using namespace ...
- Alice and Bob HDU - 4268
Alice and Bob's game never ends. Today, they introduce a new game. In this game, both of them have N ...
- Halcon的应用程序 打开后 弹出没有帮助文件错误提示
问题: Halcon的应用程序 打开后 弹出没有帮助文件错误提示 解决方法: 建立(C:\ProgramFiles\MVTec\halcon)目录,将halcon安装目录下的help文件夹复制过来即可 ...
- 如何从Eclipse 迁移到Android Studio 且保持Eclipse项目结构
本文demo下载:http://www.wisdomdd.cn/Wisdom/resource/articleDetail.htm?resourceId=531 Android项目 Eclipse与A ...
- as版本切换导致项目损坏,无法启动。环境依赖混乱
以下方法都不管用, 新建一个项目setting的 把main拷过去就行了!!!! Error:(5, 0) Gradle DSL method not found: 'google()'Possibl ...
- 【BZOJ3993】星际战争(网络流,二分答案)
[BZOJ3993]星际战争(网络流,二分答案) 题面 Description 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战.在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团 ...
- Bzoj3930: [CQOI 2015] 选数 & COGS2699: [CQOI 2015] 选数加强版
题面 Bzoj COGS加强版 Sol 非加强版可以枚举AC这里不再讲述 设\(f(i)\)表示在\([L, H]\)取\(N\)个,\(gcd为i\)的方案数 \(F(i)=\sum_{i|d}f( ...
- Graham凸包算法简介
凸包真是一个神奇的算法.. 概念 凸包,我理解为凸多边形 叉积 对于向量AB和向量BC,记向量AB*向量BC = AB * BC * sin ∠ABC,而叉积的绝对值其实就是S△ABC/2 对于平面上 ...