在
struts1.x Action
类的
execute方法中,有四个参数,其中两个就是
response和
request。而在
Struts2中,并没有任何参数,因此,就不能简单地从
execute方法获得
HttpServletResponse或
HttpServletRequest对象了。
但在
Struts2 Action类中仍然有很多方法可以获得这些对象。下面就列出四种获得这些对象的方法。
【方法
1
】使用
Struts2 Aware
拦截器
这种方法需要
Action类实现相应的拦截器接口。如我们要获得
HttpServletResponse对象,需要实现
org.apache.struts2.interceptor.ServletResponseAware接口,
代码如下:
<!-- <br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->package
action;
import
com.opensymphony.xwork2.ActionSupport;
import
javax.servlet.http.
*
;
import
org.apache.struts2.interceptor.
*
;
public
class
MyAction
extends
ActionSupport
implements
ServletResponseAware
{
private
javax.servlet.http.HttpServletResponse response;
//
获得HttpServletResponse对象
public
void
setServletResponse(HttpServletResponse response)
{
this
.response
=
response;
}
public
String execute()
throws
Exception
{
response.getWriter().write(
"
实现ServletResponseAware接口
"
);
}
}
在上面的代码中,
MyAction实现了一个
ServletResponseAware接口,并且实现了
setServletResponse方法。如果一个动作类实现了
ServletResponseAware接口,
Struts2在调用
execute方法之前,就会先调用
setServletResponse方法,并将
response参数传入这个方法。如果想获得
HttpServletRequest、
HttpSession和
Cookie等对象,动作类可以分别实现
ServletRequestAware、
SessionAware和
CookiesAware等接口。这些接口都在
org.apache.struts2.interceptor包中。
如果要获得请求参数,动作类可以实现
org.apache.struts2.interceptor. ParameterAware
接口,但如果只想判断某个参数是否存在,也可以实现
com.opensymphony.xwork2.interceptor. ParameterNameAware接口。这个接口有一个
acceptableParameterName方法,当
Struts2获得一个请求参数时,就会调用一次。读者可以在这个方法中将所有的请求参数记录下来,以便以后使用。这个方法的定义如下:
boolean acceptableParameterName(String parameterName);
【方法
2
】使用
RequestAware
拦截器
这种方法和第
1种方法类似。动作类需要实现一个
org.apache.struts2.interceptor.RequestAware接口。所不同的是
RequestAware将获得一个
com.opensymphony.xwork2.util.OgnlValueStack对象,这个对象可以获得
response、
request及其他的一些信息。代码如下所示:
<!-- <br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->package
action;
import
java.util.Map;
import
org.apache.struts2.
*
;
import
com.opensymphony.xwork2.ActionSupport;
import
javax.servlet.http.
*
;
import
com.opensymphony.xwork2.util.
*
;
import
org.apache.struts2.interceptor.
*
;
public
class
FirstAction
extends
ActionSupport
implements
RequestAware
{
private
Map request;
private
HttpServletResponse response;
public
void
setRequest(Map request)
{
this
.request
=
request;
}
public
String execute()
throws
Exception
{
java.util.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 接口");
}
}
我们也可以使用
StrutsStatics.HTTP_REQUEST、
StrutsStatics.PAGE_CONTEXT来获得
HttpServletRequest和
PageContext对象。这种方法有些麻烦,一般很少用,读者可以作为一个参考。
【方法
3
】使用
ActionContext
类
这种方法比较简单,我们可以通过
org.apache.struts2.ActionContext
类的
get
方法获得相应的对象。代码如下:
HttpServletResponse response(HttpServletResponse) =
ActionContext.getContext().get(org.apache.struts2.StrutsStatics.HTTP_RESPONSE);
HttpServletRequest request(HttpServletRequest) =
ActionContext.getContext().get(org.apache.struts2.StrutsStatics.HTTP_REQUEST);
【方法
4
】使用
ServletActionContext
类
Struts2为我们提供了一种最简单的方法获得
HttpServletResponse及其他对象。这就是
org.apache.struts2.ServletActionContext类。我们可以直接使用
ServletActionContext类的
getRequest、
getResponse方法来获得
HttpServletRequest、
HttpServletResponse对象。代码如下:
HttpServletResponse response = ServletActionContext.getResponse()
response.getWriter().write("hello world");
从这四种方法来看,最后一种是最简单的,读者可以根据自己的需要和要求来选择使用哪一种方法来获得这些对象
相关推荐
在Struts2中,经常需要从Action类中获取请求(Request)和响应(Response)对象来处理用户请求和传递数据。本文将详细解释Struts2中获取Request对象的四种不同方式。 1. **Servlet不相关的非IoC取得Request等对象的...
在Struts2框架中,对request和session的管理和获取是实现Web应用中用户交互和状态维护的重要手段。本文将深入探讨Struts2中如何获取request和session,以及这两种对象的作用和应用场景。 ### Struts2框架简介 ...
以上就是在Struts2中获取`HttpServletRequest`对象的几种常见方法。选择哪种方法取决于你的具体需求,例如,如果你需要在拦截器中处理请求,那么使用Interceptor方法更合适;如果在Action中,可以根据项目规范和代码...
此外,Struts2还提供了Action上下文(ActionContext)作为便捷访问这些域的途径,通过`ActionContext.getContext()`获取当前请求的上下文对象,再从中获取所需的域对象。 在"struts2-web"这个压缩包文件中,可能...
本文将深入探讨如何在Struts2中正确地获取 `FIELDERROR` 内容,并对其进行自定义展示。 ### Struts2框架概述 Struts2是一个基于MVC模式的Java Web应用框架,它提供了丰富的功能来简化Web应用的开发过程。其中,...
为了使Action能够访问到HTTP请求(HttpServletRequest)、响应(HttpServletResponse)、会话(HttpSession)等关键对象,Struts2提供了多种获取这些对象的方法。以下将详细介绍如何在Struts2的Action中获取request...
而在Struts2中,Action类可以实现Action接口,也可以实现其他接口以获取自定义服务。更重要的是,Struts2允许任何带有execute方法的普通Java对象(POJO)作为Action,提供了更大的灵活性。 线程模型是另一个关键...
"Runtime"用于执行命令,"dispatcher"涉及Struts2请求处理,而"getRealPath"用于获取服务器上的实际路径。 为了绕过这些关键字,攻击者可以使用OGNL(Object-Graph Navigation Language),这是Struts2中用于表达和...
### Struts2属性文件详解 #### struts.configuration 该属性用于指定加载Struts 2配置文件的配置文件管理器,默认值为`org.apache.struts2.config.DefaultConfiguration`,这是Struts 2默认的配置文件管理器。若...
你可以在Action中将参数放入ActionContext,然后在结果页面中通过HttpServletRequest对象获取: ```java public String execute() { ActionContext context = ActionContext.getContext(); context.put("myParam...
#### 二、Struts2中request与response的获取方式 在Struts2中,可以通过以下几种方式来获取request和response对象: 1. **使用Struts2提供的拦截器:** - Struts2提供了一组内置的拦截器,包括`...
### Struts2配置过滤器详解 #### 一、概述 Struts2是基于MVC模式的一个开源框架,它能够帮助开发者构建出结构清晰且易于维护的Web应用。在实际开发过程中,为了实现某些功能(例如用户认证、权限控制等),往往...
2. **ServletActionContext类**:这是ActionContext的一个扩展,提供了更方便的访问Servlet相关对象的方法,如`ServletActionContext.getRequest()`和`ServletActionContext.getResponse()`分别用于获取...
Struts2提供了一个名为`ServletActionContext`的类,它包装了`HttpServletRequest`和`HttpServletResponse`对象。在Action中,你可以通过`ServletActionContext`获取这些对象,如: ```java HttpServletRequest ...
- **Struts 2**:使用更强大的OGNL(Object Graph Notation Language)表达式语言,支持复杂的数据结构操作,如遍历集合、获取嵌套属性等,大大提高了数据访问的灵活性和便利性。 #### 7. 绑定值到视图的对比 - **...
### Struts2框架知识点 #### Struts2框架概述 Struts2是一个开源的Web应用程序框架,基于MVC(Model-View-Controller)架构模式。它为Java Web开发者提供了一个强大的平台来构建高度可扩展的应用程序。Struts2的...
例如,要获取HttpServletRequest和HttpSession,可以这样做: ```java HttpServletRequest request = ServletActionContext.getRequest(); HttpSession session = ServletActionContext.getRequest().getSession();...
- **Struts2** 解耦了Action与Servlet容器,提供了更简单的测试支持,Action可以通过模拟对象独立测试,而不需要实际的HttpServletRequest和HttpServletResponse。 6. **测试能力** - **Struts1.x** 的测试通常...
Struts2是一个流行的Java web应用程序框架,用于构建MVC(模型-视图-控制器)架构的应用。它提供了许多内置功能,如国际化、异常处理、插件扩展等,以简化开发流程。在Struts2中,配置是至关重要的,因为它们定义了...