`

Struts2的Action访问Servlet API(转)

阅读更多

Java代码

  1. public  String execute(){  
  2. //得到 ActionContext对象
  3.    ActionContext ac = ActionContext.getContext();  

  4. //取得HttpServletRequest中request对象中的请求参数Map
  5. Map paramMap = ac.getParameters();  

  6. //注意:使用key从Map中取得的是Striing数组引用,即取得同样名字的请求参数集合
  7.    String[] ids = (String[]) paramMap.get("id" );   
  8.    String[] names = (String[]) paramMap.get("name" ); 
  9. //取得存放Session属性的Map
  10.    Map sessionMap = ac.getSession();  
  11.    sessionMap.put("id" , ids[ 0 ]);  
  12.    sessionMap.put("name" , names[ 0 ]);  
  13.    return   "toSession" ;  
  14. }  

 在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

Java代码
  1. public   class  ServletAction2  implements   
  2.              CookiesAware,ParameterAware, RequestAware,  
  3.              SessionAware, ServletRequestAware,  
  4.              ServletResponseAware, ApplicationAware {    
  5.   
  6.  private  Map sessionMap;  
  7.  private  HttpServletRequest request;  
  8.  private  HttpServletResponse response;  
  9.  private  Map applicationMap;  
  10. //只是定义,代码中没有使用,起演示说明作用   
  11.  private  Map cookieMap;  
  12. //只是定义,代码中没有使用,起演示说明作用   
  13.  private  Map requestMap;  
  14. //只是定义,代码中没有使用,起演示说明作用   
  15.  private  Map parameterMap;  
  16. //只是定义,代码中没有使用,起演示说明作用    
  17. //省略生成以上类成员变量的setter getter方法      
  18.   
  19. public  String execute(){    
  20.   
  21.     String id = this .request.getParameter( "id" );    
  22.   
  23.     String name = this .request.getParameter( "name" );    
  24.   
  25. sessionMap.put("id" , id);    
  26.   
  27.     sessionMap.put("name" , name);    
  28.   
  29.     return   "toSession" ;    
  30.   
  31.  }    
  32.   

分享到:
评论

相关推荐

    struts2之Action访问Servlet API

    详细讲解了struts2的Action访问ServletAPI的几种方法.

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

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

    struts2 Action 包 命名空间 servlet API

    struts2 Action 包 命名空间 servlet APIstruts2 Action 包 命名空间 servlet APIstruts2 Action 包 命名空间 servlet APIstruts2 Action 包 命名空间 servlet APIstruts2 Action 包 命名空间 servlet APIstruts2 ...

    Struts2中Servlet的配置

    2、使用struts2提供的ActionContext类直接获取Servlet API。 在同一个项目中,如果既用到servlet又用了struts框架,运行项目时可能无法正常使用servlet,解决办法如下: 该类是定义了一个过滤器,当既用到struts2...

    Struts1与Struts2本质区别

    Struts 2 Action不再依赖于Servlet API,从而允许Action脱离Web容器运行,从而降低了测试Action的难度。 当然,如果Action需要直接访问HttpServletRequest和HttpServletResponse参数,Struts 2 Action仍然可以访问...

    JavaEE技术-试验四.zip_JavaEE_API_struts2 Action

    在MyEclipse环境下运用Struts2技术访问Servlet API,包括HttpServletRequest、HttpSession和ServletContext

    Struts2 part 3:在Action中使用ServletAPI

    NULL 博文链接:https://mvplee.iteye.com/blog/2240323

    struts2.1.8学习

    3、Struts1 与ServletAPI、strutsAPI 紧密耦合;Struts1 则不 4、Struts2 利用拦截器进行AOP 编程,实现如权限拦截功能 5、Struts2 提供了类型转换器 6、Struts2 提供多种表现层技术,如JSP/Freemarker/Velocity 等 ...

    stuts2 个人总结(绝对值)

    struts2 Action 包 命名空间 servlet APIstruts2 Action 包 命名空间 servlet APIstruts2 Action 包 命名空间 servlet APIstruts2 Action 包 命名空间 servlet APIstruts2 Action 包 命名空间 servlet APIstruts2 ...

    struts2的总结,适合初学者

    2、Servlet把最底层的api暴漏给程序员,使程序员更能清楚的了解mvc的各个特点。 3、程序员可以对servlet进行封装。Struts2就是从servlet中封装以后得到的结果。 1.2Servlet的缺点 1、每写一个servlet在web.xml中都要...

    struts项目学习笔记

    Action的execute 默认方法不再与Servlet API耦合,更易测试 支持更多视图技术(JSP(转译java文件,编译成class文件,才可以运行)、(模板技术,html,把数据和模板html一起以流方式输出)FreeMarker、Velocity) 基于AOP...

    struts-2.3.16.1.zip

    Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。struts-2.3.16.1.zip就是struts2.3的一个版本...

    struts 2.3.4.1 最新英文版API

    org.apache.struts2.dispatcher Classes for action dispatching in Struts (the Controller part of MVC). org.apache.struts2.dispatcher.mapper org.apache.struts2.dispatcher.multipart Classes to help ...

    struts2.1宝典

    6.Action中访问servlet API 3 7.Action访问资源文件 3 8.资源文件_各国代码 4 9.将struts.xml分开 4 10全局结果result 4 11模型驱动 4 12.创建拦截器 5 13表单提交中文乱码问题 5 14.Jsp不能识别EL 5 15.自定义...

    深入浅出Struts2(附源码)

    本书是广受赞誉的Struts 2优秀教程,它全面而深入地阐述了Struts 2的各个特性,并指导开发人员如何根据遇到的问题对症下药,选择使用最合适的特性。作者处处从实战出发,在丰富的示例中直观地探讨了许多实用的技术,...

    5Action配置的各项默认值

    Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,...

Global site tag (gtag.js) - Google Analytics