javaEE Struts2, ActionContext类, Action类获取Servlet原生API(域对象)的方式

后两种方式在底层也是通过第一种方式(ActionContext)实现的。

Demo1Action.java(方式一:通过ActionContext获取,常用):

package cn.xxx.demo;

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

//如何在Action中获得原生Servlet的API
public class Demo1Action extends ActionSupport {

	public String execute() throws Exception {
		
		// 获取request域对象 => map (struts2并不推荐使用原生request域)(不推荐)
		Map<String, Object> requestScope = (Map<String, Object>) ActionContext.getContext().get("request");
		// 推荐 (ActionContext也是一个域对象,且和request域对象生命周期相同;因此推荐使用ActionContext域代替request域对象)
		ActionContext.getContext().put("name", "requestTom"); // 域对象 => Map类型。 el表达式 获取值${requestScope.name} (和从request域中获取方式一样)。
		
		// 获取session域对象 => map
		Map<String, Object> sessionScope = ActionContext.getContext().getSession();
		sessionScope.put("name", "sessionTom");
		
		// 获取application域对象 => map
		Map<String, Object> applicationScope = ActionContext.getContext().getApplication();
		applicationScope.put("name", "applicationTom");
		
		return SUCCESS;
	}

}

Demo2Action.java(方式二:通过ServletActionContext获取):

package cn.xxx.demo;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

//如何在Action中获得原生Servlet的API
public class Demo2Action extends ActionSupport {
	//并不推荐(Action和Servlet API耦合严重)
	public String execute() throws Exception {
		// 获取原生request对象
		HttpServletRequest request = ServletActionContext.getRequest();
		// 获取原生session
		HttpSession session = request.getSession();
		// 获取原生response
		HttpServletResponse response = ServletActionContext.getResponse();
		// 获取原生servletContext
		ServletContext servletContext = ServletActionContext.getServletContext();
		return SUCCESS;
	}

}

Demo3Action.java(方式三:通过特定接口获取):

package cn.xxx.demo;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionSupport;

//如何在Action中获得原生Servlet的API
public class Demo3Action extends ActionSupport implements ServletRequestAware,ServletResponseAware,SessionAware,ApplicationAware {
	
	
	private HttpServletRequest request;
	private HttpServletResponse response;

	public String execute() throws Exception { 
		
		System.out.println("原生request:"+request);
		return SUCCESS;
	}

	@Override
	public void setServletRequest(HttpServletRequest request) {
		this.request = request;
	}

	@Override
	public void setServletResponse(HttpServletResponse response) {
		this.response = response;
		
	}
	
	@Override
	public void setApplication(Map<String, Object> arg0) {
		// .....
	}

	@Override
	public void setSession(Map<String, Object> arg0) {
		// .....
	}
	
}

猜你喜欢

转载自blog.csdn.net/houyanhua1/article/details/81130108
今日推荐