1、ActionContextjava
是Action執行的上下文,Action的上下文能夠看做是一個容器,裏面封裝了請求(Request)、會話(Session)、Application等,這裏面的Request、Session、Application是Map類型的,往裏面封裝的是鍵值對,因此這就體現了struts2不與底層servlet Api打交道,那麼對不少web的相關對象進行封裝,這樣能夠達到Action與web層解耦。web
用ActionContext獲得Map類型的Request、Session、Application。session
例子:jsp
獲取request:對象
Map request = ActionContext.getContext().get("request");繼承
往request裏封裝數據get
request.put("name", value);servlet
在前臺就能夠用request.getAttribute("name");io
獲取session容器
Map session = ActionContext.getContext().getSession();
將數據封裝到session中
session.put("name", value);
在前臺頁面上用sessionScope.getAttribute("name");獲得session裏面封裝的值。
獲得session、request有點區別,獲得request用的是get("reqeust"),獲得session用的是getSession()
也能夠直接對Java Servlet Http的請求(HttpServletRequest)、響應(HttpServletResponse)操做,和上面的例子有點區別,注意區別。
ActionContext ctx = ActionContext.getContext();
HttpServletRequest request = (HttpServletRequest)ctx.get(ServletActionContext.HTTP_REQUEST);
HttpServletResponse response = (HttpServletResponse)ctx.get(ServletActionContext.HTTP_RESPONSE);
用法就和Servlet中的request、response用法同樣
2、ServletActionContext
它繼承ActionContext,因此ServletActionContext也能夠獲得HttpServetRequest、HttpServletResponse,,它也提供了直接與Servlet相關對象訪問的功能,它能夠取得的對象有:
(1)javax.servlet.http.HttpServletRequest : HTTPservlet請求對象
(2)javax.servlet.http.HttpServletResponse : HTTPservlet相應對象
(3)javax.servlet.ServletContext : Servlet上下文信息
(4)javax.servlet.ServletConfig : Servlet配置對象
(5)javax.servlet.jsp.PageContext : Http頁面上下文
如何獲取HttpRequest、HttpResponse
例子
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
而後就能夠用request.setAttribute("name", value)方法了。
總結:不難看出,二者之間仍是存在不少共同功能,那麼咱們仍是根據本身的需求進行選擇,能用ActionContext對象知足就儘可能使用ActionContext,避免讓咱們直接去訪問Servlet對象。另外,不要在Action還沒實例化的時候去經過ActionContext調用方法,由於Action實例在ActionContext實例以前建立,ActionContext中一些值尚未設置,會返回null。