轉自:http://www.kaifajie.cn/struts/8944.html
package com.log; import java.io.IOException; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext; import org.apache.struts2.StrutsStatics; import org.apache.struts2.interceptor.RequestAware; import org.apache.struts2.interceptor.ServletResponseAware; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ognl.OgnlValueStack; /** * 1、使用Struts2 Aware攔截器 * 需要Action類實現相應的攔截器接口。如我們要獲得HttpServletResponse對象,需要實現org.apache.struts2. * interceptor.ServletResponseAware接口MyAction實現了一個ServletResponseAware接口, * 並且實現了setServletResponse方法。如果一個動作類實現了ServletResponseAware接口, * Struts2在調用execute方法之前,就會先調用setServletResponse方法,並將response參數傳入這個方法。 * 如果想獲得HttpServletRequest、HttpSession和Cookie等對象,動作類可以分別實現ServletRequestAware、 * SessionAware和CookiesAware等接口。這些接口都在org.apache.struts2.interceptor包中。 * 如果要獲得請求參數,動作類可以實現org.apache.struts2.interceptor. * ParameterAware接口,但如果只想判斷某個參數是否存在,也可以實現com.opensymphony.xwork2.interceptor. * ParameterNameAware接口。這個接口有一個acceptableParameterName方法,當Struts2獲得一個請求參數時, * 就會調用一次。讀者可以在這個方法中將所有的請求參數記錄下來,以便以后使用。這個方法的定義如下: boolean * acceptableParameterName(String parameterName) * * @author Wei * @time 2016年10月5日 下午5:20:15 */ class MyAction extends ActionSupport implements ServletResponseAware { /** * */ private static final long serialVersionUID = 1L; private javax.servlet.http.HttpServletResponse response; // 獲得HttpServletResponse對象 public void setServletResponse(HttpServletResponse response) { this.response = response; } public String execute() throws Exception { response.getWriter().write("實現ServletResponseAware接口"); return null; } } /* * 使用RequestAware攔截器 * 和第1種方法類似。動作類需要實現一個org.apache.struts2.interceptor.RequestAware接口。 * 所不同的是RequestAware將獲得一個com.opensymphony.xwork2.util.OgnlValueStack對象, * 這個對象可以獲得response、request及其他的一些信息 */ class FirstAction extends ActionSupport implements RequestAware { /** * */ private static final long serialVersionUID = 1L; private Map request; private HttpServletResponse response; @Override public void setRequest(Map request) { this.request = request; } public String execute() throws Exception { java.util.Set<String> keys = request.keySet(); // 枚舉所有的key值。實際上只有一個key:struts.valueStack for (String key : keys) System.out.println(key); // 獲得OgnlValueStack 對象 OgnlValueStack stack = (OgnlValueStack) request.get("struts.valueStack"); // 獲得HttpServletResponse對象 response = (HttpServletResponse) stack.getContext().get(StrutsStatics.HTTP_RESPONSE); response.getWriter().write("實現RequestAware 接口"); return null; } } /** * struts2中獲取HttpServletrequest,HttpServletresponse,HttpSession的四種方式 * * @author Wei * @time 2016年10月5日 下午5:23:02 */ public class LoginAction333 { public static void main(String[] args) throws IOException { } public void method3() { /* * 3、使用ActionContext類,這個很方便 * 我們可以通過org.apache.struts2.ActionContext類的get方法獲得相應的對象。代碼如下: */ HttpServletResponse response = (HttpServletResponse) ActionContext.getContext() .get(org.apache.struts2.StrutsStatics.HTTP_RESPONSE); HttpServletRequest request = (HttpServletRequest) ActionContext.getContext() .get(org.apache.struts2.StrutsStatics.HTTP_REQUEST); } public void method4() throws IOException { /* * 4、最簡單的一種,使用ServletActionContext類 * Struts2為我們提供了一種最簡單的方法獲得HttpServletResponse及其他對象。這就是org.apache.struts2 * .ServletActionContext類。我們可以直接使用ServletActionContext類的getRequest、 * getResponse方法來獲得HttpServletRequest、HttpServletResponse對象。 */ HttpServletResponse response = ServletActionContext.getResponse(); HttpServletRequest request = ServletActionContext.getRequest(); HttpSession session = request.getSession(); response.getWriter().write("hello world"); } }