您的位置:首页 > 其它

ActionContext类-与Servlet API解耦的访问方式

2012-09-06 09:41 120 查看
非IOC方式

为了避免与Servlet API耦合在一起,方便Action类做单元测试,Struts2对HttpServletRequest、HttpSession和ServletContext进行了封装,构造了三个Map对象来替代这三种对象,在Action中,直接使用HttpServletRequest、HttpSession、ServletContext对应的Map对象来保存和读取数据。要获得这三个Map对象,可以使用com.opensymphony.xwork2.ActionContext类。

public Object get(Object key)

ActionContext类没有提供类似getRequest()这样的方法来

获取封装了的HttpServletRequest的Map对象。要得到request对象的Map对象,

需要为get()方法传递参数“request”

public Map getSession()

获得封装了HttpSession的Map对象

public Map getApplication()

获取封装了ServletContext的Map对象

public class LoginAction implements Action {

//在这里展示了,如何将用户登对录对象写入到request,session,application作用域中

public User user;

public String execute() throws Exception {

ActionContext context=ActionContext.getContext();

Map request=(Map)context.get(“request”);//获得request对象,只可以设置或是获取属性,不能获取参数。

Map session=(Map)context.getSession();

Map application=(Map)context.getApplication();

request.put(“user”,user);//将user对象放到request作用域中

session.put(“user”,user);//将user对象放到session作用域中

application.put(“user”,user);//将user对象放到application作用域中

}

IOC方式

除了利用ActionCotext来获取request、session、application对象这种方式外,还可以采用在Action类中实现某些特定的接口的方式,让Struts2框架在运行时向Action实例注入request、session和application对象,与之有关的三个接口和它们的方法如下所示:

org.apache.struts2.interceptor.RequestAware

框架利用该接口,向Action实例注入request Map对象。该接口有

void setRequest(Map request)

org.apache.struts2.interceptor.SessionAware

框架利用该接口,向Action实例注入session Map对象。该接口有;

void setSession(Map session)

org.apache.struts2.interceptor.ApplicationAware

框架利用该接口,向Action实例注入application Map对象。该接口有

void setApplication(Map application)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: