struts2 中的ActionContext与ServletActionContext

在Struts2中,进行业务控制的类就是普通的java类,只是在类中有一个业务控制的方法execute()(实际上该方法也可在struts.xml的action元素指定),这样实现了将Action与Servlet Api进行了分离,极大地降低了框架与Sevlet api的耦合度,便于业务控制器的测试。但这样一来,Servlet经常用到的request、session、application等就无法在业务控制中使用了,为使Action类能访问Servlet Api,struts2框架提供了ActionContext类和ServletActionContext.


1.ActionContext(com.opensymphony.xwork.ActionContext)类

ActionContext类是Action执行时的上下文,Action运行时所用到的对象都保存在ActionContext中,例如请求的参数、Session和本地化信息等。ActionContext是线程安全的,在每次执行Action前创建新的ActionContext对象,代码如下:

ActionContext context=ActionContext.getContext();

获取request、session、application对象方法如下:

Map session=ActionContext.getContext().getSession();
Map application =ActionContext.getContext().getApplication();
Map request=ActionContext.getContext().get("request");

注意:利用ActionContext 获得的request、session并不是HttpServletRequest、HttpSession类型,而是Map类型,例如将session类型封装成Map类型代码如下 :

Map map = new SessionMap(request);
   
    public class SessionMap extends AbstractMap{
    	private HttpSession session;
    	public RequestMap(HttpServletRequest request){
    		this.session = request.getSession();
    	}
    	public void put(Object key,Object value){
    		session.setAttribute(key.toString(),value);
    	}
    	
    	public Object get(Object key){
    		return session.getAttribute(key.toString());
    	}
    }



2.ServletActionContext(com.openxymphony.xwork.ServletActionContext)类

ServletActionContext类是ActionContext的子类,该类可以直接返回Servlet api中的相应的servlet类型,代码如下:

HttpServletRequest request=ServletActionContext.getRequest();
HttpServletResponse response=ServletActionContext.getRession();
HttpSession session=ServletActionContext.getReqeust().getSession();

说明:ActionContext能够实现的功能,尽量不要使用ServletActionContext,尽量不要让Action直接访问java servlet对象。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值