在
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");
从这四种方法来看,最后一种是最简单的,读者可以根据自己的需要和要求来选择使用哪一种方法来获得这些对象
相关推荐
2、使用struts2提供的ActionContext类直接获取Servlet API。 在同一个项目中,如果既用到servlet又用了struts框架,运行项目时可能无法正常使用servlet,解决办法如下: 该类是定义了一个过滤器,当既用到struts2...
Struts2属性文件详解 struts.configuration 该属性指定加载Struts 2配置文件的配置文件管理器.该属性的默认值是org.apache.Struts2.config.DefaultConfiguration, 这是Struts 2默认的配置文件管理器.如果需要实现...
在Web应用程序开发中,除了将请求参数自动设置到Action的字段中,我们往往也需要在Action里直接获取请求(Request)或会话 (Session)的一些信息, 甚至需要直接对JavaServlet Http的请求(HttpServletRequest),响应...
Struts原理、开发及项目实施 Holen 2002-9-12 <br/>1、 摘要 2、 关键词 3、 Framework 4、 Struts的起源 5、 Struts工作原理 6、 Struts安装 7、 一个实例 8、 Struts优缺点...
提供典型应用案例,剖析JSP/Servret技术与Struts 2技术在Web开发中的不同 提供完整的应用案例,使读者可以深入体会SSH开发模式的精髓 所有开发工具和框架均使用目前的最新版本,紧跟技术发展的趋势 提供230个实例和4...
提供典型应用案例,剖析JSP/Servret技术与Struts 2技术在Web开发中的不同 提供完整的应用案例,使读者可以深入体会SSH开发模式的精髓 所有开发工具和框架均使用目前的最新版本,紧跟技术发展的趋势 提供230个实例...
Struts+Spring+Hibernate实现上传下载 本文将围绕SSH文件上传下载的主题,向您详细讲述如何开发基于SSH的Web程序。SSH各框架的均为当前最新版本: •Struts 1.2 •Spring 1.2.5 •Hibernate 3.0 本文...
HttpServletRequest request, HttpServletResponse response) { //若提交页面有提交信息,则用listForm获取进行数据库查询 //ListForm listForm = (ListForm) form;// TODO Auto-generated method stub ...
import org.apache.struts.action.*; import org.apache.struts.upload.*; public class FileActionForm extends ActionForm { private String fileName;//上传文件的名称 private String fileSize;//上传文件的...
2.介绍 17 2.1什么是Spring Security? 17 2.2历史 19 2.3版本编号 20 2.4获得Spring安全 21 2.4.1使用Maven 21 Maven仓库 21 Spring框架 22 2.4.2 Gradle 23 Gradle存储库 23 使用Spring 4.0.x和Gradle 24 2.4.3...
size:获取序列中元素的个数 下面是数字值的常用内建函数 int:取得数字的整数部分,结果带符号 例如: ${test?html} ${test?upper_case?html} 结果是:Tom & Jerry TOM & JERRY 1.10 空值处理运算符 ...
redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。 23、EJB与JAVA BEAN的区别? Java Bean 是可...
redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。 20、EJB与JAVA BEAN的区别? Java Bean 是可复用...