actionContext和ServletActionContext的区别:

来源:互联网 发布:js反混淆 编辑:程序博客网 时间:2024/05/14 09:35
一、ActionContext是Action执行时的上下文,上下文可以看作是一个map容器(其实这里的容器就是一个Map而已),存放Action在执行时需要用到的对象。

上下文(webwork)中放有请求的参数(Parameter)、会话(Session)、Servlet上下文(ServletContext)、本地化(Locale)信息等,webwork将Servlet相关数据转换为与Servlet无关的Map对象(即ActionContext),使xwork的Action实现与web层、逻辑层与表现层分离。 

每次执行Action之前都会创建新的ActionContext,ActionContext是线程安全的,也就是说在同一个线程里ActionContext里的属性是唯一的,这样Action就可以在多线程中使用。

通过ActionContext取得HttpSession: 
Map session = ActionContext.getContext().getSession(); 

这里的session就是Map类型的对象;原因:WebWork框架将与Web相关的很多对象重新进行了包装,这里将HttpSession对象重新包装成了一个Map对象,提供给Action使用,而不用直接和底层的HttpSession打交道。也正是框架的包装,让我们的Actoion可以完全的和Web层解藕。

二、如果Action需要直接与JavaServlet的HttpSession、HttpServletRequest等一些对象进行操作,应该直接使用:
ServletActionContext 
ServletActionContext(com.opensymphony.webwork.ServletActionContext)
这个类直接继承了ActionContext,它提供了直接与JavaServlet相关对象访问的功能,它可以取得的对象有: 
1、javax.servlet.http.HttpServletRequest:HTTPservlet请求对象 
2、javax.servlet.http.HttpServletResponse;:HTTPservlet相应对象 
3、javax.servlet.ServletContext:Servlet 上下文信息 
4、javax.servlet.ServletConfig:Servlet配置对象 
5、javax.servlet.jsp.PageContext:Http页面上下文 

取得对象的方法不同,返回类型也不同:

1、取得HttpServletRequest对象: 
HttpServletRequest request = ServletActionContext. getRequest(); 

2、取得HttpSession对象: 

HttpSession session = ServletActionContext. getRequest().getSession(); 

使用时的注意:

ServletActionContext和ActionContext有着一些重复的功能,原则上如果ActionContext能够实现的功能,那最好就不使用ServletActionContext,让Action尽量不要直接去访问JavaServlet的相关对象。 

使用ActionContext时要注意:不要在Action的构造函数里使用ActionContext.getContext(),因为这个时候ActionContext里的一些值也许没有设置,这时通过ActionContext取得的值也许是null。

0 0
原创粉丝点击