ActionContext-study
ActionContext contex=ActionContext.getContext();
Actioncontext是上下文是一个容器,存放着Action这执行时要用到的一些对象,
如params,session,servletContext,本地化(Locale)信息等。
在每次执行时都会创建新的ActionContext,是线程安全的,也就是说在同一个线程里
ActionConctext是唯一的,这样我的Action就可以在多线程中使用
public static ActionContext getContext() {
ActionContext context = (ActionContext) actionContext.get();
if (context == null) {
OgnlValueStack vs = new OgnlValueStack();
context = new ActionContext(vs.getContext());
setContext(context);
}
return context;
}
一般情况,我们的ActionContext都是通过:ActionContext context = (ActionContext) actionContext.get();来获取的。我们再来看看这里的actionContext对象的创建:static ThreadLocal actionContext = new ActionContextThreadLocal();,ActionContextThreadLocal是实现ThreadLocal的一个内部类。ThreadLocal可以命名为“线程局部变量”,它为每一个使用该变量的线程都提供一个变量值的副本,使每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突。这样,我们ActionContext里的属性只会在对应的当前请求线程中可见,从而保证它是线程安全的。