Struts2拦截器及其用法详细说明
基于AOP理念的Struts2拦截器的研究与应用

中图 分 类 号 : P l T3】
文 献标 识 码 : A
文 章编 号 : 6 4 6 3 ( 0 0 0 一 0 8 0 17 — 26 2 1 ) l0 0 — 2
Re e r h a pp i a i n o r t 2 i t r e t r b s d o o o fAO P s a c nd a lc to fSt u s n e c p o a e n l g s o
安 全 验 证 、 日志 等 功 能往 往水 平 散 布 在 所 有 对 象 层 次 中 , 而
与 其 所 散 布 到 的 对象 核心 功能 没有 关 系 。这些 散 布 在各 处 的 代 码 被 称 为 横 切 代 码 , O P设 计 中 , 们 造 成 大 量 代 码 的 在 O 它 重 复 , 利 于各 个 模 块 的 复 用 。而 A P则 可 以 减 少 系统 中 的 不 O
n e e a d fe i lt fit r e t n s l i h r blm s ine n xbii o n e c pori o vngt e p o e . l y
Ke r s s e tO ine Po rmmig AOP) cos ut gc n en s a ;nec po y wo d :A p c— re td rga n( ; rsc tn o c r; w p itre tr i
增 多 和应 用 范 的扩 大 , 渐 暴 露 其 不 足和 局 限性 . 逐 . 比如一 个 系统 中有 几 十 个 或 几 百 个 数据 库 查 询 函数 .每 个 地 方 都 要
O P不 能 为 分 散 的对 象 引 入 公 共 行 为 。也 就 是 O P允许 定 O O
义 从 上 到 下 的关 系 , 并 不 适 合 定 义 从 左 到 的 关 系 。例 如 但
paginationinnerinterceptor使用

paginationinnerinterceptor使用分页是在网站开发中非常常见的功能之一,可以帮助用户更方便地查看和导航大量的数据。
为了实现分页功能,我们通常会使用一些第三方的库或者插件,来简化开发过程。
而在Java开发中,Struts2框架提供了一个名为paginationinnerinterceptor的拦截器,可以很方便地实现分页功能。
paginationinnerinterceptor是Struts2框架中的一个拦截器,它的作用是拦截Action请求,并对分页参数进行处理。
使用paginationinnerinterceptor可以将分页参数直接映射到Action的属性上,从而实现分页功能。
下面我们来看一下如何使用paginationinnerinterceptor来实现分页功能。
首先,我们需要在Struts2的配置文件struts.xml中配置paginationinnerinterceptor。
我们可以定义一个全局的拦截器栈,在拦截器栈中添加paginationinnerinterceptor拦截器。
具体的配置如下所示:```xml<package name="default" namespace="/" extends="struts-default"><interceptors><interceptor-stack name="paginationStack"><interceptor-ref name="defaultStack" /><interceptor-ref name="paginationinnerinterceptor" /></interceptor-stack></interceptors><default-interceptor-ref name="paginationStack" />...</package>```接下来,我们需要在Action中定义用于接收分页参数的属性。
Struts2的介绍及总结

Struts2在WebWork基础上发展起来的,可扩展的JAVA EE web框架。
框架设计的目标贯穿整个开发周期,从开发到发布,包括维护的整个过程。
Action类:Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。
Struts2提供一个ActionSupport基类去实现常用的接口。
Action接口不是必须的,任何有execute标识的POJO 对象都可以用作Struts2的Action对象。
线程模式:Struts2Action对象为每一个请求产生一个实例,因此没有线程安全问题。
Servlet依赖:Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。
如果需要,Struts2 Action仍然可以访问初始的request和response。
但是,其他的元素减少或者消除了直接访问HttpServetRequest 和 HttpServletResponse的必要性。
可测试性:Struts2 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。
捕获输入:Struts2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。
Action属性能够通过web页面上的taglibs访问。
表达式语言:Struts 2 使用"ValueStack"技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。
ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。
Struts2不仅支持JSTL,Struts2 还可使用OGNL进行类型转换。
提供基本和常用对象的转换器。
校验:Struts2支持通过validate方法和XWork校验框架来进行校验。
XWork 校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性。
struts2拦截器实现用户登录权限的验证

@Override
@SuppressWarnings("unchecked")
public String intercept(ActionInvocation invocation) throws Exception
{
Map map = invocation.getInvocationContext().getSession();//jsp登录页面将用户登录的信息存在一个session中
public String execute() throws Exception
{
if ("hell)
&& "world".equals(this.getPassword().trim()))
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class AuthInterceptor extends AbstractInterceptor
{
return Action.LOGIN;
}
else
{
return invocation.invoke(); //若有登录信息就继续执行其他拦截器的代码
}
}
}
步骤二 在登录的action类中将用户的登录的信息注入session中,如下代码:
{
Map map = ActionContext.getContext().getSession();
map.put("user","valid");//这里将随意的一个字符串放在session的Key(user)中,
Struts2详细实例教程

Struts2(上)一、经典的MVC模式二、Struts1.x对MVC的实现三、Struts1.x的主要组件和作用组件作用ActionServlet 中央控制器Action 分控制器,调用JavaBean实现业务逻辑,Action可以分为Action、DispatchAction等不同类型ActionForm 封装参数,实现服务器验证,文件上传等Forward 转发到目的地,可以是JSP,也可以是另一个ActionStruts-config.xml 配置文件,配置有ActionForm,Action,Forward等,通过XML解析,然后使用反射技术使用该文件Struts标签库和JSTL类似,和Struts-config.xml、ActionForm、Action等对象可以紧密集成四、Struts1.x 开发实例-登录程序见案例。
五、Struts2(WebWork)的MVCStruts2的MVC架构六、Struts2的主要组件组件作用FilterDispatcher 起中央控制器作用的过滤器Action 处于Model层的Action,调用JavaBean实现业务逻辑struts.xml 核心配置文件,配置有Action、Result等result 和forward类似,转发的目的地,支持多种视图技术。
七、Struts2的实例-登录在MyEclipse环境中建立一个新的web工程,名称“Struts2Login”,存放路径“f:\Struts2Login”。
在Struts2.0.11版本中找到war包struts2-blank-2.0.11.war,解开该war包,在WEB-INF/lib 目录下复制出所有的jar包,这些jar包就是一个Struts2程序所需要的基础jar包,把它们复制到新建的web工程的WEB-INF/lib目录中。
在src目录下建立一个类,包名mypack,类名UserAction,其代码如下:package mypack;import com.opensymphony.xwork2.ActionSupport;public class UserAction extends ActionSupport {private String username;private String userpass;public String getUsername() {return username;}public void setUsername(String username) {ername = username;}public String getUserpass() {return userpass;}public void setUserpass(String userpass) {erpass = userpass;}@Overridepublic String execute() throws Exception {if ("Mike".equals(username) && "123".equals(userpass)|| "张三".equals(username) && "abc".equals(userpass))return "success";elsereturn "error";}}在src目录下建立Struts2的配置文件struts.xml,内容如下:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""/dtds/struts-2.0.dtd"><struts><!-- 定义包管理配置的action 继承struts-default.xml中的配置 --><package name="actions" extends="struts-default"><!-- 定义Action(login.action) --><action name="login" class="erAction"><!-- 定义转发路径对应的字符串名 --><result name="success">/Success.jsp</result><result name="error">/Error.jsp</result></action></package></struts>修改web.xml,在其中加入一个过滤器,过滤/*路径。
struts2-2(拦截器)

17
18
• validation拦截器
– 调用验证框架进行数据验证
• workflow拦截器
– 调用Action类的validate(),执行编码验证
11
Struts 2默认拦截器栈
• struts-default.xml中定义一个defaultStack拦截器栈,并将其指 定为默认拦截器 • 只要在定义包的过程中继承struts-default包,那么defaultStac k将是默认的拦截器
• 8、Action执行完毕,ActionInvocation负责根据结果码字符 串在struts.xml的配置中找到对应的返回结果 • 9、拦截器被再次执行
• 10、过滤器被再次执行
4
Struts 2核心接口和类
• ActionMapper
– 根据请求的URI查找是否存在对应Action调用
• ActionMapping
10
Struts 2自带拦截器
• Params拦截器
– 负责将请求参数设置为Action属性
• servletConfig拦截器
– 将源于Servlet API的各种对象注入到Action
• fileUpload拦截器
– 对文件上传提供支持
• exception拦截器
– 捕获异常,并且将异常映射到用户自定义的错误页面
12
配置拦截器
<package name="packName" extends="struts-default" namespace="/manage"> <interceptors> <!-- 定义拦截器 --> <interceptor name="interceptorName" class="interceptorClass" /> <!-- 定义拦截器栈 --> <interceptor-stack name="interceptorStackName"> <!--指定引用的拦截器--> <interceptor-ref name="interceptorName|interceptorStackName" /> </interceptor-stack> </interceptors> <!--定义默认的拦截器引用--> <default-interceptor-ref name="interceptorName|interceptorStackName" /> <action name="actionName" class="actionClass"> <!—为Action指定拦截器引用--> <interceptor-ref name="interceptorName|interceptorStackName" /> <!--省略其他配置--> </action> </package>
Struts2的拦截器配置

拦截器实例
public class SimpleInterceptor extends AbstractInterceptor { private String name; public void setName(String name) { = name; } public String intercept(ActionInvocation invocation) throws Exception { LoginAction action = (LoginAction)invocation.getAction(); ......... String result = invocation.invoke(); ...... return result; } }
Struts 专题篇
第九章 Struts 2 的拦截器 主讲:陈宝峰
内容描述
● ● ● ● ● ●
拦截器概述 拦截器配置 使用拦截器的配置 使用默认拦截器的配置 拦截器实例 方法过滤
拦截器概述
● ●
拦截器是 Struts 2 中的重要组成部分 大量的内建拦截器完成了大部分的 Struts2 框架的工作
结束
使用默认拦截器的配置
<package name=” 包名” > <interceptors> <interceptor name=” 拦截器名 1” class=”......” /> ...... <interceptor-stack name=” 拦截器栈名 1”> <interceptor-ref name=” 拦截器名 1” /> ...... </interceptor-stack> </interceptors> <default-interceptor-ref name=” 拦截器名或拦截器栈名” /> <action ...... /> </package>
struts2拦截器拦截指定方法

import java.util.Map;import com.opensymphony.xwork2.Action;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;/**拦截指定方法*/public class MyFilterInterceptor extends MethodFilterInterceptor{private static final long serialVersionUID = 1L;private String name;public void setName(String name){ = name;}@Overrideprotected String doIntercept(ActionInvocation invocation) throws Exception { //取得请求相关的ActionContext实例ActionContext ctx = invocation.getInvocationContext();Map session = ctx.getSession();//取出名为user的Session属性String user = (String)session.get("user");//如果没有登陆,或者登陆所用的用户名不是scott,都返回重新登陆if (user != null && user.equals("scott") ){return invocation.invoke();}//没有登陆,将服务器提示设置成一个HttpServletRequest属性ctx.put("tip" , "您还没有登陆,请输入scott,tiger登陆系统");//直接返回login的逻辑视图return Action.LOGIN;}}2.struts.xml配置<package name="site" extends="struts-default" namespace="/site"><interceptors><!-- 定义了一个名为authority的拦截器--><interceptor name="authority" class="cn.zgcyx.filter.MyFilterInterceptor"/> <!--上面自定义的拦截器类--><interceptor-stack name="myDefault"><interceptor-ref name="authority"> <!-- 引用拦截器--><param name="includeMethods">getALL,getPart,listUser</param> <!-- 设置需要拦截的方法,多个以逗号隔开--></interceptor-ref><interceptor-ref name="defaultStack"></interceptor-ref></interceptor-stack></interceptors><default-interceptor-ref name="myDefault"></default-interceptor-ref><!-- 全局--><global-results><!-- 当返回login视图名时,转入/login.jsp页面--><result name="login">/login.jsp</result></global-results><action name="site" class="siteServiceAction"><!--省略跳转--></action></package>。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
--author:LiHong
20/03/2010
1.Struts2拦截器简介:
拦截器可以实现横切功能并使这些实现相对action甚至struts2框架保持独立。它是动态拦截Action调用的对象。它提供了一种机制可以使开发者定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其操作。同时也是提供了一种可以提取action中可重用的部分的方式。
Servlet Configuration Interceptor
【Servlet配置拦截器】
servletConfig
如果某个Action需要直接访问ServletAPI,就是通过这个拦截器实现,它提供访问HttpServletRequest和HttpServletResponse的方法,以map的方式访问
externalRef
com.opensymphony.xwork2.interceptor.ExternalReferencesInterceptor
execAndWait
org.apache.struts2.interceptor.ExecuteAndWaitInterceptor
exception
Token Interceptor
【令牌拦截器】
token
检查action的合法令牌,以防止重复提交表单,当表单被多次提交时,跳转到一个错误页面
Token Session Interceptor
【令牌会话拦截器】
tokenSession
功能与令牌拦截器相同,但是对于非法令牌,提交的数据将保存在会话中,不跳转到错误页面,再次生成与第一次相同的页面。
Checkbox Interceptor
【多选框拦截器】
checkbox
为没有被选定的多选框增加一个值为false的参数,协助管理多选框(在HTTP请求里,那些没有被选定的多选框通常是没有任何信息的)
ConversionErrorInterceptor
【转换错误拦截器】
conversionError
params
com.opensymphony.xwork2.interceptor.ParametersInterceptor
prepare
com.opensymphony.xwork2.interceptor.PrepareInterceptor
staticParams
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor
【异常拦截器】
exception
将action抛出的异常映射到结果,这样就通过重定向来自动处理异常,一般情况下,应该为最后一个拦截器
FileUploadInterceptor
【文件上传拦截器】
fileUpload
此拦截器主要用于文件上传,它负责解析表单中文件域的内容
Internatio-nalization Interceptor
logger
com.opensymphony.xwork2.interceptor.LoggingInterceptor
modelDriven
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor
scopedModelDriven
com.opensymphony.xwork2.interceptor.ScopedModelDrivenIntercepto会话中为action存储和检索消息、字段错误以及action错误,该拦截器要求action实现ValidationAware接口
Model Driven Interceptor
【模型驱动拦截器】
modelDriven
这是一个用于模型驱动的拦截器,当某个Action类实现了ModelDriven接口时,它负责把getModel()方法的结果放入ValueStack中
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor
fileUpload
org.apache.struts2.interceptor.FileUploadInterceptor
i18n
com.opensymphony.xwork2.interceptor.I18nInterceptor
ExternalReferencesInterceptor
【扩展引用拦截器】
externalRef
负责扩展引用
ExecuteAndWaitInterceptor
【执行和等待拦截器】
execAndWait
当action在后台执行时,给用户显示一个过渡性的等待页面
ExceptionMappingInterceptor
ValidationInterceptor
【验证拦截器】
validation
通过执行在xxxAction-validation.xml中定义的校验器,从而完成数据校验。
Workflow Interceptor
【工作流拦截器】
workflow
为action定义默认的工作流,一般跟在validation等其他拦截器后,当验证失败时,不执行action然后重定向到INPUT视图
信息自动装配的拦截器,主要用于当struts2和Spring整合时,Struts可以使用自动装配的方式来访问Spring容器中的Bean.
ChainingInterceptor
【链拦截器】
chain
允许当前action能够使用上一个被执行action的属性,这个拦截器通常要和“chain”结果类型一起使用(<result type=”chain”…/>)
Static Parameters Interceptor
【静态参数拦截器】
staticParams
设置action里的静态定义值(通过action配置里的param标签来实现);这个拦截器负责将struts.xml文件中<action>标签下<param>标签中的参数传入action
Roles Interceptor
CreateSessionInterceptor
【会话创建拦截器】
createSession
自动创建一个HttpSession会话(如果会话不存在),用来为需要使用到HttpSession的拦截器服务
DebuggingInterceptor
【调试拦截器】
debugging
当使用Struts2的开发模式时,此拦截器会提供更多的调试信息,为开发者提供几种不同调试界面
token
org.apache.struts2.interceptor.TokenInterceptor
tokenSession
org.apache.struts2.interceptor.TokenSessionStoreInterceptor
validation
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor
org.apache.struts2.interceptor.StrutsConversionErrorInterceptor
createSession
org.apache.struts2.interceptor.CreateSessionInterceptor
debugging
org.apache.struts2.interceptor.debugging.DebuggingInterceptor
JsonValidationInterceptor
【Json拦截器】
jsonValidation
验证失败,此拦截器可以将fieldErrors和actionErrors两个属性给序列化成json返回给客户端
3.以上拦截器对应的类为:
拦截器配置名
对应的实现类
alias
com.opensymphony.xwork2.interceptor.AliasInterceptor
Parameters Interceptor
【参数拦截器】
params
这是最基本的一个拦截器,它负责解析HTTP请求中的参数,并将参数值设置成Action对应的属性值
Parameter Filter Interceptor
【参数过滤拦截器】
N/A
控制action对参数的访问(非默认配置)
Prepare Interceptor
2.Struts2框架提供的拦截器:
拦截器名
配置名
描述
AliasInterceptor
【别名拦截器】
alias
允许参数在跨越多个请求时使用不同别名,这个拦截器可将多个action使用不同名字链接起来,然后用于处理同一信息
ActionAutowiringInterceptor
【自动装配拦截器】
autowiring
autowiring
com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor
chain
com.opensymphony.xwork2.interceptor.ChainingInterceptor
conversionError
【角色拦截器】
roles
这是一个JAAS(Java Authentication and Authorization Service, Java授权和认证服务)拦截器,只有当浏览者取得合适的授权后,才可以调用被该拦截器拦截的Action