- 浏览: 683525 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (198)
- 编程经验 (12)
- 移动端 (2)
- linux (1)
- 基础理论 (10)
- 开发工具 (8)
- 开发语言_java (21)
- 开源框架_Axis2 (8)
- GIS开发_OpenLayers (9)
- GIS开发_ArcGIS (6)
- GIS开发_googleAPI (4)
- GIS开发_AO (2)
- Web前端_Javascript (7)
- Web前端_CSSDIV (2)
- Web前端_WebGL (5)
- Web前端_HTML5 (1)
- 数据库 (17)
- 项目管理 (6)
- REST服务_Restlet (0)
- REST服务_RestEasy (5)
- 连接池 (6)
- 框架组合_SSI (7)
- 框架组合_SSH (37)
- 异常处理 (10)
- 测试 (1)
- ASP/ASP.NET (3)
- 我所遇到的JavaScript (1)
- cas (1)
- CI (1)
- nginx (1)
- 大数据 (1)
- maven (1)
- 机器学习 (0)
最新评论
-
章元o:
正解,问题解决了,要换tomcat的
webservice开发时项目启动过程中出现版本问题 -
dcloud:
大师,按照你的指点进行初始化工作,但是在connection. ...
AO连接sde出现java.lang.UnsatisfiedLinkError: no ntvauth in java.library.path -
yiran0314:
您好 关于这个问题能描述得更详细一点吗?
CXF异常处理 -
tianhandigeng:
找了半个小时了也没小号到m2e最新的地址,既然这个都让你找得这 ...
Myeclipse8.6安装Maven插件------ -
wxb880114:
这个发的比较早了,现在在myeclipse中有自带的,ecli ...
Myeclipse8.6安装Maven插件------
在struts1.x Action类的execute方法中,有四个参数,其中两个就是response和request。而在Struts2中,并没有任何参数,因此,就不能简单地从execute方法获得HttpServletResponse或HttpServletRequest对象了。
但在Struts2 Action类中仍然有很多方法可以获得这些对象。下面就列出四种获得这些对象的方法。
【方法1】使用Struts2 Aware拦截器
这种方法需要Action类实现相应的拦截器接口。如我们要获得HttpServletResponse对象,需要实现org.apache.struts2.interceptor.ServletResponseAware接口,代码如下:
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及其他的一些信息。代码如下所示:
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类中仍然有很多方法可以获得这些对象。下面就列出四种获得这些对象的方法。
【方法1】使用Struts2 Aware拦截器
这种方法需要Action类实现相应的拦截器接口。如我们要获得HttpServletResponse对象,需要实现org.apache.struts2.interceptor.ServletResponseAware接口,代码如下:
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及其他的一些信息。代码如下所示:
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");
从这四种方法来看,最后一种是最简单的,读者可以根据自己的需要和要求来选择使用哪一种方法来获得这些对象。
发表评论
-
java.lang.NullPointerException at org.apache.jsp.index_jsp._jspInit(index_jsp.ja
2014-06-15 21:54 1040java.lang.NullPointerException ... -
Spring处理id相同的bean
2013-05-22 09:34 12761、在spring同一个配置文件中,不能存在id相同的两个be ... -
Spring AOP之ThrowsAdvice
2013-02-26 15:41 1143目前的项目中接触了一 ... -
普通Java类获取Spring的ApplicationContext(转载)
2013-02-25 10:20 1912普通Java类获取Spring的App ... -
Spring AOP使用过程中出现PointCut is not well-formed
2013-02-20 13:53 9303Exception in thread "main& ... -
ApplicationContext创建:FileSystemXmlApplicationContext(String)
2013-02-20 13:13 1522ApplicationContext提供了三种方式实现: 1. ... -
JPA与Hibernate的优缺点
2013-01-17 09:49 1605JPA与Hibernate的优缺点 2009-06-19 18 ... -
JDBC与Hibernate比较(转载)
2013-01-14 09:57 800刚开始学习JAVA时,认为 ... -
Hibernate连接池配置问题
2013-01-08 09:47 9261.连接池的概述 我 ... -
[转]Hibernate VS iBATIS比较
2012-12-20 10:54 1626项目也做过几个, 使用IB ... -
(转载)hibernate 的保存方法的区别
2012-12-19 16:57 741hibernate 的保存方法的区别---引用来自http:/ ... -
Configuration problem: Unable to locate Spring NamespaceHandler for XML schema
2012-12-14 13:31 1152严重: Exception sending context i ... -
Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from tr
2012-12-14 11:47 1002org.springframework.dao.Invalid ... -
HIbernate连接ORACLE数据库时,出现connot open Connection问题
2012-12-06 16:46 2113HIbernate连接ORACLE数据库时,出现connot ... -
This is usually caused by using Struts tags without the associated filter.
2012-11-30 09:59 1119严重: Servlet.service() for servl ... -
Spring异常汇总
2012-11-28 14:29 1005java.lang.IllegalStateException ... -
严重: Exception starting filter hibernateFilter
2012-11-27 11:41 1741严重: Exception starting filter h ... -
struts1.2中ActionForm和ServletFileUpload.parseRequest(request)不能同时使用
2012-07-24 11:02 1043struts1.2中ActionForm和ServletFil ... -
Uploadify在Struts2中的应用
2012-07-24 09:25 1342Uploadify在Struts2中的应用 步骤一: 到 ... -
用Hibernate建表时出现语句输出,但表未建成功。
2012-07-21 21:03 1197用Hibernate建表时出现语句输出,但表未建成功。 仔细查 ...
相关推荐
- **Struts2的数据传递**:在Struts2中,表单数据不是通过ActionForm对象传递给Action的,而是直接绑定到Action类的属性上。这种方式简化了数据传递的过程,并且提供了更好的灵活性。 #### 6. 类型转换技术及其配置...
4. **请求与响应对象**:了解HttpServletRequest和HttpServletResponse对象,以及它们提供的各种方法,如获取请求参数、设置响应头等。 5. **会话管理**:掌握如何使用HttpSession对象进行会话跟踪。 6. **过滤器**...
### servlet和struts2笔记 #### 一、Servlet 基础 **Servlet** 是 Java Web 开发中的一种核心技术,它被设计用于处理客户端发送到服务器的 HTTP 请求,并且能够生成响应。Servlet 可以看作是服务器端的小程序,...
3. **模型绑定**:Struts2支持数据绑定,可以通过ActionContext将请求参数自动绑定到Action的属性上,简化了数据获取的过程。 4. **结果转发**:Action执行后,根据返回的结果代码,Struts2会决定如何响应客户端。...
### servlet与Struts2知识点梳理 #### 一、Servlet基础概念及实现方式 - **Servlet定义**:Servlet是一种运行在服务器端的小程序,用于处理客户端发送的HTTP请求,并生成相应的HTTP响应。它属于动态资源,可以被多...
2. `getModuleConfig()`获取封装了请求的`ModuleConfig`对象。 3. 根据`ModuleConfig`获取Action处理类的实例,并调用其`process()`方法。 在`process()`方法内部: 1. `processPath()`解析请求的URI路径,用于...
2. initModuleConfig():随后,通过配置工厂实例化一个ModuleConfig对象。这个工厂方法实际执行了创建ModuleConfig对象的操作,创建的ModuleConfig对象类型取决于工厂的配置。 3. createModuleConfig()方法:负责...
解析完成后,会获取到相应的ActionMapping对象,ActionMapping对象包含了与Action相关的所有信息。 - **processActionForm()方法**:该方法用于验证ActionForm表单数据的有效性。如果ActionForm已经被配置,则会...
在Struts框架中,View层通过Action对象获取数据,并将其呈现给用户。 #### 三、Struts框架的工作流程 1. **用户发起请求**:用户通过浏览器向服务器发送HTTP请求。 2. **ActionServlet接收请求**:服务器接收到...
`ActionServlet`是Struts框架的核心组件之一,继承自`HttpServlet`,负责接收客户端请求,解析请求并调用相应的Action来处理请求。在处理过程中,`ActionServlet`会执行以下任务: - 查找并解析URL。 - 映射URL至...
Struts1是一个经典的Java Web开发框架,主要用于构建MVC(Model-...虽然现在Struts1已经被更新的Struts2和其他现代框架如Spring MVC取代,但其基本原理和设计模式对于理解Web应用的架构设计仍然具有重要的参考价值。
`ActionServlet`是Struts框架的核心控制器,它继承自`javax.servlet.http.HttpServlet`,负责处理客户端发送的HTTP请求,并将请求分发到相应的`Action`类进行处理。`ActionServlet`的主要职责包括: - **初始化**:...
3. **ActionServlet**:ActionServlet是Struts的控制器,继承自HttpServlet,负责处理所有的HTTP请求。在web.xml中配置ActionServlet,它会解析请求,调度Action,管理和维护应用程序的状态。 **Spring框架** ...
Struts框架的核心是`ActionServlet`,它继承自`HttpServlet`,并充当控制器的角色。`ActionServlet`负责接收客户端请求,解析请求参数,并决定调用哪个业务逻辑处理类(Action)。这一过程中,Struts框架通过配置...
2. 根据`ActionMapping`创建或找到相应的`ActionForm`实例,`ActionForm`用于存储从客户端请求中获取的数据。 3. 如果在`ActionMapping`中定义了`Action`类,那么`ActionServlet`会实例化该`Action`类,并调用其`...
ActionForm实现了`org.apache.struts.action.ActionForm`接口,提供了一系列的getter和setter方法来获取和设置表单字段的值。 - **示例**: ```xml ``` 上述配置指定了名为`LoginForm`的ActionForm类型为`...
`ActionServlet`是Struts框架的核心控制器,继承自`HttpServlet`类。它处理所有的HTTP请求,并负责调度到相应的Action实例进行处理。 ###### 1.4.1 ActionServlet配置 在`web.xml`文件中,需要配置`ActionServlet`...
2. **配置文件定义**:另一种方式是在Struts的配置文件中定义`<forward>`元素,预先设置好可能的流程分支。这种方式更为灵活,可以在不修改代码的情况下调整流程逻辑。在Action的`execute()`方法中,通过调用`...