1. 程式人生 > >Struts2 訪問Servlet API

Struts2 訪問Servlet API

Struts2 提供了三種方式訪問本地Servlet API

  1. ActionContext【==推薦==、非耦合】

  2. XxxAware介面【==推薦==、非耦合】

  3. 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();