`
ldzyz007
  • 浏览: 719780 次
  • 性别: 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部分源码分析

    此外,Struts2支持多种结果类型,如dispatcher(用于转发到JSP页面)、stream(用于处理文件下载)和redirect(用于重定向)。这些结果类型可以通过结果映射在struts.xml中进行配置。 关于类图,它们有助于我们理解...

    关于struts2里用javascript刷新window.showModalDialog的父页面

    ### 关于Struts2中利用JavaScript刷新window.showModalDialog的父页面 在Web开发中,尤其是在使用Struts2框架进行项目开发时,我们经常会遇到需要弹出模态对话框(modal dialog)的需求。其中一个常见的场景就是...

    struts2小案例

    Struts2是一个强大的Java ...通过分析和学习这个小案例,你可以深入理解Struts2框架的工作原理,如何组织代码,以及如何有效地使用Struts2特性来构建实际的Web应用。同时,这也会帮助你掌握MVC模式在实际开发中的应用。

    留言板留言板struts2留言板struts2

    8. **表单处理**:Struts2提供了强大的表单处理能力,可以自动绑定请求参数到Action的属性,实现数据验证,并将错误信息回显到页面。 9. **异常处理**:Struts2通过全局异常映射(Global Exception Mapping)来统一...

    struts2小程序 struts2代码

    Struts2是一个强大的Java web应用程序框架,用于...通过分析源代码,可以深入理解Struts2的工作原理、配置机制以及MVC模式在实际项目中的应用。对于初学者,这是一个很好的实践平台,能帮助他们掌握Web开发的基本技能。

    Struts2视频教程

    - **适用范围**:Struts2广泛应用于企业级Java Web项目的开发中,特别是那些需要处理大量用户交互和数据展示的应用。 #### 二、Struts2入门案例 - **Hello Struts2**:通过创建一个简单的“Hello World”示例,...

    struts2 ,struts2 demo

    在提供的“struts2 demo”压缩包中,你可以找到这些概念的具体实现,包括Action类、视图页面、配置文件等,通过分析和运行这些示例,你可以深入理解Struts2的工作原理和用法。这个压缩包对于初学者来说是一个很好的...

    struts2-showcase.rar

    通过深入研究和分析struts2-showcase项目,开发者能够全面了解Struts2的特性和最佳实践,从而在实际项目中更好地利用这一强大的框架。同时,它也是一个很好的学习资源,帮助初学者快速上手Struts2开发。

    struts2列子源码

    在本压缩包中,包含的是张孝祥关于Struts2的视频教程源码,通过分析这两个示例,我们可以深入理解Struts2的核心概念和工作原理。 1. **Struts2框架概述** Struts2是Apache软件基金会下的一个开源项目,它是Struts1...

    struts2 项目源码

    通过分析这个Struts2项目源码,你可以学习以下技能: 1. 如何创建Action类,并定义其方法与用户请求对应。 2. 理解配置文件`struts.xml`的结构和作用。 3. 掌握Action与视图的交互,了解结果类型的应用。 4. 学习...

    struts2-src

    7. **异常处理**:Struts2有强大的异常处理机制,可以捕获并统一处理Action执行过程中的异常,同时支持自定义异常处理策略。 8. **国际化与本地化**:Struts2支持多语言环境,通过资源包(Properties文件)实现国际...

    struts2与json整合

    在探讨“Struts2与JSON整合”的主题时,我们深入分析了如何在Struts2框架中集成JSON技术,实现前后端数据的高效交互。Struts2作为一款流行的Java Web开发框架,提供了丰富的功能来简化Web应用程序的开发过程。而JSON...

    struts2测试案例

    通过分析和运行这些示例,初学者可以快速掌握Struts2的基本用法和流程,为进一步深入学习打下基础。记得在实际操作中,不仅要理解代码的含义,还要理解它们在Struts2框架中的作用,这样才能更好地运用到自己的项目中...

    struts2项目实例

    Struts2是一个强大的Java web框架,它为构建MVC(模型-视图-控制器)架构的应用程序提供了全面的支持。...通过分析和理解这个实例,开发者可以更好地掌握Struts2框架的使用,为自己的项目开发打下坚实的基础。

    15年9月传智播客视频struts2

    根据提供的文件信息,我们可以推断出这是一套关于Struts2框架的教学视频资料,由知名的教育机构传智播客在2015年9月发布。下面将对Struts2框架进行详细介绍,并基于该视频资料可能涵盖的核心知识点进行展开。 ### ...

    struts2框架源码分析及问题汇总

    5. 参数绑定问题:Struts2使用OGNL进行对象属性与表单字段的绑定,如果数据类型不匹配,会导致转换错误。确保表单字段与Action类属性类型一致。 6. 安全问题:Struts2存在一些已知的安全漏洞,如S2-005和S2-045,应...

    Struts2 in action(struts2实战)

    通过阅读《Struts2 in action》这本书,你可以深入学习Struts2的各个方面,包括最佳实践、高级特性和案例分析,从而在实际项目中更加熟练地运用这个框架。无论你是初学者还是经验丰富的开发者,这本书都将为你的Java...

    struts2简单案例

    - **Action类**:在Struts2中,Action类是处理用户请求的中心组件,它封装了业务逻辑,并通过调用Service层来处理实际的业务操作。 - **配置文件**:`struts.xml`是Struts2的主要配置文件,用于定义Action、结果...

    struts2 项目源代码

    通过分析这个"北大青鸟 struts2 项目源代码",你可以了解到Struts2框架的实战应用,包括请求处理流程、配置文件的编写、Action的设计和实现、视图的渲染以及拦截器的使用。这有助于你更深入地理解和掌握Struts2框架...

    Struts2 做的留言板

    在这个留言板项目中,`struts.xml`会包含关于留言板Action的配置,例如Action的映射路径、结果页面的跳转规则等。 4. **Action类** Action类是Struts2的核心组件,负责处理用户请求。每个Action类对应一个具体的...

Global site tag (gtag.js) - Google Analytics