【方法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框架会在执行execute方法前自动将HttpServletResponse对象注入到Action类的成员变量中。例如: ```java public class MyAction extends ActionSupport implements ServletResponseAware { ...
### Struts2教程:获得HttpServletResponse对象 在深入探讨如何在Struts2框架中获取`HttpServletResponse`对象之前,我们先来简要回顾一下Struts2框架的基本概念及其与传统Struts1.x的区别。 #### Struts2框架简介...
在Action中,可以直接调用`ServletActionContext.getRequest()`、`ServletActionContext.getResponse()`、`ServletActionContext.getRequest().getSession()`等方法来获取这些对象。 #### 示例代码: ```java ...
struts2学习教程包括:第一个Struts2程序,处理一个form多个submit,struts.xml常用配置解析,使用validate方法验证数据,使用Validation框架验证数据,在Action类中获得HttpServletResponse对象的四种方法,上传...
3. **实现ServletAware接口**:为了进一步解耦,Struts2允许开发者通过实现ServletRequestAware或ServletResponseAware接口,让Action类自动注入HttpServletRequest和HttpServletResponse对象。这样,无需在Action类...
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,...
在Struts2中,Action类是业务逻辑的核心,它负责处理来自客户端(通常是一个JSP页面)的请求,并返回响应。本文将详细讨论如何在Struts2的Action中获取JSP页面的参数,以及相关的上下文类ActionContext和...
值得注意的是,在Struts2中,Action类并不一定需要实现`Action`接口,只要包含一个名为`execute`的方法即可。 #### 2. 线程模式的对比 - **Struts1**:Action类遵循单例模式,这意味着在整个应用生命周期内,每个...
在本实例中,Action类为UserAction,它继承自ActionSupport,这意味着它已经具备了基本的Action功能,同时还可以获得ActionSupport提供的各种工具方法,例如国际化、输入校验等。 在UserAction类中定义了几个方法,...
在`intercept()`方法中,可以访问`Invocation`对象,它包含了`ActionContext`,进而可以获取`ServletResponse`。 ```java import com.opensymphony.xwork2.interceptor.Interceptor; import ...
Struts1和Struts2是Java Web开发中两种流行的MVC框架,它们在设计和功能上有许多不同之处。以下是对这两个框架异同点的详细解释: 1. **Action类**: - **Struts1**:要求Action类继承一个抽象基类,如`Action`或`...
怎样在方法里面得到Request,或者Session? 在控制器方法中,可以直接通过参数注入`HttpServletRequest`或`HttpSession`对象。 ```java public String handleRequest(HttpServletRequest request, HttpSession ...
在 Servlet 中,有两种跳转方法:RequestDispatcher.forward() 方法和 HttpServletResponse.sendRedirect() 方法。 RequestDispatcher.forward() 方法仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出...
1. **HttpServletRequest对象**:在Struts2中,我们可以从Action上下文(`ActionContext`)获取到`ServletActionContext`,然后通过`ServletActionContext.getRequest()`方法获得`HttpServletRequest`对象。...
首先数据表中的Blob字段在Java领域对象中声明为byte[]类型,而非java.sql.Blob类型。 2.数据表Blob字段在Hibernate持久化映射文件中的type为org.springframework.orm.hibernate3.support.BlobByteArrayType,即...
随着版本的演进,Spring 2.0 引入了定制命名空间功能以减少XML配置文件的数量,这一特性在后续版本中得到了广泛应用。到了Spring 2.5,框架进一步推出了完整的注解集,旨在替代原有的基于XML的配置方式。 #### 二、...
- Struts1的Action通常需要直接处理HTTPServletRequest和HTTPServletResponse对象,这增加了代码的耦合性。 - Action的生命周期由容器管理,且执行方法为`execute()`。 - 测试Struts1的Action时,通常需要模拟...
在`YourServlet`类中,我们需要重写`doPost`方法,这是处理POST请求的地方。`HttpServletRequest`对象用于获取请求参数,而`HttpServletResponse`对象用于向客户端发送响应。 ```java @Override protected void...