在Action类中获得HttpServletResponse对象的四种方法

【方法1】使用Struts2 Aware拦截器

这种方法需要Action类实现相应的拦截器接口。如我们要获得HttpServletResponse对象,需要实现org.apache.struts2.interceptor.ServletResponseAware接口,代码如下:

import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.interceptor.ServletResponseAware;
import com.opensymphony.xwork2.ActionSupport;


public class MyAction extends ActionSupport implements ServletResponseAware{
   private HttpServletResponse response;
   
   //获得HttpServletResponse对象
	public void setServletResponse(HttpServletResponse response) {
		this.response = response;
		
	}
	
	@Override
		public String execute() throws Exception {
		    response.getWriter().write("aaa");
			return super.execute();
		}
	

}

 方法2】使用RequestAware拦截器

这种方法和第1种方法类似。动作类需要实现一个org.apache.struts2.interceptor.RequestAware接口。所不同的 是RequestAware将获得一个com.opensymphony.xwork2.util.OgnlValueStack对象,这个对象可以获得 response、request及其他的一些信息。代码如下所示:

import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.StrutsStatics;
import org.apache.struts2.interceptor.RequestAware;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ognl.OgnlValueStack;

public class MyAction extends ActionSupport implements RequestAware {
	private HttpServletResponse response;
	private Map request;

	@Override
	public String execute() throws Exception {
		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 super.execute();
	}

	public void setRequest(Map<String, Object> request) {
		this.request = request;
	}

}

 【方法3】使用ActionContext类

这种方法比较简单,我们可以通过org.apache.struts2.ActionContext类的get方法获得相应的对象。代码如下:

import javax.servlet.http.HttpServletResponse;

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

public class MyAction extends ActionSupport {
	private HttpServletResponse response;

	public MyAction() {
		response = (HttpServletResponse) ActionContext.getContext().get(
				"response");
	}

	@Override
	public String execute() throws Exception {
		response.getWriter().write("ActionContext");
		return super.execute();
	}

}

 

【方法4】使用ServletActionContext类

Struts2为我们提供了一种最简单的方法获得HttpServletResponse及其他对象。这就是 org.apache.struts2.ServletActionContext类。我们可以直接使用ServletActionContext类的 getRequest、getResponse方法来获得HttpServletRequest、HttpServletResponse对象。这是最简单的一种方法。代码如 下:

import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class MyAction extends ActionSupport {
	private HttpServletResponse response;

	public MyAction() {
		response = ServletActionContext.getResponse();
	}

	@Override
	public String execute() throws Exception {
		response.getWriter().write("ServletActionContext");
		return super.execute();
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值