struts2 中的ActionContext与ServletActionContext

来源:互联网 发布:人工智能 视频分析 编辑:程序博客网 时间:2024/06/10 09:11

在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对象。


0 0
原创粉丝点击