Struts2框架的工作原理与架构分析课件_第1页
Struts2框架的工作原理与架构分析课件_第2页
Struts2框架的工作原理与架构分析课件_第3页
Struts2框架的工作原理与架构分析课件_第4页
Struts2框架的工作原理与架构分析课件_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论