Struts 2 Action訪問Servlet API
Action訪問Servlet API
Struts2中的Action并沒有和任何Servlet API耦合,這樣框架更具靈活性,更易測試。
對于Web應用的控制器而言,不訪問ServletAPI是幾乎不可能的。Web應用中通常需要訪問的ServletAPI就是HttpServletRequest、HttpSession和ServletContext,這三個接口分別代表JSP中內置對象中的request、session、application。
Struts 2提供了一個ActionContext類,Struts 2的action可以通過該類來訪問Servlet API
方法名 |
功能描述 |
getContext() |
靜態方法,獲取系統的ActionContext實例 |
getSession() |
返回一個Map對象,該對象存入HttpSession實例。 |
setSession(Map session) |
直接傳入一個Map實例,將該map實例總得key、value對應轉換成session的屬性名、屬性值 |
getApplication() |
返回一個Map對象,該對象存入ServletContext實例 |
setApplication() |
直接傳入一個Map實例,將實例中的key、value對應轉換成application的屬性名、屬性值 |
getParameters() |
獲得所有請求參數。類似于調用HttpServletRequest對象的getParameterMap方法 |
ActionContext將在Action類中通過ActionContext訪問Servlet API,該Action中示范了向request、session、application范圍設置屬性值。
ActionContext ctx = ActionContext.getContext(); //獲得Session Map session = ctx.getSession(); //獲得Application Map application = ctx.getApplication();
struts 2即可以徹底與Servlet API 分離,從而可以允許該脫離Web容器運行,也就可以脫離Web容器來測試Action;又允許用簡單的方式來操作request、session、application范圍的屬性。
Action 直接訪問Servlet API
雖然Struts 2 提供了ActionContext來訪問Servlet API,但這種訪問畢竟不是直接獲得Servlet API的實例。Struts 2 提供了幾種接口,Action可以直接訪問Servlet API
實現接口名稱 |
接口描述 |
ServletContextAware |
實現該接口的Action可以直接訪問Web應用的ServletContext實例 |
ServletRequestAware |
實現該接口的Action可以直接訪問用戶請求的HttpServletRequest實例 |
ServletResponseAware |
實現該接口的Action可以直接訪問服務器響應的HttpServletResponse |
private HttpServletResponse response; //重寫實現ServletResponseAware接口 public void setServletResponse(HttpServletResponse response) { this.response = response; }
通過上面可知,實現ServletResponseAware接口,只需要實現如下方法:
public void setServletResponse(HttpServletResponse response);
類似的,如果一個Action實現了ServletRequestAware,則需要實現如下方法:
public void setServletRequest(HttpServletRequest request);
類似的,如果一個Action實現了ServletContextAware,則需要實現如下方法:
public void setServletContext(ServletContext context);
即使我們在struts 2 的Action類中獲得了httpServletRespose對象,也不要嘗試直接在Action中對客戶端生成響應。
使用ServletActionContext訪問Servlet API
為了能夠直接訪問Servlet API,struts 2 還提供了一個ServletAction工具類,這個類包含了如下幾個靜態方法
返回值 |
方法名 |
功能描述 |
HttpServletRequest |
getRequest() |
獲得Web應用的HttpServletRequest對象 |
HttpServletResponse |
getResponse() |
獲得Web應用的HttpservletResponse對象 |
ServletContext |
getServletContext() |
獲得Web應用的ServletContext對象 |
PageContext |
getServletContext() |
獲得Web應用的ServletContext對象 |
借助于ServletActionContext工具類的幫助,Action能以更加簡單的方式來訪問Servlet API。
讀李剛《輕量級java EE企業應用實戰(第三版)—struts 2+Spring 3+Hibernate整合開發》