您的位置:首页 > 编程语言 > Java开发

Struts2源码阅读之ActionContext

2012-11-17 00:00 369 查看
上一篇文章概述了Struts2的一些流程。这次说下ActionContext,直接进入正题。

static ThreadLocal actionContext = new ThreadLocal();//ActionContext


public static ActionContext getContext() {
return (ActionContext) actionContext.get();
}


从上面可以看到ActionContext是被存放在当前线程中的,获取ActionContext也是从ThreadLocal中获取的。因此在执行拦截器、 action和result的过程中,由于他们都是在一个线程中按照顺序执行的,所以可以在任意时候从ThreadLocal中获取 ActionContext。

ActionContext是Action执行时的上下文,上下文可以看作是一个容器

Map<String, Object> context;
public static void setContext(ActionContext context) {
actionContext.set(context);
}
public static ActionContext getContext() { return (ActionContext) actionContext.get(); }
由上面可以看出,其实我们这里的容器就是一个Map而已,在容器中存放的是Action在执行时需要用到的对象.比如:VALUE_STACK、ACTION_NAME、SESSION、APPLICATION、ACTION_INVOCATION等等。

另外还一个类叫ServletActionContext,它直接继承了ActionContext,因此也是线程安全的。ServletActionContext还提供了一些直接与Servlet相关对象访问的功能,例如HttpServletRequest、HttpServletResponse、ServletContext、PageContextd等。

如果ActionContext能够实现我们的功能,那最好就不要使用ServletActionContext,让我们的Action尽量不要直接去访问Servlet的相关对象.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: