Struts2源码阅读之ActionContext

与世无争的帅哥 提交于 2019-12-02 15:58:16

    上一篇文章概述了Struts2的一些流程。这次说下ActionContext,直接进入正题。        

    

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


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


        从上面可以看到ActionContext是被存放在当前线程中的,获取ActionContext也是从ThreadLocal中获取的。因此在执行拦截器、 actionresult的过程中,由于他们都是在一个线程中按照顺序执行的,所以可以在任意时候从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的相关对象.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!