版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Struts2框架的工作原理与架构分析郭剑峰2012年11月Struts2框架的工作原理与架构分析郭剑峰
Struts2的工作原理一个请求在Struts2框架中的处理分为以下几个步骤
1客户端初始化一个指向Servlet容器(如Tomcat)请求
2这个请求经过一系列的过滤器(Filter)3接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action
4如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy
5ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action类
6ActionProxy创建一个ActionInvocation的实例。
7ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
8一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2框架中继承的标签。在这个过程中需要涉及到ActionMapper
Struts2的工作原理一个请求在Struts2框架中的处2
Struts2的架构分析Struts2框架也是由两部分组成:XWork2和Struts2。XWork是一个命令模式框架,它是Struts2的基础。XWork提供了很多核心功能:IoC(Inversionofcontrol,控制反转)容器,强大的表达式语言(OGNL:ObjectGraphNavigationLanguage-----对象图像导航语言)数据类型转换,验证和可插入的配置。XWork框架的核心概念包括action,拦截器(inerceptor)和result.
Struts2的架构分析Struts2框架也是由两部分组成3
struts-default.xml文件struts-default.xml文件是struts2框架默认加载的配置文件。它定义struts2一些核心的bean和拦截器。这些拦截器是以key-value对的形式配置在struts-default.xml中,其中name是拦截器名字,就是后面使用该拦截器的引用点,value则指定拦截器的实现类。struts-default.xml:struts2全局配置文件,struts2框架启动时会自动加载该文件位置:struts2-core.jar/struts-default.xml作用:定义bean和一个抽象的包。包中定义了返回类型、拦截器、拦截器栈、默认的拦截器和默认的Action
struts-default.xml文件struts-de4
perties文件作用:覆盖系统配置信息struts.custom.i18n.resources=globalMessages
国际化文件的前缀名配置struts.ui.theme=simple
使用struts2的simple模板生成html代码struts.ui.templateDir=templateStruts2的模板目录是通过struts.ui.templateDir常量来指定的,该常量的默认值是template,即意味着Struts2会从Web应用的template目录struts.ui.templateSuffix=ftl
去除struts2标签中的自动生成的布局样式struts.multipart.saveDir=/tmp设置struts2的临时文件上传路径struts.multipart.maxSize=1000000000struts2修改文件上传大小限制
perties文件作用:覆盖系统配置信5
Struts2中为应用指定多个配置文件为了避免struts.xml文件过于庞大、臃肿,提高代码的可读性,我们可以将一个struts.xml配置文件分解成过个配置文件,然后在struts.xml文件中包含其他配置文件。1.配置一个名为department.xml文件<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.1//EN""/dtds/struts-2.1.dtd">
<struts>
<packagename="department"namespace="/department"extends="struts-default">
<actionname="department"class="com.qn.struts.HellowAction"
method="execute">
<paramname="savePath">/department</param>
<resultname="success">/index.jsp</result>
</action>
</package></struts>
Struts2中为应用指定多个配置文件为了避免struts6
Struts2中为应用指定多个配置文件2.配置一个名为employee.xml文件<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.1//EN""/dtds/struts-2.1.dtd">
<struts>
<packagename="employee"namespace="/employee"extends="struts-default">
<actionname="employee"class="com.qn.struts.HellowAction"
method="execute">
<paramname="savePath">/employee</param>
<resultname="success">/index.jsp</result>
</action>
</package>
</struts>
Struts2中为应用指定多个配置文件2.配置一个名为em7
Struts2中为应用指定多个配置文件3.在struts.xml中通过include进行配置<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN""/dtds/struts-2.0.dtd"><struts><constantname="struts.enable.DynamicMethodInvocation"value="false"/><constantname="struts.devMode"value="false"/><constantname="struts.objectFactory"value="org.apache.struts2.spring.StrutsSpringObjectFactory"/><constantname="struts.multipart.maxSize"value="1000000000"/>
<includefile="department.xml"></include>
<includefile="employee.xml"></include> </struts>
Struts2中为应用指定多个配置文件3.在struts.8
Struts2中的国际化
Struts2中的国际化9
Struts2中的国际化
Struts2中的国际化10
Struts2中的国际化
Struts2中的国际化11
Struts2中的国际化
Struts2中的国际化12
Struts2中的国际化
Struts2中的国际化13
Struts2中的国际化案例:struts2app—i18n/LoginAction
Struts2中的国际化案例:struts2app—i1814
Struts2中的表单校验—Annotations验证Struts2提供了注解的方式校验
1)@Validation指明这个类或者接口将使用基于注解的校验。
2)@Validations()在同一个方法上要使用多个注解校验时。
3)@SkipValidation指定某个方法不需要校验。否则所有方法都会使用校验。也可以在检验拦截器中使用validateAnnotatedMethodOnly
4)13个内置校验器的注解版本:
@RequiredFieldValidator
@RequiredStringValidator
@StringLengthFieldValidator
@IntRangeFieldValidator
@DoubleRangeFieldValidator
@DateRangeFieldValidator
@ExpressionValidator
@FieldExpressionValidator
@RegexFieldValidator
@EmailValidator
@UrlValidator
@VisitorFieldValidator
@ConversionErrorFieldValidator
案例:
annotation/SimpleAnnotationAction,annotation/AnnotationValidationAction
Struts2中的表单校验—Annotations验证St15
Struts2单文件上传上传jsp:
Struts2单文件上传上传jsp:16
Struts2单文件上传action:
Struts2单文件上传action:17
Struts2单文件上传xml:案例:SingleUpload.jsp
Struts2单文件上传xml:案例:SingleUplo18
Struts2多文件上传jsp:
Struts2多文件上传jsp:19
Struts2多文件上传action:
Struts2多文件上传action:20
Struts2多文件上传xml:案例:MultiUpload.jsp
Struts2多文件上传xml:案例:MultiUploa21
Struts2动态方法调用Struts.xml:
Struts2动态方法调用Struts.xml:22
Struts2动态方法调用action:
Struts2动态方法调用action:23
Struts2动态方法调用action:案例:DynamicAction.action
Struts2动态方法调用action:案例:Dynami24
Struts2使用通配符定义actionxml:
Struts2使用通配符定义actionxml:25
Struts2使用通配符定义actionaction:案例:WildcardAction.java
Struts2使用通配符定义actionaction:案例26
Struts2局部自定义类型转换器
Struts2局部自定义类型转换器27
Struts2局部自定义类型转换器
Struts2局部自定义类型转换器28
Struts2局部自定义类型转换器
Struts2局部自定义类型转换器29
Struts2局部自定义类型转换器
Struts2局部自定义类型转换器30
Struts2局部自定义类型转换器案例:localconverter.CircleAction.java
Struts2局部自定义类型转换器案例:localconv31
Struts2全局自定义类型转换器必须在src的目录下建立perties文件:案例:globalconverter.CircleAction.java
Struts2全局自定义类型转换器必须在src的目录下建立32
Struts2的OGNL表达式1.OGNL表达式语言
OGNL是ObjectGraphicNavigationLanguage(对象图导航语言)的缩写,它是一个开源项目。Struts2框架使用OGNL作为默认的表达式语言。2.访问上下文(Context)中的对象需要使用#符号标注命名空间,如#application、#session3.由于ValueStack(值栈)是Struts2中OGNL的根对象,如果用户需要访问值栈中的对象,在JSP页面可以直接通过下面的EL表达式访问ValueStack(值栈)中对象的属性:
${foo}//获得值栈中某个对象的foo属性
Struts2的OGNL表达式1.OGNL表达式语言
OG33
Struts2的OGNL表达式#application.userName或者#application['userName'],相当于调用ServletContext的getAttribute("username")。session对象:用来访问HttpSession,例如#session.userName或者#session['userName'],相当于调用session.getAttribute("userName")。request对象:用来访问HttpServletRequest属性(attribute)的Map,例如#request.userName或者#request['userName'],相当于调用request.getAttribute("userName")。parameters对象:用于访问HTTP的请求参数,例如#parameters.userName或者#parameters['userName'],相当于调用request.getParameter("username")。
Struts2的OGNL表达式#application.u34
Struts2的OGNL表达式#application.userName或者#application['userName'],相当于调用ServletContext的getAttribute("username")。session对象:用来访问HttpSession,例如#session.userName或者#session['userName'],相当于调用session.getAttribute("userName")。request对象:用来访问HttpServletRequest属性(attribute)的Map,例如#request.userName或者#request['userName'],相当于调用request.getAttribute("userName")。parameters对象:用于访问HTTP的请求参数,例如#parameters.userName或者#parameters['userName'],相当于调用request.getParameter("username")。
Struts2的OGNL表达式#application.u35
Struts2中为action属性注入值Struts2中为Action中的属性提供了依赖注入功能,在Struts2的配置文件中,我们可以方便的为action中的属性注入值,注意:属性必须提供setter方法Action:
Struts2中为action属性注入值Struts2中为36
Struts2中为action属性注入值jsp:
Struts2中为action属性注入值jsp:37
Struts2中为action属性注入值xml:案例:ioc.IocAction.java
Struts2中为action属性注入值xml:案例:io38
Struts2自定义拦截器Struts2拦截器在访问某个Action方法之前或之后实施拦截,Struts2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 食品安全突发事件应急演练
- 唱唱我的名教案反思
- 倍的认识教案
- 核心素养下英语说课稿
- 艺术家工作室买卖合同样本
- 眼镜审批权限规范
- 河道整治防洪渠施工合同
- 矿产仓库租赁协议范本
- 建筑质保金合同样本
- 能源安防施工合同
- 第六单元中国特色社会主义生态文明建设及结语练习-2023-2024学年中职高教版(2023)中国特色社会主义
- 2024布鲁氏菌病查房
- 结算周期与付款方式
- 成人氧气吸入疗法-中华护理学会团体标准
- 【S钢材民营企业经营管理探究17000字(论文)】
- 林木种质资源调查表(新表)
- 蔬菜出口基地备案管理课件
- 子宫异常出血的护理
- 高考英语单词3500记忆短文40篇
- 《耳穴疗法治疗失眠》课件
- 询盘分析及回复
评论
0/150
提交评论