1、ActionContextjava
是Action执行的上下文,Action的上下文能够看做是一个容器,里面封装了请求(Request)、会话(Session)、Application等,这里面的Request、Session、Application是Map类型的,往里面封装的是键值对,因此这就体现了struts2不与底层servlet Api打交道,那么对不少web的相关对象进行封装,这样能够达到Action与web层解耦。web
用ActionContext获得Map类型的Request、Session、Application。session
例子:jsp
获取request:对象
Map request = ActionContext.getContext().get("request");继承
往request里封装数据get
request.put("name", value);servlet
在前台就能够用request.getAttribute("name");io
获取session容器
Map session = ActionContext.getContext().getSession();
将数据封装到session中
session.put("name", value);
在前台页面上用sessionScope.getAttribute("name");获得session里面封装的值。
获得session、request有点区别,获得request用的是get("reqeust"),获得session用的是getSession()
也能够直接对Java Servlet Http的请求(HttpServletRequest)、响应(HttpServletResponse)操做,和上面的例子有点区别,注意区别。
ActionContext ctx = ActionContext.getContext();
HttpServletRequest request = (HttpServletRequest)ctx.get(ServletActionContext.HTTP_REQUEST);
HttpServletResponse response = (HttpServletResponse)ctx.get(ServletActionContext.HTTP_RESPONSE);
用法就和Servlet中的request、response用法同样
2、ServletActionContext
它继承ActionContext,因此ServletActionContext也能够获得HttpServetRequest、HttpServletResponse,,它也提供了直接与Servlet相关对象访问的功能,它能够取得的对象有:
(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页面上下文
如何获取HttpRequest、HttpResponse
例子
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
而后就能够用request.setAttribute("name", value)方法了。
总结:不难看出,二者之间仍是存在不少共同功能,那么咱们仍是根据本身的需求进行选择,能用ActionContext对象知足就尽可能使用ActionContext,避免让咱们直接去访问Servlet对象。另外,不要在Action还没实例化的时候去经过ActionContext调用方法,由于Action实例在ActionContext实例以前建立,ActionContext中一些值尚未设置,会返回null。