已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Struts2工作原理(实例)和Struts工作原理目录Struts2 官方工作流程1Struts2运行原理(实例详细说明其处理流程)2Struts工作原理7Struts2 官方工作流程上图来源于Struts2官方站点,是Struts 2 的整体结构。1. 初始的请求通过一条标准的过滤器链,到达 servlet 容器 ( 比如 tomcat 容器,WebSphere 容器 )。 2. 过滤器链包括可选的 ActionContextCleanUp 过滤器,用于系统整合技术,如 SiteMesh 插件。 3. 接着调用 FilterDispatcher,FilterDispatcher 查找 ActionMapper,以确定这个请求是否需要调用某个 Action。 4. 如果 ActionMapper 确定需要调用某个 Action,FilterDispatcher 将控制权交给 ActionProxy。 5. ActionProxy 依照框架的配置文件(struts.xml),找到需要调用的 Action 类。 6. ActionProxy 创建一个 ActionInvocation 的实例。ActionInvocation 先调用相关的拦截器 (Action 调用之前的部分),最后调用 Action。 7. 一旦 Action 调用返回结果,ActionInvocation 根据 struts.xml 配置文件,查找对应的转发路径。返回结果通常是(但不总是,也可能是另外的一个 Action 链)JSP 技术或者 FreeMarker 的模版技术的网页呈现。Struts2 的标签和其他视图层组件,帮助呈现我们所需要的显示结果。在此,我想说清楚一些,最终的显示结果一定是 HTML 标签。标签库技术和其他视图层技术只是为了动态生成 HTML 标签。 8. 接着按照相反次序执行拦截器链 ( 执行 Action 调用之后的部分 )。最后,响应通过滤器链返回(过滤器技术执行流程与拦截器一样,都是先执行前面部分,后执行后面部)。如果过滤器链中存在 ActionContextCleanUp,FilterDispatcher 不会清理线程局部的 ActionContext。如果不存在 ActionContextCleanUp 过滤器,FilterDispatcher 会清除所有线程局部变量。 Struts2运行原理(实例详细说明其处理流程)1.1 简单例子先做一个最简单的struts2的例子:在浏览器中请求一个action,然后返回一个字符串到jsp页面上显示出来。第一步:把struts2最低配置的jar包加入的项目中。commons-logging-1.0.4.jarfreemarker-2.3.8.jarognl-2.6.11.jarstruts2-core-2.0.11.jarxwork-2.0.4.jar第二步:在web.xml中加入拦截器配置。struts2org.apache.struts2.dispatcher.FilterDispatcherstruts2/*第三步:把空的struts.xml配置文件放到项目src下面。第四步:编写自定义的action类。package test;import com.opensymphony.xwork2.ActionSupport;public class HelloAction extends ActionSupport private String str;public String hello() this.str = hello!;return success;public String getStr() return str;public void setStr(String str) this.str = str;第五步:编写struts.xml配置文件。/hello.jsp第六步:编写hello.jsp文件。Test第七步:启动tomcat,在浏览器中访问:http:/localhost:8080/hello/np/hello.actionhello 是项目名字np 命名空间,对应namespace里面的字符串。hello.action 其中hello对应action里面的字符串,“.action”表示请求的是一个action。1.2 运行机制1)客户端在浏览器中输入一个url地址。2)这个url请求通过http协议发送给tomcat。3)tomcat根据url找到对应项目里面的web.xml文件。4)在web.xml里面会发现有struts2的配置。5)然后会找到struts2对应的struts.xml配置文件。6)根据url解析struts.xml配置文件就会找到对应的class。7)调用完class返回一个字String,根据struts.xml返回到对应的jsp。1.3 struts2流程上图来源于Struts2官方站点,是Struts 2 的整体结构。一个请求在Struts2框架中的处理大概分为以下几个步骤:1) 客户端初始化一个指向Servlet容器(例如Tomcat)的请求。2) 这个请求经过一系列的过滤器(Filter)。3) 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action。4) 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给4) 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy。5) ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类。6) ActionProxy创建一个ActionInvocation的实例。7) ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。8) 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。Struts2的核心就是拦截器。Struts.xml中所有的package都要extends=struts-default。同理与所有的Java类都要extends自Object一样。struts-default.xml里面就是要做以上事情。Struts工作原理除了学习Struts的基础知识。建议读者还要熟知Struts较为重要的部分-工作原理,这并不是必须要学习的部分。就像很多不懂汽车内部构成原理的人照样可以驾驶汽车一样,不了解Struts的工作原理,并不影响对Struts的使用。但如果能了解Struts的工作原理,则可以更好地让Struts为自己提供服务。如果初学的读者觉得此部分有难度,可以将本节内容放在最后阅读。Struts的工作原理:它把Struts框架处理客户请求的整个过程细分为八个步骤,下面就来详细分析这些步骤。1. 读取配置(初始化ModuleConfig对象)采用Struts框架的Web应用,在Web应用启动时就会加载并初始化ActionServlet,在ActionServlet初始化ModuleConfig的时候,调用initModuleConfigFactory()初始化配置工厂,然后由配置工厂通过initModuleConfig(, config)获得ModuleConfig对象。通过ModuleConfig对象调用下列方法去初始化相关模块。1. initModuleMessageResources(moduleConfig); 2. initModuleDataSources(moduleConfig); 3. initModulePlugIns(moduleConfig); 这些方法的功能就是:容器在加载Struts应用程序时,会先加载web.xml中与Struts相关的一些配置参数,找到struts-config.xml文件,然后通过循环来读取此文件和解析里面的内容,并初始化相关对象。2. 用户请求用户提交表单或调用url向Web应用程序服务器提交一个请求,请求的数据用HTTP协议上传给Web服务器。3. 填充FormBean填充FormBean的过程包括实例化、复位、填充数据、校验、保存等操作。根据*.do请求从ActionConfig中找出对应该请求的Action子类,如有对应的Action且这个Action有一个相应的ActionForm,则ActionForm被实例化并用HTTP请求的数据填充其属性,并保存在ServletContext中,这样它们就可以被其他Action对象或JSP调用。如果没有对应的Action,控制器则直接转发给JSP或静态页面。4. 转发请求控制器根据配置信息ActionConfig将请求派发到具体的Action,与请求相应的FormBean将一并传给这个Action对象。5. 处理业务Action一般只包含一个execute()方法,它负责执行相应的业务逻辑。执行完毕后返回一个ActionForward对象,控制器通过该ActionForward对象进行转发工作。6. 返回响应Action根据业务处理的不同结果返回一个响应对象给总控制器,该目标响应对象对应一个具体的JSP页面或另一个Action。7. 查找响应总控制器根据业务功能Action返回的目标响应对象找到对应的资源对象,通常是一个具体的JSP页面。8. 响应用户目标响应对象将结果展现给用户目标响应对象,即具体的JSP页面,这样客户就得到响应的结果。这里只是从使用Struts的角度对它的工作原理作了分析,在后面的章节中还会深入分析ActionMapping对象、ActionForm对象及Action对
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《GBT 35189-2017 海洋生物体中碘 - 131 的测定 β 计数法》专题研究报告
- 2025年中国钢铁行业数智化转型研究报告
- 《GBT 34910.1-2017 海洋可再生能源资源调查与评估指南 第 1 部分:总则》专题研究报告
- 硫酸生产工岗前基础培训考核试卷含答案
- 耐蚀塑料工诚信品质模拟考核试卷含答案
- 水上打桩工安全素养能力考核试卷含答案
- 固态电解质制造工改进考核试卷含答案
- 智能楼宇管理员设备技术规程
- 野生动物保护员班组管理强化考核试卷含答案
- 《GBT 3810.6-2016 陶瓷砖试验方法 第 6 部分:无釉砖耐磨深度的测定》专题研究报告
- 2025年起重装卸机械操作工技能竞赛理论参考试题库500题(含答案)
- 合同能源管理优惠政策解析
- 【英语】北京市朝阳区2024-2025学年高一下学期期末考试试题(解析版)
- (2026年)生命的拥抱-海姆立克急救法培训课件
- 第四单元《采用合理的论证方法》课件2025-2026学年统编版高中语文选择性必修上册
- 煤矿电瓶车运输 培训课件
- 2025年攀枝花市米易县事业单位秋季引才考核工作笔试考试参考试题附答案解析
- 放射科科室管理
- 数据岗位招聘笔试题与参考答案(某大型央企)2025年
- 三期梅毒性脑膜炎的护理
- KFC副经理工作汇报
评论
0/150
提交评论