今天弄了半天終於明白如何在Action中訪問Servlet API了,唉......感覺沒有Struts1方便,不過爲了解偶也是值得的,呵呵
5.訪問Servlet API
前面曾經說過,用戶所寫的Action並不是真正處理用戶請求的Action實例,而僅僅是Struts2的Action代理的代理目標,這是因爲它沒有和Servlet API直接關聯,根本無法處理用戶的請求,那在用戶的Action中又該如何訪問Servlet API呢?
1). Struts2提供了一個ActionContext類,Struts2的Action可以通過此類來訪問Servlet API,以下給出最爲常用的訪問ServletContext、HttpSession,HttpServletRequest的代碼:
// 訪問ServletContext
ActionContext.getContext().getApplication().get(key); // 取值
ActionContext.getContext().getApplication().put(key, value); // 設值
// 訪問HttpSession
ActionContext.getContext().getSession().get(key);
ActionContext.getContext().getSession().put(key, value);
// 訪問HttpServletRequest
ActionContext.getContext().get(key);
ActionContext.getContext().put(key, value);
順便在此給出使用OGNL訪問上述範圍內的屬性值:
${applicationScope.屬性名}
${sessionScope.屬性名}
${requestScope.屬性名}
2). 除了上述所提到的使用ActionContext類來訪問Servlet API外,Struts2還提供了以下接口可以直接訪問Servlet API:
l ServletContextAware
public void setServletContext(ServletContext context);
l ServletRequestAware
public void setservletRequest(HttpServletRequest request);
l ServletResponseAware
public void setservletResponse (HttpServletResponse response);
3). 此外Struts2提供了一個更爲簡單的ServletActionContext類,這個類包含了如下幾個方法可用於訪問Servlet API:
static PageContext getPageContext();
static HttpServletRequest getRequest();
static HttpServletResponse getResponse();
static ServletContext getservletContext();
注意:在Struts1中可以使用response對象向頁面直接輸出內容,但在Struts2中這種方法是不可能生成服務器響應的,即是說類似response.getWriter().print(“cfanboy”);這樣的代碼在Struts2中是不起作用的!