Struts2 訪問Servlet API
Struts2 提供了三種方式訪問本地Servlet API
-
ActionContext【==推薦==、非耦合】
-
XxxAware介面【==推薦==、非耦合】
-
ServletActionContext【==不推薦==、耦合】
1. ActionContext
ActionContext是Action執行的上下文物件,在ActionContext中儲存了Action執行所需要的所有物件,包括parameters,request,session,application等。
方法宣告 | 方法描述 |
---|---|
void put(String key,Object object) | 將key-value鍵值對存放在ActionContext種。模擬Servlet API種HttpServletRequst種的setAttribute()方法。 |
Object get(String key) | 通過key來查詢當前ActionContext中的值 |
Map<String,Object> getApplication() | 返回一個Application級的Map物件 |
static ActionContext getContext() | 獲取當前執行緒的ActionContext物件 |
Map<String Object> getParamters() | 返回一個包含所有HttpServletRequest引數資訊的Map物件 |
Map<String,Object> getSession() | 返回一個Map型別型別的HttpSession物件 |
void setApplication(Map<String,Object> application) | 設定Applicaton上下文 |
voide setSession(Map<String,Object> session) | 設定一個Map型別的Session值 |
ActionContext類訪問Servlet API的常用方法,要訪問Servlet API,可以通過如下方式進行,具體示例程式碼如下:
ActionContext context = ActionContext.getContext(); context.put("name", "張三"); context.getApplication().put("name", "李四"); context.getSession().put("name", "王五");
2. XxxAware 介面
Struts2框架提供了ActionContext類來訪問Servlet API,雖然這種方法可以訪問Servlet API,但是無法直接獲得Servlet API例項。為了在Action中直接訪問Servlet API,Struts2還提供了一系列介面,具體如下:
-
ServletRequestAware:實現該介面的Action可以直接訪問Web應用的HttpServletRequest例項。
-
ServletResponseAware:實現該介面的Action可以直接訪問Web應用的HttpServletResponse例項。
-
SessionAware:實現該介面的Action可以直接訪問Web應用的HttpSession例項。
-
ServletContextAware:實現該介面的Action可以直接訪問Web應用的ServletContext例項。
public class ProductAction extends ActionSupport implements ServletRequestAware { HttpServletRequest request; public String findById() { String pid = request.getParameter("pid"); return SUCCESS; } @Override public void setServletRequest(HttpServletRequest request) { this.request = request; } }
3. ServletActionContext
為了直接訪問Servlet API,Struts2框架還提供了ServletActionContext類,該類包含了幾個常用的靜態方法,具體如下:
-
static HttpServletRequest getRequest():獲取Web應用的HttpServletRequest物件
-
static HttpServletResponse getResponse():獲取Web應用的HttpServletResponse物件
-
static ServletContext getServletContext():獲取Web應用的ServletContext物件
-
static PageContext getPageContext():獲取Web應用的PageContext物件
3.1 HttpServletRequest
HttpServletRequest request = ServletActionContext.getRequest();
3.2 HttpServletResponse
HttpServletResponse response = ServletActionContext.getResponse();
3.3 ServletContext
ServletContext context = ServletActionContext.getServletContext();
3.4 PageContext
PageContext pageContext = ServletActionContext.getPageContext();