Struts2的Action中获取request,session,application对象
来源:互联网 发布:深孔钻编程视频教程 编辑:程序博客网 时间:2024/04/28 02:51
在传统Web开发中,经常会用到Servlet API中的HttpServletRequest、HttpSession和ServletContext。Struts2框架让我们可以直接访问和设置action及模型对象的数据,这降低了对HttpServletRequest对象的需求,但在某些应用中,我们可能会需要在action中去访问HttpServletRequest对象及其他两种对象,例如,用户登录成功后,我们要将用户信息保存到Session中。
Struts2提供了两种方式去访问者三种对象,第一种是与Servlet API 解耦的访问方式;第二种是与Servlet API耦合的访问方式。
使用与Servlet API解耦的方式访问:
Struts2对HttpServletRequest、HttpSession、ServletContext进行了封装,构造了三个Map对象来代替这三个对象,在Action中直接使用它们三者各自对应的Map进行操作,那么如何获取这三个Map对象呢?可以使用com.opensymphony.xwork2.ActionContext类。
ActionContext类是action执行的上下文,ActionContext类定义了如下方法,用于获取HttpServletRequest、HttpSession和ServletContext对应的Map对象
public Object get(Object key):ActionContext中没有提供getRequest()方法直接获取封装了HttpServletRequest的Map对象,如果要获取该Map对象必须使用get("request")这样的方式获取HttpServletRequest对应的Map对象。
public Map getSession():获取封装了HttpSession的Map对象。
public Map getApplication():获取封装了ServletContext的Map对象。
测试方法:
public String helloTest(){/*设置username的值*/this.setUname("hello:" + this.getUname());/*获取action上下文对象*/ActionContext ctx = ActionContext.getContext();/*通过ctx获取封装了ServletContext对应的Map集合,并存值*/Map application = ctx.getApplication();application.put("app", "你好!application!");/*通过ctx获取封装了HttpSession对应的Map集合,并设置值*/Map session = ctx.getSession();session.put("session", "你好!session!");/*因为ActionContext类没有提供getRequest()方法,如果要得到封装了HttpServletRequest的Map对象需要传参*/Map request = (Map) ctx.get("request");request.put("req", "你好! request!");return "ok";}
在jsp页面进行接收:
${applicationScope.app} </br>${sessionScope.session} </br>${requestScope.req} </br>
注:如果我们想在Action和页面之间单纯的传递数据,我们可以使用ActionContext一步到位:
/*可以使用ActionContext直接传值*/ActionContext.getContext().put("ctx", "你好!!!");默认为request范围内可以接到值。
除了上述方法外可以使Action类实现RequestAware、SessionAware、ApplicationAware的方式获取request、session和application等对象(这种方式不提倡,太罗嗦)!
与Servlet API耦合的方式访问:
直接访问Servlet API将使你的Action与Servlet环境耦合在一起,我们知道对于HttpServletRequest、HttpServletResponse和ServletContext这些对象,他们都是由Servlet容器来构造的,有时候,我们的业务需求(比如要通过request获取IP地址)确实需要直接访问这些对象。此时我们就可以通过org.apache.struts2.ServletActionContext类,该类时ActionContext的子类,在这个类中提供了静态方法:
public static HttpServletRequest getRequest():得到HttpServletRequest对象。
public static HttpServletResponse getResponse():获取HttpServletResponse对象。
public static ServletContext getServletContext():得到ServletContext对象。
注:ServleActionContext类中并没有提供获取HttpSession的方法,但是有了request,要获取session是非常简单的。
示例代码如下:
public String helloTest1(){/*通过ServletActionContext获取HttpServletRequest对象*/HttpServletRequest request = ServletActionContext.getRequest();request.setAttribute("req", "你好,我是request!");/*通过ServletActionContext获取HttpResponse对象*/HttpServletResponse response = ServletActionContext.getResponse();/*通过ServletActionContext获取ServletContext对象*/ServletContext ctx = ServletActionContext.getServletContext();ctx.setAttribute("ctx", "你好!我是application!");/*通过ServletActionContext来获取HttpRequest对象,再获取Session对象*/HttpServletRequest req = ServletActionContext.getRequest();HttpSession sesison = req.getSession();sesison.setAttribute("session", "你好!我是Session~!");return "ok";}
示例代码如下:
public String helloTest2(){/*通过ActionContext获取HttpServletRequest对象*/HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);request.setAttribute("req", "你好,我是request!");/*通过ActionContext获取HttpServletResponse对象*/HttpServletResponse response = (HttpServletResponse) ActionContext.getContext().get(ServletActionContext.HTTP_RESPONSE);/*通过ActionContex获取ServletContext对象*/ServletContext ctx = (ServletContext) ActionContext.getContext().get(ServletActionContext.SERVLET_CONTEXT);ctx.setAttribute("ctx", "你好!我是application!!");/*通过ServletActionContext来获取HttpRequest对象,再获取Session对象*/HttpServletRequest req = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);HttpSession sesison = req.getSession();sesison.setAttribute("session", "你好!我是Session!!");return "ok";}
- Struts2的Action中获取request,session,application对象
- struts2 action中获取request session application的方法
- struts2 action中获取request session application的方法
- struts2 action中获取request session application的方法
- struts2 action中获取request session application的方法
- struts2 action中获取request session application的方法
- struts2 action中获取request session application的方法
- Struts2中获取request,session,application对象
- Struts2中获取request,session,application对象
- Struts2中获取request,session,application对象
- struts2 Action中获取request, response,Session对象的方法
- Struts2 action中获取session,request对象的方法
- struts2在Action中获取Scope中的对象request、session、application
- struts2 Action获取request,session,application
- struts2中获取request,session,application等属性范围对象
- Struts2中获取|session|application|request|对象(七)
- 【struts2】Action类中获取session,request,response对象
- 在Action中获取:request,session,application
- Facade模式
- 遇到 Form 性能问题怎么办 performance issue
- c++的重载、覆盖和遮蔽(隐藏)
- Android中使用代码截图的各种方法总结
- java socket实现全双工通信
- Struts2的Action中获取request,session,application对象
- 区位码、国标码、机内码
- 设计模式六大原则
- java中Date与String的相互转化
- mysql master-slave备份配置文档
- WCF入门--发布到IIS并引用
- 探索推荐引擎内部的秘密,第 1 部分: 推荐引擎初探
- Spring Security3.1实践
- The Building Blocks- Components of EA Part 2- Process, People, Network and Time