Struts2系列:(16)ActionContext
2016-06-29 05:26
507 查看
本文解决下面几个问题:
1、ActionContext是什么?
2、如何获取到ActionContext对象?
3、ActionContext的核心结构是什么?
4、ActionContext定义的一些常量
5、ActionContext的完整源代码
1、ActionContext是什么?ActionContext是Action运行的上下文环境。本质上来说,每一个context就是对象的容器。The ActionContext is the context in which an Action is executed. Each context is basically a container of objects an action needs for execution like the session, parameters, locale, etc.
2、如何获取到ActionContext对象?
3、ActionContext的核心结构是什么?ActionContext的核心结构是维护了一个Map<String, Object>类型的context变量。数据的存储和读取都是通过context对象来实现了。
下面是一个简略版本的ActionContext类的实现:
4、ActionContext定义的一些常量4.1、ACTION_NAME常量
5、ActionContext的完整源代码
1、ActionContext是什么?
2、如何获取到ActionContext对象?
3、ActionContext的核心结构是什么?
4、ActionContext定义的一些常量
5、ActionContext的完整源代码
1、ActionContext是什么?ActionContext是Action运行的上下文环境。本质上来说,每一个context就是对象的容器。The ActionContext is the context in which an Action is executed. Each context is basically a container of objects an action needs for execution like the session, parameters, locale, etc.
2、如何获取到ActionContext对象?
ActionContext context = ActionContext.getContext();
3、ActionContext的核心结构是什么?ActionContext的核心结构是维护了一个Map<String, Object>类型的context变量。数据的存储和读取都是通过context对象来实现了。
下面是一个简略版本的ActionContext类的实现:
/** * ActionContext是Action运行的上下文环境。本质上来说,每一个context就是对象的容器。 * The ActionContext is the context in which an Action is executed. Each context is basically a * container of objects an action needs for execution like the session, parameters, locale, etc. * * Action是thread local,是线程安全的。 * The ActionContext is thread local which means that values stored in the ActionContext are * unique per thread. The benefit of this is you don't need to worry about * a user specific action context, you just get it: * * ActionContext context = ActionContext.getContext(); * * Finally, because of the thread local usage you don't need to worry about making your actions thread safe. * * @author Patrick Lightbody * @author Bill Lynch (docs) */ public class ActionContext implements Serializable { /** * 1、为了线程安全,而做一些准备工作 **/ static ThreadLocal<ActionContext> actionContext = new ThreadLocal<ActionContext>(); //1.1、设置或获取ActionContext对象 public static void setContext(ActionContext context) { actionContext.set(context); } public static ActionContext getContext() { return actionContext.get(); } /** * 2、ActionContext的核心存储结构:Map<String, Object> context **/ private Map<String, Object> context; public ActionContext(Map<String, Object> context) { this.context = context; } //2.1、设置和获取context对象 public void setContextMap(Map<String, Object> contextMap) { getContext().context = contextMap; } public Map<String, Object> getContextMap() { return context; } //2.2、向context对象中存储数据和从context对象中读取数据 public Object get(String key) { return context.get(key); } public void put(String key, Object value) { context.put(key, value); } }
4、ActionContext定义的一些常量4.1、ACTION_NAME常量
//Constant for the name of the action being executed. public static final String ACTION_NAME = "com.opensymphony.xwork2.ActionContext.name"; /** * Sets the name of the current Action in the ActionContext. * * @param name the name of the current action. */ public void setName(String name) { put(ACTION_NAME, name); } /** * Gets the name of the current Action. * * @return the name of the current action. */ public String getName() { return (String) get(ACTION_NAME); }4.2、VALUE_STACK常量
//Constant for the {@link com.opensymphony.xwork2.util.ValueStack OGNL value stack}. public static final String VALUE_STACK = ValueStack.VALUE_STACK; /** * Sets the OGNL value stack. * * @param stack the OGNL value stack. */ public void setValueStack(ValueStack stack) { put(VALUE_STACK, stack); } /** * Gets the OGNL value stack. * * @return the OGNL value stack. */ public ValueStack getValueStack() { return (ValueStack) get(VALUE_STACK); }4.3、ACTION_INVOCATION常量
//Constant for the action's {@link com.opensymphony.xwork2.ActionInvocation invocation} context. public static final String ACTION_INVOCATION = "com.opensymphony.xwork2.ActionContext.actionInvocation"; /** * Sets the action invocation (the execution state). * * @param actionInvocation the action execution state. */ public void setActionInvocation(ActionInvocation actionInvocation) { put(ACTION_INVOCATION, actionInvocation); } /** * Gets the action invocation (the execution state). * * @return the action invocation (the execution state). */ public ActionInvocation getActionInvocation() { return (ActionInvocation) get(ACTION_INVOCATION); }4.4、APPLICATION常量
//Constant for the action's application context. public static final String APPLICATION = "com.opensymphony.xwork2.ActionContext.application"; /** * Sets the action's application context. * * @param application the action's application context. */ public void setApplication(Map<String, Object> application) { put(APPLICATION, application); } /** * Returns a Map of the ServletContext when in a servlet environment or a generic application level Map otherwise. * * @return a Map of ServletContext or generic application level Map */ public Map<String, Object> getApplication() { return (Map<String, Object>) get(APPLICATION); }4.5、SESSION常量
//Constant for the action's session. public static final String SESSION = "com.opensymphony.xwork2.ActionContext.session"; /** * Sets a map of action session values. * * @param session the session values. */ public void setSession(Map<String, Object> session) { put(SESSION, session); } /** * Gets the Map of HttpSession values when in a servlet environment or a generic session map otherwise. * * @return the Map of HttpSession values when in a servlet environment or a generic session map otherwise. */ public Map<String, Object> getSession() { return (Map<String, Object>) get(SESSION); }4.6、PARAMETERS常量
//Constant for the action's parameters. public static final String PARAMETERS = "com.opensymphony.xwork2.ActionContext.parameters"; /** * Sets the action parameters. * * @param parameters the parameters for the current action. */ public void setParameters(Map<String, Object> parameters) { put(PARAMETERS, parameters); } /** * Returns a Map of the HttpServletRequest parameters when in a servlet environment or a generic Map of * parameters otherwise. * * @return a Map of HttpServletRequest parameters or a multipart map when in a servlet environment, or a * generic Map of parameters otherwise. */ public Map<String, Object> getParameters() { return (Map<String, Object>) get(PARAMETERS); }4.7、LOCALE常量
//Constant for the action's locale. public static final String LOCALE = "com.opensymphony.xwork2.ActionContext.locale"; /** * Sets the Locale for the current action. * * @param locale the Locale for the current action. */ public void setLocale(Locale locale) { put(LOCALE, locale); } /** * Gets the Locale of the current action. If no locale was ever specified the platform's * {@link java.util.Locale#getDefault() default locale} is used. * * @return the Locale of the current action. */ public Locale getLocale() { Locale locale = (Locale) get(LOCALE); if (locale == null) { locale = Locale.getDefault(); setLocale(locale); } return locale; }
5、ActionContext的完整源代码
package com.opensymphony.xwork2; import com.opensymphony.xwork2.inject.Container; import com.opensymphony.xwork2.util.ValueStack; import java.io.Serializable; import java.util.HashMap; import java.util.Locale; import java.util.Map; /** * The ActionContext is the context in which an {@link Action} is executed. Each context is basically a * container of objects an action needs for execution like the session, parameters, locale, etc. <p> * <p/> * The ActionContext is thread local which means that values stored in the ActionContext are * unique per thread. See the {@link ThreadLocal} class for more information. The benefit of * this is you don't need to worry about a user specific action context, you just get it: * <p/> * <ul><code>ActionContext context = ActionContext.getContext();</code></ul> * <p/> * Finally, because of the thread local usage you don't need to worry about making your actions thread safe. * * @author Patrick Lightbody * @author Bill Lynch (docs) */ public class ActionContext implements Serializable { static ThreadLocal<ActionContext> actionContext = new ThreadLocal<ActionContext>(); /** * Constant for the name of the action being executed. */ public static final String ACTION_NAME = "com.opensymphony.xwork2.ActionContext.name"; /** * Constant for the {@link com.opensymphony.xwork2.util.ValueStack OGNL value stack}. */ public static final String VALUE_STACK = ValueStack.VALUE_STACK; /** * Constant for the action's session. */ public static final String SESSION = "com.opensymphony.xwork2.ActionContext.session"; /** * Constant for the action's application context. */ public static final String APPLICATION = "com.opensymphony.xwork2.ActionContext.application"; /** * Constant for the action's parameters. */ public static final String PARAMETERS = "com.opensymphony.xwork2.ActionContext.parameters"; /** * Constant for the action's locale. */ public static final String LOCALE = "com.opensymphony.xwork2.ActionContext.locale"; /** * Constant for the action's type converter. */ public static final String TYPE_CONVERTER = "com.opensymphony.xwork2.ActionContext.typeConverter"; /** * Constant for the action's {@link com.opensymphony.xwork2.ActionInvocation invocation} context. */ public static final String ACTION_INVOCATION = "com.opensymphony.xwork2.ActionContext.actionInvocation"; /** * Constant for the map of type conversion errors. */ public static final String CONVERSION_ERRORS = "com.opensymphony.xwork2.ActionContext.conversionErrors"; /** * Constant for the container */ public static final String CONTAINER = "com.opensymphony.xwork2.ActionContext.container"; private Map<String, Object> context; /** * Creates a new ActionContext initialized with another context. * * @param context a context map. */ public ActionContext(Map<String, Object> context) { this.context = context; } /** * Sets the action invocation (the execution state). * * @param actionInvocation the action execution state. */ public void setActionInvocation(ActionInvocation actionInvocation) { put(ACTION_INVOCATION, actionInvocation); } /** * Gets the action invocation (the execution state). * * @return the action invocation (the execution state). */ public ActionInvocation getActionInvocation() { return (ActionInvocation) get(ACTION_INVOCATION); } /** * Sets the action's application context. * * @param application the action's application context. */ public void setApplication(Map<String, Object> application) { put(APPLICATION, application); } /** * Returns a Map of the ServletContext when in a servlet environment or a generic application level Map otherwise. * * @return a Map of ServletContext or generic application level Map */ public Map<String, Object> getApplication() { return (Map<String, Object>) get(APPLICATION); } /** * Sets the action context for the current thread. * * @param context the action context. */ public static void setContext(ActionContext context) { actionContext.set(context); } /** * Returns the ActionContext specific to the current thread. * * @return the ActionContext for the current thread, is never <tt>null</tt>. */ public static ActionContext getContext() { return actionContext.get(); } /** * Sets the action's context map. * * @param contextMap the context map. */ public void setContextMap(Map<String, Object> contextMap) { getContext().context = contextMap; } /** * Gets the context map. * * @return the context map. */ public Map<String, Object> getContextMap() { return context; } /** * Sets conversion errors which occurred when executing the action. * * @param conversionErrors a Map of errors which occurred when executing the action. */ public void setConversionErrors(Map<String, Object> conversionErrors) { put(CONVERSION_ERRORS, conversionErrors); } /** * Gets the map of conversion errors which occurred when executing the action. * * @return the map of conversion errors which occurred when executing the action or an empty map if * there were no errors. */ public Map<String, Object> getConversionErrors() { Map<String, Object> errors = (Map) get(CONVERSION_ERRORS); if (errors == null) { errors = new HashMap<String, Object>(); setConversionErrors(errors); } return errors; } /** * Sets the Locale for the current action. * * @param locale the Locale for the current action. */ public void setLocale(Locale locale) { put(LOCALE, locale); } /** * Gets the Locale of the current action. If no locale was ever specified the platform's * {@link java.util.Locale#getDefault() default locale} is used. * * @return the Locale of the current action. */ public Locale getLocale() { Locale locale = (Locale) get(LOCALE); if (locale == null) { locale = Locale.getDefault(); setLocale(locale); } return locale; } /** * Sets the name of the current Action in the ActionContext. * * @param name the name of the current action. */ public void setName(String name) { put(ACTION_NAME, name); } /** * Gets the name of the current Action. * * @return the name of the current action. */ public String getName() { return (String) get(ACTION_NAME); } /** * Sets the action parameters. * * @param parameters the parameters for the current action. */ public void setParameters(Map<String, Object> parameters) { put(PARAMETERS, parameters); } /** * Returns a Map of the HttpServletRequest parameters when in a servlet environment or a generic Map of * parameters otherwise. * * @return a Map of HttpServletRequest parameters or a multipart map when in a servlet environment, or a * generic Map of parameters otherwise. */ public Map<String, Object> getParameters() { return (Map<String, Object>) get(PARAMETERS); } /** * Sets a map of action session values. * * @param session the session values. */ public void setSession(Map<String, Object> session) { put(SESSION, session); } /** * Gets the Map of HttpSession values when in a servlet environment or a generic session map otherwise. * * @return the Map of HttpSession values when in a servlet environment or a generic session map otherwise. */ public Map<String, Object> getSession() { return (Map<String, Object>) get(SESSION); } /** * Sets the OGNL value stack. * * @param stack the OGNL value stack. */ public void setValueStack(ValueStack stack) { put(VALUE_STACK, stack); } /** * Gets the OGNL value stack. * * @return the OGNL value stack. */ public ValueStack getValueStack() { return (ValueStack) get(VALUE_STACK); } /** * Gets the container for this request * * @param cont The container */ public void setContainer(Container cont) { put(CONTAINER, cont); } /** * Sets the container for this request * * @return The container */ public Container getContainer() { return (Container) get(CONTAINER); } public <T> T getInstance(Class<T> type) { Container cont = getContainer(); if (cont != null) { return cont.getInstance(type); } else { throw new XWorkException("Cannot find an initialized container for this request."); } } /** * Returns a value that is stored in the current ActionContext by doing a lookup using the value's key. * * @param key the key used to find the value. * @return the value that was found using the key or <tt>null</tt> if the key was not found. */ public Object get(String key) { return context.get(key); } /** * Stores a value in the current ActionContext. The value can be looked up using the key. * * @param key the key of the value. * @param value the value to be stored. */ public void put(String key, Object value) { context.put(key, value); } }
相关文章推荐
- JQuery+Strusts1.x无刷新登录
- java struts常见错误以及原因分析
- Struts之logic标签库详解
- 通过实例深入学习Java的Struts框架中的OGNL表达式使用
- Java的Struts框架中append标签与generator标签的使用
- struts2的select标签用法实例分析
- SSH框架网上商城项目第20战之在线支付平台
- 在Java的Struts框架下进行web编程的入门教程
- 详解Java的Struts框架中注释的用法
- java中struts 框架的实现
- 利用Java的Struts框架实现电子邮件发送功能
- 在Java的Struts框架中ONGL表达式的基础使用入门
- 详解Java的Struts框架中栈值和OGNL的使用
- Java的Struts框架简介与环境配置教程
- Java的Struts框架中的if/else标签使用详解
- 简单说明Java的Struts框架中merge标签的使用方法
- 详解Java的Struts框架中上传文件和客户端验证的实现
- Java的Struts框架中Action的编写与拦截器的使用方法
- sprng和struts有什么区别?
- Java的Struts框架中<results>标签的使用方法