




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Struts2本章节授课目标器的概念配置
器使用
器2Struts2框架工作原理图注意观察Interceptors3器器?器(Interceptor)是Struts2的一个重要特性。Struts2框架的大多数
功能都是通过
器来实现的,像避免表单重复提交、类型转换、对象组装、验证、文件上传等,都是在器的帮助下实现的。拦截器之所以称为“器”,是因为它可以在Action执行之前或执行之后调用。Struts2将它的功能放到器中实现而不是分散到Action中实现,有利于系统的解耦,使得功能的实现类类似于个人电脑的组装,变”一个
器,不需要某个功能成了可插拔的。需要某个功能就“就“拔出”。器的作用:① 为action动态添加输入验证②
对象组装(也就是进行数据类型转换)③
权限控制④
日志记录4器器工作过程5器序号器名称作用1alias在请求之间转换名字不同的相似参数2chain将所有的属性从前一个Aciotn复到当前Action中3checkbox添加自动的复选框处理代码。当复选框未复选时采用false值添加到参数中4基于的名/值设置Action的属性5conversionError将类型转换错误从ActionContext中取出,添加到Action字段错误中6createSession自动创建一个HttpSession对象7debugging当struts.devMode属性设置为true,才有,用于调试8execAndWait可以用于防止
Action
Http请求超时9exception提供了异常处理的 功能10fileUpload用于对文件上传提供支持11i18n用于支 际化12logger记录一个action执行的开始和结束13token检查传到Action的token值的有效性,防表单重复提交6器配置和使用
器前面所介绍的器在struts-default.xml中已经进行了配置。如果您想要使用上述
器,只需要在应用程序struts.xml文件中通过“<include
file=”struts-default.xml“
/>”将struts-default.xml文件包含进来,并继承其中的struts-default包(package),最后在定义Action时,使用“<interceptor-refname=”xx“
/>”
器或
器栈(interceptorstack)。一旦您继承了struts-default包(package),所有Action都会调用
器栈
——defaultStack。当然,在Action配置中加入“<interceptor-ref
name=”xx“
/>”可以覆盖defaultStack。下面 通过使用timer 器的使用案例进行。7器创建Action类package
com.shinowit;import
com.opensymphony.xwork2.ActionSupport;6L;public
class
TimerInterceptorAction
extends
ActionSupport
{private
static
final
long
serialVersionUID
=
-public
String
execute()
{try{//模拟耗时的操作Thread.sleep(500);}
catch
(Exception
e)
{e.printStackTrace();}return
SUCCESS;}}8器在Struts2配置xml中定义Action,名为TimerAction,并配置
器<package
name="InterceptorDemo"
extends="struts-default"><action
name="TimerAction"class="com.shinowit.TimerInterceptorAction"><interceptor-ref
name="timer"/><result>/Timer.jsp</result></action></package>器timer缺省没有配置在struts-default包中9器timer器执行效果1011自定义
器编写 器类作为“框架(framework)”,可扩展性是不可或缺的,因为世上提供如此丰富的器的能力,恰恰相反,没有放之四海而皆准的东西。虽然,Struts
2为器实现,但是这并不意味
失去创建自定义在Struts
2自定义
器是相当容易的一件事。大家在开始着手创建自定义 器前,切记以下原则:器必须是无状态的,不要使用在API提供的ActionInvocation之外的任何东西。原因:Struts
2不能保证为每一个请求或者action创建一个实例,所以如果
器带有状态,会
并发问题。在Struts2中编写
类,有如下二种方式:实现Interceptor接口继承
Interceptor类(一般会选择此种方式)12自定义
器器,都需要对下述三个方法进行编写 器类无论选择哪种方式创建override。三个方法如下:1. void
init();此方法在
用于初始化器实例创建之后,intercept()方法被调用之前调用,器所需要资源。void
destroy();该方法在
器实例清除之前调用,用于
在init()方法中分配的资源。该方法只执行一次。String
intercept(ActionInvocation
invocation)
throwsException;该方法在Action执行之前被调用, 器为Action提供的附加功能在该方法中实现。利用invocation参数,可以获取action执行的状态。在intercept()方法中,如果要继续执行后续部分,可以调用invocation.invoke()。13自定义
器器示例代码自定义package
com.shinowit;import
com.opensymphony.xwork2.ActionInvocation;import
erceptor.
Interceptor;public
class
AroundIntercept
extends Interceptor
{private
static
final
longserialVersionUID
=
1L;@Overridepublic
void
init()
{System.out.println("这是一个初始化方法");}@Overridepublic
String
intercept(ActionInvocation
invocation)
throws
Exception{String
result
=
"";System.out.println("在action的execute方法执行之前动作");result=invocation.invoke();System.out.println("在action的execute方法执行之后动作");return
result;注意:在编写 器时要注意, 器必顺是无状态的,换句话
说,在器类中不应该有实例变量。这是因为struts2对每一个Action的请求使用的是同一个
器实例来处理,如果
器有状态,在多线程并 况下,
器的状态将不可测。14自定义
器自定义 器的配置<package
name="InterceptorDemo"
extends="struts-default"><interceptors><interceptor
name="aroundInterceptor"class="com.shinowit.AroundIntercept"></interceptor></interceptors><action
name="TimerAction"class="com.shinowit.TimerInterceptorAction"><interceptor-ref
name="aroundInterceptor"/><interceptor-ref
name="timer"/><result>/Timer.jsp</result></action></package>15自定义
器时该如何处理?可特殊 器抽象类只需要对Action中部分方法进行以使用下面这个类:erceptor.MethodFilterInterceptorMethodFilterInterceptor通过指定include/excluded方法列表来选择 或排除的方法,可以设置的参数如下:excludeMethods要排除的方法includeMethods要
的方法在设置 或排除的方法时,如果有多个方法,那么以逗号(,)分隔,如果一个方法的名字同时出现在excludeMethods和includeMethods参数中,那么会当作要 的方法。16自定义
器器示例,修改父类为基于MethodFilterInterceptor的MethodFilterInterceptrorpackage
com.shinowit;import
com.opensymphony.xwork2.ActionInvocation;import
erceptor.MethodFilterInterceptor;public
class
AroundIntercept
extendsMethodFilterInterceptor
{ntercept(ActionInvocation
invocation)
throws@OverrideprotectedStringException
{System.out.println("AroundIntercept被调用......");returninvocation.invoke();}}17自定义
器CrudAction.java代码package
com.shinowit;import
com.opensymphony.xwork2.ActionSupport;public
class
CrudAction
extends
ActionSupport
{public
String
insert(){System.out.println("insert方法被调用");return
SUCCESS;}public
String
update(){System.out.println("update方法被调用");return
SUCCESS;}public
String
delete(){System.out.println("delete方法被调用");return
SUCCESS;}public
String
select(){System.out.println("select方法被调用");return
SUCCESS;}public
String
execute(){System.out.println("execute方法被调用");return
SUCCESS;}}18自定义
器基于MethodFilterInterceptor的
器示例<package
name="InterceptorDemo"
extends="struts-default"><interceptors><interceptor
name="aroundInterceptor"
class="com.shinowit.AroundIntercept"></interceptor></interceptors><action
name="crud_*"
class="com.shinowit.CrudAction"method="{1}"><interceptor-ref
name="aroundInterceptor"><param
name="includeMethods">select,update</param><param
name="excludeMethods">delete,insert</param></interceptor-ref><result>/index.jsp</result></action></package>19自定义
器基于方法过滤的器执行效果2021自定义
器配置
器器需要在struts.xml中进行配置才能为action提供服务。要为action配置
器,首先需要在interceptors元素中使用interceptor元素定义
器,然后
在action中使用interceptor-ref元素指定
的class,前者指定比如对如前面的器。Interceptor元素有两个必需的属性:name和器的名字,后者指定
器的完整类名。器,需要如下配置:<
package
name=“default"
extends
="struts-default"
><interceptors>
<!
-
-在这里定义
器-
-><interceptor
name=“around”
class=“AroundInterceptor”/></interceptors><
action
name=“test”
class=“ .AroundAction”
><
result
>
/Timer.jsp
</
result
>器--><interceptor-ref
name=“around”/><!–此处</
action
></
package
>22自定义
器配置
器如果在一个action需要多个 器,那又需要如何配置?另外,对于多个 器之间的执行顺序又是怎样的?对于上述问题有二个解决方法:为一个Action配置多个将多个
器配为一个器器栈,然后在action中23配置示例为一个Action配置多个
器<
package
name
=“default"
extends
="struts-default"
><interceptors>
<!
-
-在这里定义
器-
-><interceptor
name=“before”
class=“BeforeInterceptor”/><interceptor
name=“after”
class=“AfterInterceptor”/></interceptors><
action
name=“test”
class=“
.TestAction”
><
result
>
/Timer.jsp
</
result
>器-->器--><interceptor-ref
name=“before”/><!–此处<interceptor-ref
name=“after”/><!–此处</
action
></
package
>24配置示例定义 器栈示例<
package
name
=“default"
extends
="struts-default"
><interceptors>
<!
-
-在这里定义
器-
-><interceptor
name=“before”
class=“BeforeInterceptor”/><interceptor
name=“after”
class=“AfterInterceptor”/>器栈--><!—配置
器栈,便于使用→<interceptor-stack
name=“mystack”><
interceptor-ref
name
=“before”
/><
interceptor-ref
name
=“after”
/></interceptor-stack></interceptors><
action
name=“test”
class=“
.TestAction”
><result
>
/Timer.jsp
</
result
><interceptor-ref
name=“mystack”/><!–此处</
action></
package
>25配置示例缺省 器栈的配置<
package
name
=“default"
extends
="struts-default"
><interceptors>
<!
-
-在这里定义
器-
-><interceptor
name=“before”
class=“BeforeInterceptor”/><interceptor
name=“after”
class=“AfterInterceptor”/><!—配置
器栈,便于使用→<interceptor-stack
name=“mystack”><
interceptor-ref
name
=“before”/><
interceptor-ref
name
=“after”
/></interceptor-stack></interceptors><!—此处指定了一个默认的 器栈,也就意味着此名下所有的action都将会执行此默认 器栈中的 器(按出现顺序)→<default-interceptor-ref
name=“mystack”/>.TestAction”
><
action
name=“test”
class=“<result
>
/Timer.jsp
</
result
></
action
></
package
>26配置示例当配置缺省 器栈之后又在action中定义 器时<
package
name
=“default"
extends
="struts-default"
><interceptors>
<!
-
-在这里定义
器-
-><interceptor
name=“before”
class=“BeforeInterceptor”/><interceptor
name=“after”
class=“AfterInterceptor”/><!—配置
器栈,便于使用→<interceptor-stack
name=“mystack”><
interceptor-ref
name
=“before”
/><interceptor-ref
name
=“after”
/></interceptor-stack></interceptors><default-interceptor-ref
name=“mystack”/><
act
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年保安证考试实战演练试题及答案
- 广西民族大学相思湖学院《食品工艺学实验》2023-2024学年第二学期期末试卷
- 2025届河南省平顶山市鲁山县第一高级中学高三教学调研(二)历史试题试卷含解析
- 2025年山东省诸城市高三下学期期中联考试卷数学试题含解析
- 山东省济南市章丘区2025届数学五下期末综合测试模拟试题含答案
- 唐山科技职业技术学院《结构设计原理B》2023-2024学年第一学期期末试卷
- 山西省临汾市2025届高三1月模拟调研历史试题含解析
- 揭阳市普宁市2024-2025学年重点中学小升初数学入学考试卷含解析
- 甘肃省 2025届高考历史全真模拟试题(含解析)
- 常用防范措施之保安证试题及答案
- 确有专长人员从事传统医学临床实践年限证明
- 2022年上海市学业水平考试生命科学试卷含答案
- 2022浙江农林大学博士入学考试英语
- 2022俄语课程标准解读及学习心得:聚焦核心素养的俄语课程改革
- 2022年云南省中考数学试题及答案解析
- 煤矿矿安全监测监控系统的选型设计
- 样板引路专项方案计划
- 华中师大版七年级全一册心理健康 16.团结协作互助前行 课件(14ppt)
- 硝酸钾牙膏抗牙本质敏感效果的循证分析
- 人教2011版小学数学四年级《乘法分配率》
- 废水污染物名称及其代码表
评论
0/150
提交评论