ActionContext与ServletActionContext的区别及获取request、session等对象
2017-10-31 12:50
621 查看
我们知道struts2接受客户端请求,在Action中进行处理后,将视图结果返回。struts2容器自身不依赖于web容器,不用和servlet对象中的请求(request)、响应(response)进行关联,对于请求的参数,通过paramerInterceptor将参数封装在Action中,然后通过调用get、set方法将参数值设置进Action之中。如果仅仅获取参数,可能有时候满足不了开发的需求,有时我们要获取request或者response中的信息,要对其进行设置、处理。
一、ActionContext
是Action执行的上下文,Action的上下文可以看作是一个容器,里面封装了请求(Request)、会话(Session)、Application等,这里面的Request、Session、Application是Map类型的,往里面封装的是键值对,所以这就体现了struts2不与底层servlet Api打交道,那么对很多web的相关对象进行封装,这样可以达到Action与web层解耦。
用ActionContext得到Map类型的Request、Session、Application。
例子:
获取request:
Map request = ActionContext.getContext().get("request");
往request里封装数据
request.put("name", value);
在前台就可以用request.getAttribute("name");
获取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用法一样
二、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。
一、ActionContext
是Action执行的上下文,Action的上下文可以看作是一个容器,里面封装了请求(Request)、会话(Session)、Application等,这里面的Request、Session、Application是Map类型的,往里面封装的是键值对,所以这就体现了struts2不与底层servlet Api打交道,那么对很多web的相关对象进行封装,这样可以达到Action与web层解耦。
用ActionContext得到Map类型的Request、Session、Application。
例子:
获取request:
Map request = ActionContext.getContext().get("request");
往request里封装数据
request.put("name", value);
在前台就可以用request.getAttribute("name");
获取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用法一样
二、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。
相关文章推荐
- ActionContext与ServletActionContext的区别及获取request、session等对象
- ActionContext与ServletActionContext的区别及获取request、session等对象
- ActionContext与ServletActionContext的区别及获取request、session等对象
- ActionContext与ServletActionContext的区别及获取request、session等对象
- 获取HttpServletRequest / HttpSession / ServletContext / HttpServletResponse对象 .
- struts2中ServletActionContext与ActionContext区别及获取Servlet对象方法
- Structs2中利用ServletActionContext静态方法获取resposne、request等对象
- Action中获取Servlet的其他对象-request.response,ActionMapping,context
- ActionContext获取request、session和application对象
- Struts2中解耦合通过actionContext对象获取到aplication,session,request,paramter等对象
- Java乔晓松-Struts2中文件上传和多文件上传以及获取HttpServletRequest / HttpSession / ServletContext / HttpServletRespons
- ajax异步处理时,如何在JS中获取从Servlet或者Action中session,request
- 关于ActionContext.getContext()取得的值是什么,和struts2如何获取request,session,appliaction作用域
- ActionContext 与 ServletActionContext获取Session的异同
- Struts2初学 Struts2在Action获取内置对象request,session,application(即ServletContext)
- 9.Struts2在Action中获取request-session-application对象
- Struts2在Action获取内置对象request,session,application(即ServletContext)
- Struts2的Action中获取request,session,application对象
- Struts2的Action中获取HttpServletRequest对象
- Action中获取HttpServletRequest对象的方法(表单提交值,url传递参数)