Struts2中獲取HttpServletRequest,HttpSession等的幾種方式


轉自: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");
	}
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM