`
ldzyz007
  • 浏览: 700999 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

关于struts2页面数据处理的分析

阅读更多
关于struts2页面数据处理的分析

前言:struts2中怎样获取页面数据呢?是valueStack,是ognl,是struts2还是xwork?
      Struts 2是WebWork的升级,而不是Struts 1的升级,甚至在Apache的Struts 2的官方文档都提到:WebWork到Struts 2是一次平滑的过渡。实际上,Struts 2.0其实是WebWork 2.3而已,从WebWork2.2迁移到Struts 2.0不会比从WebWork 2.1到2.2更麻烦。在很多方面,Struts 2仅仅是改变了WebWork下的名称,因此,如果开发者具有WebWork的开发经验,将可以更加迅速地进入Struts 2的开发领域。
      WebWork是由OpenSymphony组织开发的,致力于组件化和代码重用的拉出式MVC模式J2EE Web框架。现在的WebWork2.x前身是Rickard Oberg开发的WebWork,但现在WebWork已经被拆分成了Xwork1和WebWork2两个项目。 Xwork简洁、灵活功能强大,它是一个标准的Command模式实现,并且完全从web层脱离出来。 Xwork提供了很多核心功能:前端拦截机(interceptor),运行时表单属性验证,类型转换,强大的表达式语言(OGNL – the Object Graph Notation Language),IoC(Inversion of Control倒置控制)容器等。 WebWork2建立在Xwork之上,处理HTTP的响应和请求。WebWork2使用ServletDispatcher将HTTP请求的变成 Action(业务层Action类), session(会话)application(应用程序)范围的映射,request请求参数映射。WebWork2支持多视图表示,视图部分可以使用JSP, Velocity, FreeMarker, JasperReports,XML等。在WebWork2.2中添加了对AJAX的支持,这支持是构建在DWR与Dojo这两个框架的基础之上.
      事实上struts2也分为struts2与xwork两部分。作用与webWork的WebWork2、Xwork1相同。
    
1.struts1.X中利用ActionForm从页面表单中获取数据,或者直接用request.getparameter从页面表单中获取数据。
当使用ActionForm时候,其实是ActionForm利用java反射机制将request.getparameter中的值赋给对应的form属性。也可以利用commons-beanutils.jar中的org.apache.commons.beanutils.BeanUtils类的copyProperties(vo, form)方法将form对象的拷贝到vo对象。BeanUtils提供对 Java反射和自省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。

2.在struts2的默认配置文件struts-default.xml中,可以看到:
<interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>
此拦截器用来拦截Action的参数,也就是get,set方法与页面的数据交互拦截。它有一个参数:excludeParams,用来设置不拦截的属性名,值为正则表达式形式。这个拦截器将在Action的execute()方法执行之前调用,作用是将request请求的参数值通过表达式语言设置到相应Action的模型里。例如:reg.jsp里的<input type="text" name="user.username">,它输入的值会由Action类的getUser()和User类的setUserName("…")设置到这个User模型里。假设你在注册页面输入用户名"liudong",提交表单ParametersInterceptor就会下面的操作:首先从请求中取得参数的名字和名字对应的值,分别为:"user.username"和"liudong",根据这个名字,从OgnlValueStack中取得堆栈最上面的getUser().setUsername("liudong")操作,即取得Action对象的User模型,并设置username属性的值为"liudong"。原来,我们的Action是通过XWork的拦截器ParametersInterceptor从提交的表单中取得请求的参数和值,再通过OgnlValueStack来执行表达式,调用Action和模型里相应的get或set方法,将从请求中取得的值设置到模型中去。reg.jsp中Input输入框的name="user.username"是必需要遵守OGNL的命名规则。也正是很多拦截器的使用,使得我们的Action类和Web实现了完全的解耦,让我们的Action能如此的简单、优雅!

3.ParametersInterceptor 扩展了抽象类AroundInterceptor。并在其预处理方法(before)中实现了数据的转换。数据转换的过程并不复杂:
  1). 首先由ActionContext获得Map型的参数集parameters。
  2). 由ActionContext获得值栈(OgnlValueStack)。
  3). 遍历 parameters中的各项数据。
  4). 通过 OgnlValueStack,根据数据的键值,为Model 对象填充属性数据。


4.MVC框架的运作流程拆分为以下几部分加以讨论:
  1).将Web页面中的输入元素封装为一个(请求)数据对象。
  2).根据请求的不同,调度相应的逻辑处理单元,并将(请求)数据对象作为参数传入。
  3).逻辑处理单元完成运算后,返回一个结果数据对象。
  4).将结果数据对象中的数据与预先设计的表现层相融合并展现给用户
 
5.struts2执行过程:所有以.action结尾的服务请求将由ServletDispatcher接管。ServletDispatcher 接受到Servlet Container 传递过来的请求,将进行一下几个动作:
  1). 从请求的服务名(例如:/login.action)中解析出对应的Action名称(login)
  2). 遍历 HttpServletRequest、HttpSession、ServletContext 中的数据,并将其复制到Webwork的Map实现中,至此之后,所有数据操作均在此Map结构中进行,从而将内部结构与Servlet API相分离。至此,Webwork 的工作阶段结束,数据将传递给XWork(即struts2) 进行下一步处理。从这里也可以看到Webwork和xwork之间的切分点,Webwork为xwork提供了一个面向Servlet 的协议转换器,将Servlet 相关的数据转构转换成xwork所需要的通用数据格式,而xwork将完成实际的服务调度和功能实现。这样一来,以xwork为核心,只需替换外围的协议转换组件,即可实现不同技术平台之间的切换(如将面向Servlet的Webwork替换为面向JMS的协议转换器实现,即可在保留应用逻辑实现的情况下,实现不同外部技术平台之间的移植)。
  3). 以上述信息作为参数,调用ActionProxyFactory创建对应的ActionProxy实例。ActionProxyFactory 将根据Xwork 配置文件(xwork.xml)中的设定,创建ActionProxy实例,ActionProxy中包含了Action的配置信息(包括Action名称,对应实现类等等)。
  4). ActionProxy创建对应的Action实例,并根据配置进行一系列的处理程序。包括执行相应的预处理程序(如通过Interceptor 将Map 中的请求数据转换为Action
所需要的Java 输入数据对象等),以及对Action 运行结果进行后处理。ActionInvocation 是这一过程的调度者。而com.opensymphony.xwork.DefaultActionInvocation 则是XWork 中对ActionInvocation 接口的标准实现,如果有精力可以对此类进行仔细研读,掌握了这里面的玄机,相信XWork的引擎就不再神秘。"params"大概是Webwork 中最重要、也最常用的一个Interceptor。上面曾经将MVC工作流程划分为几个步骤,其中的第一步:“将 Web 页面中的输入元素封装为一个(请求)数据对象”就是通过"params"拦截器完成。Interceptor 将在Action 之前被调用,因而,Interceptor 也成为将Webwork传来的MAP 格式的数据转换为强类型Java 对象的最佳实现场所。
1
10
分享到:
评论

相关推荐

    深入浅出Struts2(附源码)

    作者处处从实战出发,在丰富的示例中直观地探讨了许多实用的技术,如数据类型转换、文件上传和下载、提高Struts 2应用的安全性、调试与性能分析、FreeMarker、Velocity、Ajax,等等。跟随作者一道深入Struts 2,聆听...

    解决struts2下载异常的jar包 struts2-sunspoter-stream-1.0.jar

    stream对应的类是org.apache.struts2.dispatcher.StreamResult,该类的处理过程如下: 1。配置其中result标签下的各个参数 2。从服务器中获取输入流,并同时与客户端建立输出流(服务器与客户端链接通过Socket进行...

    struts2.4+spring3.1+hibernate4.1的SSH框架

    在业务层中,管理服务组件的Spring IoC容器负责向Action提供业务模型(Model)组件和该组件的协作对象数据处理(DAO)组件完成业务逻辑,并提供事务处理、缓冲池等容器组件以提升系统性能和保证数据的完整性。...

    深入浅出Struts 2 .pdf(原书扫描版) part 1

    如数据类型转换、文件上传和下载、Struts2应用的安全性、调试与性能分析、FreeMarker、Velocily、Ajax,等等。跟随作者一道深入Struts2。聆听大量来之不易的经验之谈。你对Struts2开发框架的理解和应用水平都将更上...

    低清版 大型门户网站是这样炼成的.pdf

    2.1.8 struts 2的运行流程分析—helloworld 48 2.1.9 struts 2的异常处理 52 2.2 struts 2配置精要 54 2.2.1 web.xml中struts 2的配置实现 54 2.2.2 struts 2属性配置文件struts.properties详解 55 2.2.3 ...

    Struts原理、开发及项目实施

    Struts原理、开发及项目实施 Holen 2002-9-12 &lt;br/&gt;1、 摘要 2、 关键词 3、 Framework 4、 Struts的起源 5、 Struts工作原理 6、 Struts安装 7、 一个实例 8、 Struts优缺点...

    图书管理系统(struts+hibernate+spring).rar

    这个名为“图书管理系统(struts+hibernate+spring).rar”的压缩文件,是一个针对计算机专业的JSP源码资料包,它集成了Struts、...通过阅读和分析这些源码,用户可以学习到如何使用Struts处理用户请求和响应,如

    jsp制作购物网站的毕业论文

    第一章 JAVA的网络功能与编程 1-1 JAVA语言简介 1-2 JAVA语言在网络上的应用 ...3-4-2 创建数据表的脚本 3-5 网上书店基本流程 3-6 网上书店各页面功能 3-7 业务逻辑层各bean功能 3-8 控制处理层 总结 参考文献

    基于ASPJSP的电子商务网站设计制作+源代码

    绝对有源代码 目录 中英文摘要 第一章 JAVA的网络功能与编程 1-1 JAVA语言简介 ...3-4-2 创建数据表的脚本 3-5 网上书店基本流程 3-6 网上书店各页面功能 3-7 业务逻辑层各bean功能 3-8 控制处理层 总结 参考文献

    structs程序设计从入门到精通word文档

    3.8struts简单例子的分析(含代码注释和配置文件说明) 9 3.9本章小结 10 第4章 配置STRUTS组件 10 4.1 Web 应用部署描述符 10 4.2 STRUTS配置文件 10 4.3 应用资源文件 10 4.4 ANT的构建文件 10 4.5 struts中的日志...

    源码基于JSP的车辆管理系统(struts+hibernate+spring+oracle).rar

    Struts框架负责处理用户请求和页面跳转,Hibernate框架实现了对象关系映射(ORM),简化了数据库操作,而Spring框架则提供了依赖注入和事务管理等核心功能,降低了系统耦合度,提高了可维护性。 系统主要实现了车辆...

    源码基于JSP的网上书店(struts+hibernate+css+mysql).rar

    这是一个基于JSP的网上书店项目的源码资料包,该项目采用了Struts框架和Hibernate技术进行开发,同时使用了CSS样式表进行页面美化,数据库方面则选择了MySQL作为数据存储方案。这个资料包包含了完整的源代码,可以...

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    8.7.1 Struts2处理表单数据 8.7.2 使用M印类型的request、session、application 8.8 疑难解惑 8.8.1 Struts Prepare And Execute Filter过滤器 8.8.2 struts.xml文件配置出错 8.9 精彩回顾 第9章 庖丁解牛 ——揭密...

    JSP+ACCESS毕业设计 网上书店系统 源码+论文

    3 Struts的工作流程 第三章 网上书店详细设计 3-1 需求分析 3-2 总体设计 3-3 功能设计 3-4 数据库设计与实现 3-4-1 数据库的需求分析 3-4-2 创建数据表的脚本 3-5 网上书店基本流程 3-6...

    J2EE电子商务系统开发从入门到精通

    第2章 Struts基础...... 8 2.1 MVC模式概述..... 8 2.1.1 MVC设计模式..... 8 2.1.2 JSP Model 1与JSP Model 2.. 9 2.2 Struts的体系架构..... 10 2.3 Struts控制器组件类..... 12 2.3.1 ActionServlet类..... 13 ...

    java web技术开发大全(最全最新)

    提供典型应用案例,剖析JSP/Servret技术与Struts 2技术在Web开发中的不同 提供完整的应用案例,使读者可以深入体会SSH开发模式的精髓 所有开发工具和框架均使用目前的最新版本,紧跟技术发展的趋势 提供230个实例和4...

    JAVA程序开发大全---上半部分

    20.11.2 后台管理模块的首页面default.jsp 385 20.11.3 输入要添加的宠物信息的页面addPet.jsp 386 20.11.4 将宠物添加到系统中的页面addpet_do.jsp 387 20.11.5 显示系统全部宠物信息的页面petList.jsp 389 20.11.6...

    Java Web程序设计教程

    第14章spring与struts2、hibernate框架的整合基础 277 14.1spring与struts2的整合方式 277 14.1.1struts2应用的扩展方式 277 14.1.2spring插件的应用 278 14.2spring和hibernate的整合 279 14.2.1spring对...

Global site tag (gtag.js) - Google Analytics