Struts2獲取HttpServletResponse實例
在Struts2中,可以用以下兩種方式來獲取HttpServletResponse對象。
1. ServletActionContext
通過 ServletActionContext 類來訪問 HttpServletResponse 。
package com.gitbook.netmon.action; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.ServletActionContext; public class LocaleAction{ //business logic public String execute() { HttpServletResponse response = ServletActionContext.getResponse(); return "SUCCESS"; } }
2. ServletResponseAware
通過實現 ServletResponseAware 接口並覆蓋 setServletResponse()方法來訪問HttpServletResponse。
注意
當Struts2的“servlet-config”攔截器是看到一個Action類實現ServletResponseAware接口,它會通過一個HttpServletResponse的引用Action類通過setServletResponse()方法請求。
當Struts2的“servlet-config”攔截器是看到一個Action類實現ServletResponseAware接口,它會通過一個HttpServletResponse的引用Action類通過setServletResponse()方法請求。
當然,也可以創建自定義 getServletResponse()來獲得 HttpServletResponse。
package com.gitbook.netmon.action; import java.util.Locale; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.interceptor.ServletResponseAware; public class LocaleAction implements ServletResponseAware{ HttpServletResponse response; //business logic public String execute() { Locale locale = getServletResponse().getLocale(); return "SUCCESS"; } public void setServletResponse(HttpServletResponse response) { this.response = response; } public HttpServletResponse getServletResponse() { return this.response; } }
這兩個機製都可以得到同樣 HttpServletResponse 對象,但 Struts2 文檔推薦使用 ServletResponseAware,請參見下麵的參考資料: