`
braveCS
  • 浏览: 73987 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

ActionContext 中的数据详解

阅读更多

部分参考《Struts2技术内幕》

ActionContext 作为ValueStack的上下文环境  <|——ServletActionContext
    |——context:OgnlContext implements Map ActionContext.getContextMap(),ognl上下文
           |——_root:CompountRoot extends ArrayList :ognl的根
           |  内容:( HashMap:ActionContext.getValueStack().set(key,vlaue)用到的HashMap
           |        当前Action实例
           |        DefaultTextProvider:)
           |——classResolver:CompoundRootAccessor指定处理class loading的处理类
           |——converter:OgnlTypeConverterWrapper指定处理类型转换的处理类
           |——memberAccess:SecurityMemberAccess指定处理属性访问策略的处理方式
           |——_value:HashMap :使用一个Map来维护ognl的上下文
===========ActionContext.context._value中的数据========================
Web原生对象:
Com.opensymphony.xwork2.dispatcher.HttpServletRequest——StrutsRequestWrapper
Com.opensymphony.xwork2.dispatcher.HttpServletResponse——ResponseFacade implements HttpServletResponse 
Com.opensymphony.xwork2.dispatcher.ServletContext——ApplicationContextFacade

XWork封装对象:
Com.opensymphony.xwork2.ActionContext.application——ApplicationMap<K,V>
                                                                                                <——ActionContext.getApplication()
Com.opensymphony.xwork2.ActionContext.session——SessionMap<K,V>
                                                                                                <——ActionContext.getSession()
Com.opensymphony.xwork2.ActionContext.parameters——TreeMap<K,V>  <——ActionContext.getParameters() 返回 HttpServletRequest(get|post,String[],有重复参数名也不覆盖)参数的map
Com.opensymphony.xwork2.util.ValueStack.ValueStack——OgnlValueStack 
                                                                                                <——ActionContext.getValueStack()


application——ApplicationMap<K,V>
session——SessionMap<K,V>
parameters——HashMap:
request——RequestMap
attri——AttributeMap
action——当前Action类

自定义key——自定义值:使用ActionContext.put(key,value),ActionContext.get(key)

Com.opensymphony.xwork2.ActionContext.name——fmCS:Action标签的name属性
                                                                                                <—— ActionContext.getName()
Com.opensymphony.xwork2.ActionContext.container——ContainerImpl:struts2的容器
                                                                                                <—— ActionContext.getContainer()
Com.opensymphony.xwork2.ActionContext.actionInvocation——DefaultActionInvocation
                                                                                                <——ActionContext.getActionInvocation()
Com.opensymphony.xwork2.ActionContext.conversionErrors——HashMap 
                                                                                                   <——ActionContext.getConversionErrors()
Com.opensymphony.xwork2.ActionContext.local——Lcale         <——ActionContext.getLocale()
Struts2.actionMapping——ActionMapping

Xwork.NullHandler.createNullObjects——boolean
Xwork.MethodAccessor.denyMethodExecution——Boolean
Report.conversion.errors——Boolean
Current.property.path——
Last.property.accessed——
Last.bean.accessed——
======================================================================
OgnlValueStack:对ognl中的root对象的扩展,具有栈结构
      |——context:OgnlContext,差不多就是ActionContext
      |——root:CompoundRoot:对valuestack的操作用到的是这里的数据
ValueStack中的[n]表示除栈结构中前N个元素之后构成的元素集合。通过CompoundRoot的cutStack()实现。

使用装饰者模式
StrutsRequestWrapper——|>HttpServletRequestWrapper——|>ServletRequestWrapper      
|——request:RequestFacade
      |——request:Request
                      |——attributes:HashMap<K,V>

StrutsRequestWrapper有子类HttpServletRequestWrapper,实现HttpServletRequest接口

 

使用适配器模式
ApplicationMap
  |——context:ApplicationContextFacade
  |——entries:HashSet<Set>
public class ApplicationMap extends AbstractMap implements Serializable
Struts2 API解释:A simple implementation of the Map interface to handle a collection of attributes and init parameters in a ServletContext object. The entrySet() method enumerates over all servlet context attributes and init parameters and returns a collection of both. Note, this will occur lazily - only when the entry set is asked for

SessionMap
      |——entries
      |——request:StrtusRequestWrapper
      |——session:StandardSessionFacade
public class SessionMap extends AbstractMap implements Serializable
Struts2 API解释:A simple implementation of the Map interface to handle a collection of HTTP session attributes. The entrySet() method enumerates over all session attributes and creates a Set of entries. Note, this will occur lazily - only when the entry set is asked for.

RequestMap 
      |——entries
      |——request:StrutsRequestWrapper
public class RequestMap extends AbstractMap implements Serializable
Struts2 API解释:A simple implementation of the Map interface to handle a collection of request attributes.

AttributeMap
public class AttributeMap implements Map
Struts2 API解释
A Map that holds 4 levels of scope.
The scopes are the ones known in the web world.:
Page scope
Request scope
Session scope
Application scope
A object is searched in the order above, starting from page and ending at application scope.

===================================================================
Struts2下的FreeMarker
参考Struts2API类FreemarkerResult的createModel方法:
Build the instance of the ScopesHashModel, including JspTagLib support
Objects added to the model are 

//1)Application - servlet context attributes hash model 
atc.getApplication().put("fmApplication", "application 测试"); 
${Application.fmApplication}   

//2)Request - request attributes hash model 
ServletActionContext.getRequest().setAttribute("servletRequestFM", "原生Request 测试"); 
${Request.servletRequestFM} 

//3)Session - session attributes hash model 
atc.getSession().put("fmSession", "session 测试"); 
${Session.fmSession} 

//4)stack - the OgnLValueStack instance for direct access 
atc.put("fmActionContext", "actionContext 测试"); 
${stack.context.fmActionContext} 
atc.getValueStack().set("fm_set_ValueStack", "valueStack set  测试"); 
${stack.root[0].fm_set_ValueStack} 

//5)action - the action itself 
private String fmStr="action 域  FreeMarker 测试"; getter,setter 
${action.fmStr} 

//6)request - the HttpServletRequst object for direct access 
//7)response - the HttpServletResponse object for direct access 
//8)ognl - the instance of the OgnlTool 
//9)JspTaglibs - jsp tag lib factory model 
//10)struts - instance of the StrutsUtil class 
//11)exception - optional : the JSP or Servlet exception as per the servlet spec (for JSP Exception pages) 

  

分享到:
评论

相关推荐

    Struts2 ActionContext 中的数据详解

    - 在JSP中:通常不需要直接获取ActionContext,因为许多Struts2标签库会自动处理ActionContext中的数据传递。 向ActionContext中存入值的方法: - 在Java类(如拦截器、Action类、非Action类)中:使用...

    struts2中的ActionContext与ognl

    ActionContext是Struts2框架中一个关键的组件,它提供了当前请求上下文的信息,而OGNL(Object-Graph Navigation Language)则是Struts2中的表达式语言,用于在模型和视图之间进行数据传递。下面将详细探讨这两个...

    Struts2数据输入验证教程详解

    - 类型转换过程中若发生异常,异常信息会被保存到`ActionContext`,并由`conversionError`拦截器封装到`fieldError`中。 - 通过反射调用与业务逻辑对应的`ValidateXxx`方法,如果没有这样的自定义方法,则调用`...

    java详解教程-structs 2

    Struts 2 框架作为Java Web开发中的明星框架,其数据传递模型的设计尤为关键,它不仅优化了传统的Servlet架构,还引入了一系列创新机制,如ValueStack和ActionContext,使得数据的处理更加灵活和高效。 **1.1 ...

    struts2标签库详解

    这些标签与ActionContext和ValueStack紧密结合,使得页面与后台数据交互更加便捷。 2. **基本标签** - `&lt;s:textfield&gt;`:创建输入字段,通常用于表单元素,可自动绑定到Action类的属性。 - `&lt;s:textarea&gt;`:生成...

    Struts 2 技术详解:基于WebWork核心的MVC开发与实践

    Struts 2 是一个强大的Java Web应用程序框架,...同时,掌握如何创建和配置Action,编写拦截器,以及如何利用OGNL在视图中动态展示数据。通过实际项目的练习,你可以更好地掌握Struts 2框架,并提升Java Web开发能力。

    struts2中OGNL的一些概念及原理说明

    - `#`:用于获取`ActionContext`中的数据或在OGNL表达式中操作`Map`集合。 #### 六、案例:实现查询客户列表的优化 在实际项目中,使用Struts2提供的迭代标签`&lt;s:iterator&gt;`可以在页面上方便地遍历集合。例如,要...

    详解导入excel

    ### 知识点详解:Java导入Excel数据到数据库 #### 一、背景介绍 在企业级应用开发中,经常需要将Excel文件中的数据批量导入到数据库中,这不仅可以提高工作效率,还能确保数据的一致性和准确性。Java作为一种广泛...

    struts学习笔记(3)

    一旦数据被正确地存入到`ValueStack`或`ActionContext`中,接下来就需要考虑如何在页面上展示这些数据了。Struts2提供了多种方式来实现这一点: 1. **使用Struts2标签库**:最简单的方法就是使用Struts2自带的标签...

    struts2.0标签详解

    - `s:debug`: 输出当前ActionContext中的所有信息,用于调试。 - `s:iterator`: 遍历集合数据,如List、Map等,常用于显示列表或表格数据。 - `s:if` 和 `s:else`: 条件判断,根据表达式的值决定是否渲染内容。 ...

    webwork配置详解

    ActionContext 是WebWork中用于传递请求和响应间数据的容器,它包含了当前请求的所有上下文信息。ActionContext可以存储临时数据,这些数据在Action执行期间可被多个拦截器和Action实例访问。其中,...

    Struts2标签集锦(附Struts2标签详解word文档)

    4. **数据标签(Data Tags)**:这些标签用于显示数据,如`&lt;s:debug&gt;`用于调试,显示所有ActionContext中的信息,`&lt;s:dump&gt;`用于输出对象的详细信息。 5. **国际化标签(Internationalization Tags)**:如`...

    Struts2知识点详解

    这个"Struts2知识点详解"涵盖了从基础到高级的所有核心概念,旨在帮助开发者深入理解并熟练运用Struts2。 1. **Struts2框架结构**:Struts2的核心是Action类,它是处理用户请求的中心。通过Action类,开发者可以...

    WebWork标签手册

    - **功能**:创建简单的JavaBean并将其压入值栈,同时在标签范围内可以将JavaBean赋值给某个变量,使其在`actioncontext`中可用,方便数据的传递和使用。 这些标签共同构成了WebWork框架数据处理的核心部分,通过对...

    Structs2 标签库详解

    属性值可以是常量、表达式或Ognl路径表达式,后者可以直接访问ActionContext中的对象和方法。 4. **自定义标签** 如果预定义的标签无法满足需求,开发者可以通过实现自定义标签扩展功能。这涉及到创建一个继承自`...

    Struts2应用开发详解02

    在"Struts2应用开发详解02"的主题中,我们将深入探讨Struts2.2的独有特性以及其核心组件之一——StrutsPrepareAndExecute过滤器的源码分析。 首先,让我们来看看Struts2.2的独有特性: 1. **插件化架构**:Struts...

    OGNL表达式详解[定义].pdf

    OGNL(Object-Graph Navigation Language...总的来说,OGNL是Struts2框架中的强大工具,它的灵活性和功能性使得开发者可以更加便捷地处理对象和数据。理解和熟练掌握OGNL表达式对于提升Struts2应用的开发效率至关重要。

    Struts2.0框架技术详解

    ### Struts2.0框架技术详解 #### 一、MVC思想 **1.1 Model I 模式和 Model II 模式** ##### 1.1.1 Model I 模式 在Model I模式下,整个Web应用几乎全部由JSP页面组成。JSP页面不仅接收处理客户端请求,还直接...

    session资料

    ### Session相关知识点详解 #### 一、Session的基本概念与原理 **Session** 是一种服务器端技术,用于跟踪用户的会话状态。它通过在服务器端创建一个特定于用户的存储区域,来保存用户的数据,并且这些数据可以在...

    Struts2的检证框架详解

    - 验证失败,Struts2会将错误信息存入ActionContext,返回到错误页面。 - 验证成功,继续执行Action逻辑,跳转到相应结果页面。 5. **错误处理** - **全局错误**:在struts.xml中配置全局错误处理,如`...

Global site tag (gtag.js) - Google Analytics