public String execute(){
ActionContext ac = ActionContext.getContext();
Map paramMap = ac.getParameters();
String[] ids = (String[]) paramMap.get("id");
String[] names = (String[]) paramMap.get("name");
Map sessionMap = ac.getSession();
sessionMap.put("id", ids[0]);
sessionMap.put("name", names[0]);
return "toSession";
}
在struts1中访问HttpServletResponse,HttpServletRequest
等对象是通过execute方法的参数得到,这样Action类就依赖了Servlet API
,在struts2中Action类的execute方法参数是空的 并且可以不继承任何类 实现任何接口 那么Action如何访问Servlet呢?
在struts2中提供了两种方式:1、提供ActionContext类访问Servlet对象 2、通过IOC由从容器注入
下面来一一说明 做个总结
一、通过ActionContext类访问Servlet对象分为两种方式
1、ActionContext类位于com.opensymphony.xwork2中提供一系列相关方法用于访问保存在
ServletContext、HttpSession、HttpServletRequest中的信息,并且存储在Map中。在
ActionContext类中定义了一个静态方法public static ActionContext
getContext()用于获取自己的一个实例,不能new此类的对象!
常用的方法:
public static ActionContext getContext() |
获得ActionContext 对象 |
public Map getParameters() |
从请求对象(HttpServletRequest)中获取请求参数 |
public Map getApplication() |
获取ServletContext中保存的Attribute |
public Map getSession() |
获取HttpSession中保存的Attribute |
下面演示如何得到request中的参数 并放在session中
注:通过getParameters()方法获取到的请求参数类型都是String[],必须根据实际情况取值。如果只有一个值的话,取出数组中第0个元素即可。
2、由于ActionContext是webwork定义的类,struts2定义了一个新类org.apache.struts2.
ServletActionContext,该类继承自ActionContext
,ServletActionContext类和ActionContext相比扩展了更多的方法,主要是一些静态方法。读者可查看源代码
下面演示下如何使用ServletActionContext获得request的参数 并放在session中
public String execute(){
String id = ServletActionContext.getRequest().getParameter("id");
String name = ServletActionContext.getRequest().getParameter("name");
Map sessionMap = ServletActionContext.getContext().getSession();
sessionMap.put("id", id);
sessionMap.put("name", name);
System.out.println("id=" + sessionMap.get("id"));
System.out.println("name=" + sessionMap.get("name"));
return "toSession";
}
在使用ServletActionContext的时候返回的对象直接就是HttpServletResponse,HttpServletRequest 和前一种方式是有所区别的!
二、通过IOC访问Servlet对象
在Struts2中,可以通过IOC(依赖注入)将Servlet对象注入到Action中,这一切都是由一组接口决定的,这一组接口有一个共同点,名称都由Aware结尾。以下是这些接口的解释说明:
接口定义
|
作用
|
public
interface
ApplicationAware {
public
void
setApplication(Map application);
}
|
以Map类型向Action注入保存在ServletContext中的Attribute集合。 |
public
interface
SessionAware {
public
void
setSession(Map session);
}
|
以Map类型向Action注入保存在HttpSession中的Attribute集合。 |
public
interface
ServletResponseAware {
public
void
setServletResponse(HttpServletResponse response);
}
|
向Action中注入HttpServletResponse对象 |
public
interface
ServletRequestAware {
public
void
setServletRequest(HttpServletRequest request);
}
|
向Action中注入HttpServletRequest对象 |
public
interface
RequestAware {
public
void
setRequest(Map request);
}
|
以Map类型向Action注入保存在HttpServletRequest中的Attribute集合。 |
public
interface
CookiesAware {
void
setCookiesMap(Map cookies);
}
|
以Map类型向Action注入Cookie中的数据集合。 |
public
interface
ParameterAware {
public
void
setParameters(Map parameters);
}
|
向Action中注入请求参数集合。 |
只要让Action实现这些接口就可以了,Struts2会自动将数据及对象注入Action
public class ServletAction2 implements
CookiesAware,ParameterAware, RequestAware,
SessionAware, ServletRequestAware,
ServletResponseAware, ApplicationAware {
private Map sessionMap;
private HttpServletRequest request;
private HttpServletResponse response;
private Map applicationMap;
//只是定义,代码中没有使用,起演示说明作用
private Map cookieMap;
//只是定义,代码中没有使用,起演示说明作用
private Map requestMap;
//只是定义,代码中没有使用,起演示说明作用
private Map parameterMap;
//只是定义,代码中没有使用,起演示说明作用
//省略生成以上类成员变量的setter getter方法
public String execute(){
String id = this.request.getParameter("id");
String name = this.request.getParameter("name");
sessionMap.put("id", id);
sessionMap.put("name", name);
return "toSession";
}
}
分享到:
相关推荐
本文将深入探讨如何在Struts2中访问Servlet API。 首先,理解Struts2的执行流程至关重要。当一个请求到达服务器时,Struts2的过滤器(通常名为`FilterDispatcher`或`StrutsPrepareAndExecuteFilter`)会捕获这个...
在“Struts2直接访问Servlet API(二十五)”这个主题中,我们可能探讨的是如何在Struts2框架下直接利用Servlet API来实现某些特定功能或者优化性能。Servlet API是Java Web开发的基础,它提供了处理HTTP请求和响应...
Struts2 访问 Servlet API 方法总结 Struts2 框架提供了多种方式来访问 Servlet API,包括使用 ActionContext 类、实现接口和使用 ServletActionContext 类等。在本文中,我们将详细介绍 Struts2 访问 Servlet API ...
详解Struts2中Action访问Servlet API的几种方法 在通常的web开发中Request和Response对象比较常见,但在Struts2框架中由于Action能与JSP页面进行数据交互,所以通常都不会用到这两个对象。如果想在Struts2程序中用到...
Struts2中的`ActionServlet`就是对Servlet API的一种扩展,它作为整个框架的调度中心,负责接收请求、调用Action并返回相应的结果。 在Struts2中,Servlet API主要体现在以下几点: 1. **过滤器(Filter)**:...
在Struts2框架中,直接和间接访问Servlet API以及动态方法调用是两个关键概念,它们对理解和优化应用性能至关重要。 首先,让我们深入理解直接访问Servlet API。在传统的MVC模式中,Servlet扮演着控制器的角色,...
在本教程和API文档中,我们将深入理解Struts2的核心概念、功能以及与之相关的Servlet API。 首先,"MAX的struts2教程"提供了全面的Struts2学习指南,帮助初学者快速上手。这个教程可能涵盖以下内容: 1. **基础...
总的来说,Struts2 Action包的命名空间和Servlet API的结合使用,使得开发者能够灵活控制请求的处理流程,通过拦截器实现通用功能,同时利用视图组件创建丰富的用户界面。通过对框架核心类的了解,可以更深入地掌握...
在"Struts2 part 3:在Action中使用ServletAPI"这一主题中,我们将深入探讨如何在Struts2的动作类(Action)中集成和利用Servlet API来增强应用的功能。 Servlet API是Java Servlet规范的一部分,它提供了一系列...
这个压缩包“strut2 servletapi”显然包含了使用Struts2框架访问Servlet API的示例代码。Servlet API是Java Servlet规范的一部分,提供了一系列接口和类,允许开发者处理HTTP请求、响应以及与Web服务器交互。 在...
综上所述,Struts2提供了多种方式来与Servlet API交互,同时通过适当的过滤器配置,可以确保在Struts2框架下,直接编写的Servlet也能正常工作。理解和掌握这些配置技巧对于开发和维护Struts2应用至关重要。
在Struts2中,我们通常会在Action类中处理这个逻辑,而在Servlet中,这将在doGet或doPost方法内完成。 现在,我们来看案例中的两个DEMO——JqUploadTest和CosUpload。JqUploadTest可能是指使用jQuery的Upload插件...
综上所述,本案例“Struts2之Servlet文件上传详解”将引导你了解如何结合Struts2和Servlet实现文件上传功能,包括配置、Action编写、JSP页面设计以及注意事项。通过实践,你将更深入地理解Struts2框架在处理复杂Web...
Struts是一种基于MVC(Model-View-Controller)设计模式的开源框架,而Servlet则是Java标准库中用于处理HTTP请求的API。 Servlet是Java EE平台的核心组成部分,它提供了一种服务器端编程模型,可以接收和响应来自...
在提供的资源中,"Struts2.chm"可能是Struts2的API参考手册,包含了框架的所有类和接口的详细信息,对于理解和使用Struts2非常有帮助。"Struts1.3.chm"可能是针对Struts1.3版本的API文档,同样可以帮助开发者深入...
在Servlet中,我们可以使用Java的反射API来创建Action的代理类。当请求到达时,根据解析的XML配置,找到对应的Action并调用代理执行目标方法。 4. **日志拦截**:类似于Struts2的拦截器,我们可以创建一个Servlet ...
在Struts2中,用户请求首先会被Struts2的ActionServlet拦截,然后通过配置的Action映射找到对应的Action类来处理请求。Action执行完成后,返回一个Result,该Result定义了如何展示结果,可能是跳转到一个新的JSP页面...
这些jar包可能包括Struts2的核心库、额外的插件库以及其他依赖库,如Servlet API、Commons Logging等。 通过阅读Struts2.3.4 API文档,开发者可以了解到每个类、接口、方法的详细说明,包括参数类型、返回值、异常...