Struts2--------Action访问Servlet API

     Action访问Servlet API   

           Struts2中的Action并没有和任何Servlet API耦合,这样框架更具灵活性,更易测试。

           对于Web应用的控制器而言,不访问ServletAPI是几乎不可能的。Web应用中通常需要访问的ServletAPI就是HttpServletRequest、HttpSession和ServletContext,这三个接口分别代表JSP中内置对象中的request、session、application。

          Struts 2提供了一个ActionContext类,Struts 2的action可以通过该类来访问Servlet API

         ActionContext类提供了一个静态方法getContext(),该方法返回一个ActionContext的实例。该实例提供了一些访问Servlet API的方法。     

方法名

功能描述

getContext()

静态方法,获取系统的ActionContext实例

getSession()

返回一个Map对象,该对象存入HttpSession实例。

setSession(Map session)

直接传入一个Map实例,将该map实例总得key、value对应转换成session的属性名、属性值

getApplication()

返回一个Map对象,该对象存入ServletContext实例

setApplication()

直接传入一个Map实例,将实例中的key、value对应转换成application的属性名、属性值

getParameters()

获得所有请求参数。类似于调用HttpServletRequest对象的getParameterMap方法

          ActionContext将在Action类中通过ActionContext访问Servlet API,该Action中示范了向request、session、application范围设置属性值。         

[java]  view plain copy print ?
  1. ActionContext ctx = ActionContext.getContext();   
  2.   
  3. //获得Session   
  4. Map session = ctx.getSession();   
  5.   
  6. //获得Application   
  7. Map application = ctx.getApplication();  

          struts 2即可以彻底与Servlet API 分离,从而可以允许该脱离Web容器运行,也就可以脱离Web容器来测试Action;又允许用简单的方式来操作request、session、application范围的属性。

 

       Action 直接访问Servlet API

      虽然Struts 2 提供了ActionContext来访问Servlet API,但这种访问毕竟不是直接获得Servlet API的实例。Struts 2 提供了几种接口,Action可以直接访问Servlet API

 

实现接口名称

接口描述

ServletContextAware

实现该接口的Action可以直接访问Web应用的ServletContext实例

ServletRequestAware

实现该接口的Action可以直接访问用户请求的HttpServletRequest实例

ServletResponseAware

实现该接口的Action可以直接访问服务器响应的HttpServletResponse


[java]  view plain copy print ?
  1. <span style="font-size:13px;">        private HttpServletResponse response;  
  2.     //重写实现ServletResponseAware接口  
  3.     public void setServletResponse(HttpServletResponse response) {  
  4.         this.response = response;  
  5.           
  6.     }</span>  

          通过上面可知,实现ServletResponseAware接口,只需要实现如下方法:

         public void setServletResponse(HttpServletResponse response);

         类似的,如果一个Action实现了ServletRequestAware,则需要实现如下方法:

         public void setServletRequest(HttpServletRequest request);

         类似的,如果一个Action实现了ServletContextAware,则需要实现如下方法:

         public void setServletContext(ServletContext  context);

         即使我们在struts 2 的Action类中获得了httpServletRespose对象,也不要尝试直接在Action中对客户端生成响应。

        

         使用ServletActionContext访问Servlet API

         为了能够直接访问Servlet API,struts 2 还提供了一个ServletAction工具类,这个类包含了如下几个静态方法

返回值

方法名

功能描述

HttpServletRequest

getRequest()

获得Web应用的HttpServletRequest对象

HttpServletResponse

getResponse()

获得Web应用的HttpservletResponse对象

ServletContext

getServletContext()

获得Web应用的ServletContext对象

PageContext

getServletContext()

获得Web应用的ServletContext对象

 

      借助于ServletActionContext工具类的帮助,Action能以更加简单的方式来访问Servlet API。

      

      读李刚《轻量级java EE企业应用实战(第三版)—struts 2+Spring 3+Hibernate整合开发》

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值