`
nbkangta
  • 浏览: 431721 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

Struts2的Action访问Servlet API

阅读更多
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";  

 }  

}

 
分享到:
评论
3 楼 新入职 2010-08-03  
有点不明白,比如说实现ServletRequestAware接口,不需要实现setServletRequest方法么~
2 楼 nbkangta 2009-02-25  
atian25 写道

非耦合方式似乎没办法得到getRequestURL等属性

确实,这些方法都是在ServletRequest当中的,必须要以来servlet api
也不知道为什么struts2 没有提供这些
1 楼 atian25 2009-02-25  
非耦合方式似乎没办法得到getRequestURL等属性

相关推荐

    Struts2访问ServletAPI

    本文将深入探讨如何在Struts2中访问Servlet API。 首先,理解Struts2的执行流程至关重要。当一个请求到达服务器时,Struts2的过滤器(通常名为`FilterDispatcher`或`StrutsPrepareAndExecuteFilter`)会捕获这个...

    Struts2 直接访问Servlet API(二十五)

    在“Struts2直接访问Servlet API(二十五)”这个主题中,我们可能探讨的是如何在Struts2框架下直接利用Servlet API来实现某些特定功能或者优化性能。Servlet API是Java Web开发的基础,它提供了处理HTTP请求和响应...

    struts2之Action访问Servlet API

    Struts2 访问 Servlet API 方法总结 Struts2 框架提供了多种方式来访问 Servlet API,包括使用 ActionContext 类、实现接口和使用 ServletActionContext 类等。在本文中,我们将详细介绍 Struts2 访问 Servlet API ...

    详解Struts2中Action访问Servlet API的几种方法

    详解Struts2中Action访问Servlet API的几种方法 在通常的web开发中Request和Response对象比较常见,但在Struts2框架中由于Action能与JSP页面进行数据交互,所以通常都不会用到这两个对象。如果想在Struts2程序中用到...

    Struts2之Servlet API及单元测试初识案例struts005

    Struts2中的`ActionServlet`就是对Servlet API的一种扩展,它作为整个框架的调度中心,负责接收请求、调用Action并返回相应的结果。 在Struts2中,Servlet API主要体现在以下几点: 1. **过滤器(Filter)**:...

    Struts2中直接和间接访问ServletAPI以及动态方法调用之感叹号

    在Struts2框架中,直接和间接访问Servlet API以及动态方法调用是两个关键概念,它们对理解和优化应用性能至关重要。 首先,让我们深入理解直接访问Servlet API。在传统的MVC模式中,Servlet扮演着控制器的角色,...

    MAX的struts2教程、struts2 API、servlet API

    在本教程和API文档中,我们将深入理解Struts2的核心概念、功能以及与之相关的Servlet API。 首先,"MAX的struts2教程"提供了全面的Struts2学习指南,帮助初学者快速上手。这个教程可能涵盖以下内容: 1. **基础...

    struts2 Action 包 命名空间 servlet API

    总的来说,Struts2 Action包的命名空间和Servlet API的结合使用,使得开发者能够灵活控制请求的处理流程,通过拦截器实现通用功能,同时利用视图组件创建丰富的用户界面。通过对框架核心类的了解,可以更深入地掌握...

    Struts2 part 3:在Action中使用ServletAPI

    在"Struts2 part 3:在Action中使用ServletAPI"这一主题中,我们将深入探讨如何在Struts2的动作类(Action)中集成和利用Servlet API来增强应用的功能。 Servlet API是Java Servlet规范的一部分,它提供了一系列...

    strut2 servletapi

    这个压缩包“strut2 servletapi”显然包含了使用Struts2框架访问Servlet API的示例代码。Servlet API是Java Servlet规范的一部分,提供了一系列接口和类,允许开发者处理HTTP请求、响应以及与Web服务器交互。 在...

    Struts2中Servlet的配置

    综上所述,Struts2提供了多种方式来与Servlet API交互,同时通过适当的过滤器配置,可以确保在Struts2框架下,直接编写的Servlet也能正常工作。理解和掌握这些配置技巧对于开发和维护Struts2应用至关重要。

    java上传与下载——struts2和servlet案例

    在Struts2中,我们通常会在Action类中处理这个逻辑,而在Servlet中,这将在doGet或doPost方法内完成。 现在,我们来看案例中的两个DEMO——JqUploadTest和CosUpload。JqUploadTest可能是指使用jQuery的Upload插件...

    Struts2之Servlet文件上传详解案例struts010

    综上所述,本案例“Struts2之Servlet文件上传详解”将引导你了解如何结合Struts2和Servlet实现文件上传功能,包括配置、Action编写、JSP页面设计以及注意事项。通过实践,你将更深入地理解Struts2框架在处理复杂Web...

    关于struts和servlet同时用

    Struts是一种基于MVC(Model-View-Controller)设计模式的开源框架,而Servlet则是Java标准库中用于处理HTTP请求的API。 Servlet是Java EE平台的核心组成部分,它提供了一种服务器端编程模型,可以接收和响应来自...

    struts2和struts1 API及使用指南 chm

    在提供的资源中,"Struts2.chm"可能是Struts2的API参考手册,包含了框架的所有类和接口的详细信息,对于理解和使用Struts2非常有帮助。"Struts1.3.chm"可能是针对Struts1.3版本的API文档,同样可以帮助开发者深入...

    Servlet简单模拟Struts2

    在Servlet中,我们可以使用Java的反射API来创建Action的代理类。当请求到达时,根据解析的XML配置,找到对应的Action并调用代理执行目标方法。 4. **日志拦截**:类似于Struts2的拦截器,我们可以创建一个Servlet ...

    tomcat、struts2、servlet Filter(过滤器) 工作原理

    在Struts2中,用户请求首先会被Struts2的ActionServlet拦截,然后通过配置的Action映射找到对应的Action类来处理请求。Action执行完成后,返回一个Result,该Result定义了如何展示结果,可能是跳转到一个新的JSP页面...

    Struts2.3.4 API帮助文档chm格式

    这些jar包可能包括Struts2的核心库、额外的插件库以及其他依赖库,如Servlet API、Commons Logging等。 通过阅读Struts2.3.4 API文档,开发者可以了解到每个类、接口、方法的详细说明,包括参数类型、返回值、异常...

Global site tag (gtag.js) - Google Analytics