Struts2中Action访问Servlet API的三种方法

来源:互联网 发布:sql id=@id 编辑:程序博客网 时间:2024/05/04 14:36

Struts2的Action并未直接与任何Servlet API耦合,这是Struts2的一个改良之处,因为Action类不再与Servlet API耦合,从而能更轻松的测试该Action。
但对于Web应用的控制器而言,不访问Servlet API几乎是不可能的,例如跟踪HTTP Session状态等。Struts2框架提供了一种更轻松的方式来访问Servlet API。Web应用中通常需要访问的Servlet API就是HttpServletRequest,HttpSession和ServletContext,这三个类分别代表JSP内置对象中的request,session和appliaction。通过Action访问Servlet API有以下三种方法:

Struts2提供了一个ActionContext类,Struts2的Action可以通过该类来访问Servlet API。下面是ActionContext类中包含的几个常用方法:

   Object get(Object key):该方法类似于调用HttpServletRequest的getAttribute(String name)方法。
   Map getApplication():返回一个Map对象,该对象模拟了该应用的ServletContext实例。
   static ActionContext getContext():静态方法,获取系统的ActionContext实例。
   Map getParameters():获取所有的请求参数。类似于调用HttpServletRequest对象的getParameterMap方法。
   Map getSession():返回一个Map对象,该Map对象模拟了HttpSession实例。
   void setApplication(Map application):直接传入一个Map实例,将该Map实例里的key-value对转换成application的属性名、属性值。
   void setSession(Map session):直接传入一个Map实例,将该Map实例里的key-value对转换成session的属性名、属性值。

虽然Struts2提供了ActionContext来访问ServletAPI,但是并不能直接获得ServletAPI的实例。但是Struts2提供了以下接口,
   ServletContextAware:实现该接口的Action可以直接访问ServletContext实例。
   ServletRequestAware:实现该接口的Action可以直接访问HttpServletRequest实例。
   ServletResponseAware
:实现该接口的Action可以直接访问HttpServletResponse实例。

除此之外,为了能直接访问Servlet API,Struts2还提供了一个ServletActionContext,其静态方法有:getPageContext(),getRequest(),getResponse(),getServletContext()

上面三种方法的区别,方法一取得的实例是经过Struts2包装过后的,而后两种方法取得的实例是原生态的。但都有异曲同工之妙。

原创粉丝点击