`

在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在Action中获得Response对象的四种方法

    通过这个接口,Struts2框架会在执行execute方法前自动将HttpServletResponse对象注入到Action类的成员变量中。例如: ```java public class MyAction extends ActionSupport implements ServletResponseAware { ...

    Struts2教程:获得HttpServletResponse对象

    ### Struts2教程:获得HttpServletResponse对象 在深入探讨如何在Struts2框架中获取`HttpServletResponse`对象之前,我们先来简要回顾一下Struts2框架的基本概念及其与传统Struts1.x的区别。 #### Struts2框架简介...

    Struts2的Action中获得request response session几种方法

    在Action中,可以直接调用`ServletActionContext.getRequest()`、`ServletActionContext.getResponse()`、`ServletActionContext.getRequest().getSession()`等方法来获取这些对象。 #### 示例代码: ```java ...

    struts2学习教程

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

    struts2的API耦合与动态方法调用

    3. **实现ServletAware接口**:为了进一步解耦,Struts2允许开发者通过实现ServletRequestAware或ServletResponseAware接口,让Action类自动注入HttpServletRequest和HttpServletResponse对象。这样,无需在Action类...

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

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

    struts2中action如何获取jsp页面参数1.pdf

    在Struts2中,Action类是业务逻辑的核心,它负责处理来自客户端(通常是一个JSP页面)的请求,并返回响应。本文将详细讨论如何在Struts2的Action中获取JSP页面的参数,以及相关的上下文类ActionContext和...

    Struts1与Struts2的12点区别

    值得注意的是,在Struts2中,Action类并不一定需要实现`Action`接口,只要包含一个名为`execute`的方法即可。 #### 2. 线程模式的对比 - **Struts1**:Action类遵循单例模式,这意味着在整个应用生命周期内,每个...

    在Action中以Struts2的方式输出JSON数据的实例

    在本实例中,Action类为UserAction,它继承自ActionSupport,这意味着它已经具备了基本的Action功能,同时还可以获得ActionSupport提供的各种工具方法,例如国际化、输入校验等。 在UserAction类中定义了几个方法,...

    struts2获取response的方法

    在`intercept()`方法中,可以访问`Invocation`对象,它包含了`ActionContext`,进而可以获取`ServletResponse`。 ```java import com.opensymphony.xwork2.interceptor.Interceptor; import ...

    struts1与struct2的不同

    Struts1和Struts2是Java Web开发中两种流行的MVC框架,它们在设计和功能上有许多不同之处。以下是对这两个框架异同点的详细解释: 1. **Action类**: - **Struts1**:要求Action类继承一个抽象基类,如`Action`或`...

    Spring MVC面试题(2022最新版)

    怎样在方法里面得到Request,或者Session? 在控制器方法中,可以直接通过参数注入`HttpServletRequest`或`HttpSession`对象。 ```java public String handleRequest(HttpServletRequest request, HttpSession ...

    servlet和JSP面试题答案.pdf

    在 Servlet 中,有两种跳转方法:RequestDispatcher.forward() 方法和 HttpServletResponse.sendRedirect() 方法。 RequestDispatcher.forward() 方法仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出...

    strut2 servletapi

    1. **HttpServletRequest对象**:在Struts2中,我们可以从Action上下文(`ActionContext`)获取到`ServletActionContext`,然后通过`ServletActionContext.getRequest()`方法获得`HttpServletRequest`对象。...

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

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

    spring3 mvc 注解action dao service 实例教程

    随着版本的演进,Spring 2.0 引入了定制命名空间功能以减少XML配置文件的数量,这一特性在后续版本中得到了广泛应用。到了Spring 2.5,框架进一步推出了完整的注解集,旨在替代原有的基于XML的配置方式。 #### 二、...

    struts1和struts2的对比

    - Struts1的Action通常需要直接处理HTTPServletRequest和HTTPServletResponse对象,这增加了代码的耦合性。 - Action的生命周期由容器管理,且执行方法为`execute()`。 - 测试Struts1的Action时,通常需要模拟...

    用Servlet获得界面中用户填写的信息

    在`YourServlet`类中,我们需要重写`doPost`方法,这是处理POST请求的地方。`HttpServletRequest`对象用于获取请求参数,而`HttpServletResponse`对象用于向客户端发送响应。 ```java @Override protected void...

Global site tag (gtag.js) - Google Analytics