Struts2框架的工作原理与架构分析

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

STRUTS2框架的工作原理与架构分析郭剑峰2012年11月Struts2的工作原理一个请求在Struts2框架中的处理分为以下几个步骤1客户端初始化一个指向Servlet容器(如Tomcat)请求2这个请求经过一系列的过滤器(Filter)3接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action4如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy5ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action类6ActionProxy创建一个ActionInvocation的实例。7ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。8一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2框架中继承的标签。在这个过程中需要涉及到ActionMapperStruts2的架构分析Struts2框架也是由两部分组成:XWork2和Struts2。XWork是一个命令模式框架,它是Struts2的基础。XWork提供了很多核心功能:IoC(Inversionofcontrol,控制反转)容器,强大的表达式语言(OGNL:ObjectGraphNavigationLanguage-----对象图像导航语言)数据类型转换,验证和可插入的配置。XWork框架的核心概念包括action,拦截器(inerceptor)和result.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和一个抽象的包。包中定义了返回类型、拦截器、拦截器栈、默认的拦截器和默认的Actionstruts.properties文件作用:覆盖系统配置信息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修改文件上传大小限制Struts2中为应用指定多个配置文件为了避免struts.xml文件过于庞大、臃肿,提高代码的可读性,我们可以将一个struts.xml配置文件分解成过个配置文件,然后在struts.xml文件中包含其他配置文件。1.配置一个名为department.xml文件?xmlversion=1.0encoding=UTF-8?!DOCTYPEstrutsPUBLIC-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.1//EN=departmentnamespace=/departmentextends=struts-defaultactionname=departmentclass=com.qn.struts.HellowActionmethod=executeparamname=savePath/department/paramresultname=success/index.jsp/result/action/package/strutsStruts2中为应用指定多个配置文件2.配置一个名为employee.xml文件?xmlversion=1.0encoding=UTF-8?!DOCTYPEstrutsPUBLIC-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.1//EN=employeenamespace=/employeeextends=struts-defaultactionname=employeeclass=com.qn.struts.HellowActionmethod=executeparamname=savePath/employee/paramresultname=success/index.jsp/result/action/package/strutsStruts2中为应用指定多个配置文件3.在struts.xml中通过include进行配置?xmlversion=1.0encoding=UTF-8?!DOCTYPEstrutsPUBLIC-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN=struts.enable.DynamicMethodInvocationvalue=false/constantname=struts.devModevalue=false/constantname=struts.objectFactoryvalue=org.apache.struts2.spring.StrutsSpringObjectFactory/constantname=struts.multipart.maxSizevalue=1000000000/includefile=department.xml/includeincludefile=employee.xml/include/strutsStruts2中的国际化Struts2中的国际化Struts2中的国际化Struts2中的国际化Struts2中的国际化Struts2中的国际化案例:struts2app—i18n/LoginActionStruts2中的表单校验—Annotations验证Struts2提供了注解的方式校验1)@Validation指明这个类或者接口将使用基于注解的校验。2)@Validations()在同一个方法上要使用多个注解校验时。3)@SkipValidation指定某个方法不需要校验。否则所有方法都会使用校验。也可以在检验拦截器中使用validateAnnotatedMethodOnly4)13个内置校验器的注解版本:@RequiredFieldValidator@RequiredStringValidator@StringLengthFieldValidator@IntRangeFieldValidator@DoubleRangeFieldValidator@DateRangeFieldValidator@ExpressionValidator@FieldExpressionValidator@RegexFieldValidator@EmailValidator@UrlValidator@VisitorFieldValidator@ConversionErrorFieldValidator案例:annotation/SimpleAnnotationAction,annotation/AnnotationValidationActionStruts2单文件上传上传jsp:Struts2单文件上传action:Struts2单文件上传xml:案例:SingleUpload.jspStruts2多文件上传jsp:Struts2多文件上传action:Struts2多文件上传xml:案例:MultiUpload.jspStruts2动态方法调用Struts.xml:Struts2动态方法调用action:Struts2动态方法调用action:案例:DynamicAction.actionStruts2使用通配符定义actionxml:Struts2使用通配符定义actionaction:案例:WildcardAction.javaStruts2局部自定义类型转换器Struts2局部自定义类型转换器Struts2局部自定义类型转换器Struts2局部自定义类型转换器Struts2局部自定义类型转换器案例:localconverter.CircleAction.javaStruts2全局自定义类型转换器必须在src的目录下建立xwork-conversion.properties文件:案例:globalconverter.CircleAction.javaStruts2的OGNL表达式1.OGNL表达式语言OGNL是ObjectGraphicNavigationLanguage(对象图导航语言)的缩写,它是一个开源项目。Struts2框架使用OGNL作为默认的表达式语言。2.访问上下文(Context)中的对象需要使用#符号标注命名空间,如#application、#session3.由于ValueStack(值栈)是Struts2中OGNL的根对象,如果用户需要访问值栈中的对象,在JSP页面可以直接通过下面的EL表达式访问ValueStack(值栈)中对象的属性:${foo}//获得值栈中某个对象的foo属性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表达式#applicat

1 / 48
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功