`

在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();
	}

}

 

分享到:
评论

相关推荐

    struts2学习教程

    struts2学习教程包括:第一个Struts2程序,处理一个form多个submit,struts.xml常用配置解析,使用validate方法验证数据,使用Validation框架验证数据,在Action类中获得HttpServletResponse对象的四种方法,上传...

    超级有影响力霸气的Java面试题大全文档

     声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,...

    java 面试题 总结

    声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其...

    ssh(structs,spring,hibernate)框架中的上传下载

    首先数据表中的Blob字段在Java领域对象中声明为byte[]类型,而非java.sql.Blob类型。  2.数据表Blob字段在Hibernate持久化映射文件中的type为org.springframework.orm.hibernate3.support.BlobByteArrayType,即...

    java 编写文件上传类简单易用

    这种编码的具体规则可以在 rfc2231 里查到, 通常使用的表单也是采用这种方式编码的,Servlet 的 API 提供了对这种 编码方式解码的支持,只需要调用 ServletRequest 类中的方法就可以得到 用户表单中的字段和数据。...

    JSF文件下载实现

    1、在backing bean的方法中调用函数1即可。如Abean中download方法调用了该方法,前台可以这样调用: &lt;h:commandButton value="download" action="#{aBean.download}"&gt; 或者 &lt;h:commandLink value="download" ...

    Struts原理、开发及项目实施

    即把HTTP request 封装在一个对象中,需要说明的一点就是多个HTTP request可以共用一个FormBean,便于维护和重用。 &lt;br/&gt;ActionBean:RegUserAction &lt;br/&gt; package org.cjea.Struts.example; &lt;br/&gt;...

    jsp编写的网上书店

    * 在此方法中处理HTTP请求数据,并作响应 */ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { ...

    freemarker总结

    该指令用于导入FreeMarker模板中的所有变量,并将该变量放置在指定的Map对象中,import指令的语法格式如下: 上面的代码将导入/lib/common.ftl模板文件中的所有变量,将这些变量放置在一个名为com的Map对象中. 创建...

    strust文件上传

    //得到是字节数,即byte,我们可以直接用file.getFileSize(),也可以在创建读取对象时用streamIn.available(); // int ok=streamIn.available(); int ok=file.getFileSize(); String strFee = null; //这个地方...

    springmybatis

    MyBatis 目录(?)[-] mybatis实战教程mybatis in action之一开发环境搭建 mybatis实战教程mybatis in action之二以接口的方式编程 mybatis实战教程mybatis in action之...在 IUserOperation 接口中增加方法:public List...

    Apache Commons fileUpload实现文件上传

    最简单的例子,通过ServletFileUpload静态类来解析Request,工厂类FileItemFactory会对mulipart类的表单中的所有字段进行处理,不只是file字段。getName()得到文件名,getString()得到表单数据内容,isFormField...

Global site tag (gtag.js) - Google Analytics