部分参考《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)
分享到:
相关推荐
- 在JSP中:通常不需要直接获取ActionContext,因为许多Struts2标签库会自动处理ActionContext中的数据传递。 向ActionContext中存入值的方法: - 在Java类(如拦截器、Action类、非Action类)中:使用...
ActionContext是Struts2框架中一个关键的组件,它提供了当前请求上下文的信息,而OGNL(Object-Graph Navigation Language)则是Struts2中的表达式语言,用于在模型和视图之间进行数据传递。下面将详细探讨这两个...
- 类型转换过程中若发生异常,异常信息会被保存到`ActionContext`,并由`conversionError`拦截器封装到`fieldError`中。 - 通过反射调用与业务逻辑对应的`ValidateXxx`方法,如果没有这样的自定义方法,则调用`...
Struts 2 框架作为Java Web开发中的明星框架,其数据传递模型的设计尤为关键,它不仅优化了传统的Servlet架构,还引入了一系列创新机制,如ValueStack和ActionContext,使得数据的处理更加灵活和高效。 **1.1 ...
这些标签与ActionContext和ValueStack紧密结合,使得页面与后台数据交互更加便捷。 2. **基本标签** - `<s:textfield>`:创建输入字段,通常用于表单元素,可自动绑定到Action类的属性。 - `<s:textarea>`:生成...
Struts 2 是一个强大的Java Web应用程序框架,...同时,掌握如何创建和配置Action,编写拦截器,以及如何利用OGNL在视图中动态展示数据。通过实际项目的练习,你可以更好地掌握Struts 2框架,并提升Java Web开发能力。
- `#`:用于获取`ActionContext`中的数据或在OGNL表达式中操作`Map`集合。 #### 六、案例:实现查询客户列表的优化 在实际项目中,使用Struts2提供的迭代标签`<s:iterator>`可以在页面上方便地遍历集合。例如,要...
### 知识点详解:Java导入Excel数据到数据库 #### 一、背景介绍 在企业级应用开发中,经常需要将Excel文件中的数据批量导入到数据库中,这不仅可以提高工作效率,还能确保数据的一致性和准确性。Java作为一种广泛...
一旦数据被正确地存入到`ValueStack`或`ActionContext`中,接下来就需要考虑如何在页面上展示这些数据了。Struts2提供了多种方式来实现这一点: 1. **使用Struts2标签库**:最简单的方法就是使用Struts2自带的标签...
- `s:debug`: 输出当前ActionContext中的所有信息,用于调试。 - `s:iterator`: 遍历集合数据,如List、Map等,常用于显示列表或表格数据。 - `s:if` 和 `s:else`: 条件判断,根据表达式的值决定是否渲染内容。 ...
ActionContext 是WebWork中用于传递请求和响应间数据的容器,它包含了当前请求的所有上下文信息。ActionContext可以存储临时数据,这些数据在Action执行期间可被多个拦截器和Action实例访问。其中,...
4. **数据标签(Data Tags)**:这些标签用于显示数据,如`<s:debug>`用于调试,显示所有ActionContext中的信息,`<s:dump>`用于输出对象的详细信息。 5. **国际化标签(Internationalization Tags)**:如`...
这个"Struts2知识点详解"涵盖了从基础到高级的所有核心概念,旨在帮助开发者深入理解并熟练运用Struts2。 1. **Struts2框架结构**:Struts2的核心是Action类,它是处理用户请求的中心。通过Action类,开发者可以...
- **功能**:创建简单的JavaBean并将其压入值栈,同时在标签范围内可以将JavaBean赋值给某个变量,使其在`actioncontext`中可用,方便数据的传递和使用。 这些标签共同构成了WebWork框架数据处理的核心部分,通过对...
属性值可以是常量、表达式或Ognl路径表达式,后者可以直接访问ActionContext中的对象和方法。 4. **自定义标签** 如果预定义的标签无法满足需求,开发者可以通过实现自定义标签扩展功能。这涉及到创建一个继承自`...
在"Struts2应用开发详解02"的主题中,我们将深入探讨Struts2.2的独有特性以及其核心组件之一——StrutsPrepareAndExecute过滤器的源码分析。 首先,让我们来看看Struts2.2的独有特性: 1. **插件化架构**:Struts...
OGNL(Object-Graph Navigation Language...总的来说,OGNL是Struts2框架中的强大工具,它的灵活性和功能性使得开发者可以更加便捷地处理对象和数据。理解和熟练掌握OGNL表达式对于提升Struts2应用的开发效率至关重要。
### Struts2.0框架技术详解 #### 一、MVC思想 **1.1 Model I 模式和 Model II 模式** ##### 1.1.1 Model I 模式 在Model I模式下,整个Web应用几乎全部由JSP页面组成。JSP页面不仅接收处理客户端请求,还直接...
### Session相关知识点详解 #### 一、Session的基本概念与原理 **Session** 是一种服务器端技术,用于跟踪用户的会话状态。它通过在服务器端创建一个特定于用户的存储区域,来保存用户的数据,并且这些数据可以在...
- 验证失败,Struts2会将错误信息存入ActionContext,返回到错误页面。 - 验证成功,继续执行Action逻辑,跳转到相应结果页面。 5. **错误处理** - **全局错误**:在struts.xml中配置全局错误处理,如`...