Servlet API解耦的访问方式

 

非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)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值