下载
加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 struts1源码解析(struts1源码解析)

struts1源码解析(struts1源码解析).doc

struts1源码解析(struts1源码解析)

张佳芳
2018-12-19 0人阅读 举报 0 0 暂无简介

简介:本文档为《struts1源码解析(struts1源码解析)doc》,可适用于社会民生领域

struts源码解析(struts源码解析)struts源码解析(struts源码解析)initializationofinternalresourcefileinitInternal(ActionResourcesproperties)AtthebeginningoftherelevantinternationalMessageResource,bundleProtectedMessageResourcesinternal=initInternal()ProtectedStringinternalName="orgapachestrutsactionActionResources"(initInternal)initInternalmethodbyfollowingaMessageResourcesobjectInternal=MessageResourcesgetMessageResources(internalName)Thisresourcefileincludessomedefinitionsofmessageinformation,whichcanrefertotheActionResourcespropertiesfileunderorgapachestrutsactionThegetMessageResourcesmethodinMessageResourcesjava,If(defaultFactory==){DefaultFactory=MessageResourcesFactorycreateFactory()}ReturndefaultFactorycreateResources(config)incominginternalNamecallinitOther()loadinitializationparametersofActionServletfromwebxml,includingconfigconvertWeinitializethecontrollerservletcharacterconversionfunctionProtectedStringconfig="WEBINFstrutsconfigxml"(initOther)ProtectedBooleanconvert=falseinitOther()getwebxmlinthe"config"parameterStringvalueValue=getServletConfig()GetInitParameter('config')If(value==){Config=value}thevalueofconvert(trueyesony)GetServletConfig()GetInitParameter("convert")Ifthisparameteristrue(trueyesony),numeric(BigDecimalBigIntegerBooleanByteCharacterDoubleFloatIntegerLongShort)Javapackaging(suchasjavalangInteger)theinitialvalueof,insteadofDefaultvaluefalseAtthebeginningofthewebxmlinformationInitServlet()InitializesanDigesterparsertoparsetheWebxmlActionServletinstancetoGlobalsACTIONSERVLETKEYkeyexistintheServletContextobjectGetServletContext()SetAttribute(GlobalsACTIONSERVLETKEY,this)FiveInitModuleConfigFactory()AtthebeginningoftheModuleConfigmoduleConfigthisisveryimportant,whichencapsulatesalltheinformationinthestrutsconfigxmlWeareintheanalysisofstrutsconfigxmlrootelementsThenwewilllookattheinitModuleConfigaredoingwhatModuleConfigmoduleConfig=initModuleConfig(","config")throughthemoduleConfigintheconfigurationfile,createMessageResourceobjectInitModuleMessageResources(moduleConfig)throughthemoduleConfigintheconfigurationfile,createDataSourceobjectInitModuleDataSources(moduleConfig)throughthemoduleConfigintheconfigurationfileinformation,createInitModulePlugIns(moduleConfig)eachobjectintheconfigurationfile,settheconfiguredstateModuleConfigfreeze()Inparametersthroughwebxmlconfiguration,otherStrutsconfigurationfile(configname)andtaketheaboveon,thesameconfigurationmoduleConfigWhile(nameshasmoreelements()){字符串(string)的名字。nextelement()如果(~的名字。从(“配置”)){继续}字符串的前缀=名称字符串()moduleconfig=initmoduleconfig(前缀getservletconfig()。getinitparameter(名字))initmodulemessageresources(moduleconfig)initmoduledatasources(moduleconfig)initmoduleplugins(moduleconfig)moduleconfig。freeze()}解析XML保护ModuleConfiginitModuleConfig(字符串的前缀字符串路径)将返回{用初始化的configdigester来解析strutsconfigxml配置沼气池的实例中我们将使用初使化并得到蒸煮对象(在初使化的过程中一定会添加各种监听我们一会将看一下初使化的具体代码)Digesterdigester=initconfigdigester()**通过前缀的值来创建moduleconfig对象,initparam,<参数名>配置名称参数名称><<参数值>下Struts配置XML<参数值><初始化参数>如这个网站。XML中的配置中的名称即为模块的前缀配置文件的路径名的字符串可以指定多个配置文件的路径以''间隔。路径这里将迭代解析每一个路径下的配置文件将解析的具体操作委托给parsemoduleconfigfile方法这parsemoduleconfigfile(沼气池、路径)将所得到的moduleconfig对象以org。ApacheStruts。行动。模块为关键放进ServletContext对象中去以方便以后的使用getservletcontext()。setAttribute(globalsmodulekey配置。getprefix()配置)返回配置以及方法doGetdoPost方法。将请求委托给过程(请求、响应)方法protectedvoid方法(HttpServletRequest请求HttpServletResponse响应){moduleutils。getinstance()selectmodule(请求getservletcontext())moduleconfig配置=getmoduleconfig(请求)RequestProcessor处理器=getprocessorformodule(config)在getServletContext。getAttribute(globalsrequestprocessorkey配置。getprefix())取得对应如果(处理器=){处理器=getrequestprocessor(config)}处理过程(请求、响应)}公共无效过程(HttpServletRequest请求HttpServletResponse响应)抛出IOException返回{处理contentType为multipartformdata的后请求如果是则将请求包装否则返回原有请求一般来说除非是要处理文件上传否则不用关心请求=processmultipart(请求)取得URI路径字符串路径为路径(请求、响应)如果(路径=){返回}如果(日志。isdebugenabled()){日志。调试(“处理”要求。getmethod()“路径”路径“'”)}处理一些国际化的事务processlocale(请求、响应)决定请求的内容编码方式。指定响应结果内容类型和字符编码默认是texthtml的过程、内容、(请求、响应)nochache如果是真在响应结果中加入特定的头参数processnocache(请求、响应)前置处理默认返回真实子类可以重新定义它以決定要不要继续处理如果(~processpreprocess(请求、响应)){返回}这种处理以前缓存的信息(请求、响应)根据客户请求信息的路径来决定是否返回ActionMapping实例。如果不能找到路径的映射则先看是否ActionMapping中有未知属性有返回没有这客户将会得到一个误差响应ActionMapping映射=processmapping(请求、响应、路径)如果(映射=){返回}检查执行此操作所需的任何角色如果(~processroles(请求、响应、映射)){返回}处理ActionForm如果沒有就新增一个之后一直使用它首先先检查是否存在ActionMapping配置的如果存在ActionForm则在有效区域查找是否存在该ActionForm实例存在则复用不存在则创建一个实例然后将实例保存在配置文件中的有效域(请求、会话)内并用映射。getattribute()作关键值ActionForm形式=processactionform(请求、响应、映射)如果存在ActionMapping配置的ActionForm则封装请求对象的数据到ActionForm中在封装之前先调用ActionForm的reset()方法进行属性值的默认化ActionForm收集processpopulate(请求、响应、形式、映射)如果ActionForm被配置好并且行动元素的属性验证被设置为真实则进一步调用validate()方法进行规则校验如果validate()方法校验失败就会保存一个ActionError对象到请求域中请求将自动重定向到行动映射的输入属性所指向的页面中如果校验通过或映射中没有配置ActionForm的行动则继续处理请求尝试{如果(~processvalidate(请求、响应、形式、映射)){返回}}catch(invalidcancelexceptione){提出了processexceptionActionForward=(请求、响应、E、形式、映射)processforwardconfig(请求、响应、转发)返回}catch(IOExceptione){把E}catch(返回e){把E}判断<行动>标签的向前或包括标签是不是被设定Thistwolabelsinsettingapath,whichismutuallyexclusivewiththetypeproperty,whenset"Oneoftheattributes,calledRequestDispatcher(orforward)include),withitsactionset(ForwardActionorIncludeActiondelivereddirectlyinsteadofusingActionobjectsforthenexttreatmentIf(ProcessForward(request,response,mapping)){Return}If(ProcessInclude(request,response,mapping)){Return}createorgettheactioninstancetohandlethisrequesttreatmentaction,ifnotjustageneration,afterhasbeenusingitActionaction=processActionCreate(request,response,mapping)If(action==){Return}Action(execute)callmethod,andbacktoActionForwardActionForwardforward=ProcessActionPerform(request,response),Action,form,mapping)ReturntotheActionForwardtreatmentProcessForwardConfig(request,response,forward)}destory()(init)andcorrespondingmethod,dotherelevantcleanupwork,thereadercanseeinit(method)

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/10

struts1源码解析(struts1源码解析)

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利