Struts2访问request、session、application对象

一、与Servelt API解耦访问方式

 为了避免与Servlet API耦合在一起,方便Action类做单元测试,Struts 2对HttpServletRequest、HttpSession和ServletContext进行了封装,构造了三个Map对象来替代这三种对象,在Action中,直接使用HttpServletRequest、HttpSession和ServletContext对应的Map对象来保存和读取数据,要获取这三个Map对象,可以使用com.opensymphony.xwork2.ActionContext类。

1、实例化ActionContext对象两种方式

ActionContext.getContext().put("xxx", "xxx");
ActionContext content=ActionContext.getContext();
2、使用ActionContext对象获取request、session、application对象

//ActionContext是action执行的上下文,保存了action执行所需要的一组对象,包括requet、session、application
		ActionContext content=ActionContext.getContext();
		
		//通过ActionContext获取request对象
		Map request=(Map) content.get("request");
		
		//通过ActionContext获取session对象
		Map session=content.getSession();
		
		//通过ActionContext获取application对象
		Map application=content.getApplication();
		
		//使用put()方法将数据保存到request、session、application对象中
		request.put("message1","曹操");
		session.put("message2","刘备");
		application.put("message3","孙权");
使用EL表达式获取request、session、application对象中的数据,显示到jsp页面中

获取request对象:${requestScope.message1}

获取session对象:${sessionScope.message2}

获取application对象:${applicationScope.message3}

二、与Servelt API耦合访问方式

 直接访问Servlet API将使你的Action与Servlet环境耦合在一起,我们知道对于HttpServletRequest、HttpServletResponse和ServletContext这些对象,它们都是由Servlet容器来构造的,与这些对象绑定在一起,测试时就需要有Servlet容器,不便于Action的单元测试。

 要直接获取HttpServletRequest和ServletContext对象,可以使用org.apache.struts2.ServletActionContext类,该类是ActionContext的子类

1、示例:

HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("message1", "周润发");
		
HttpSession session = request.getSession();
session.setAttribute("message2", "张智霖");
		
ServletContext application = ServletActionContext.getServletContext();
application.setAttribute("message3", "张学友");

你可能感兴趣的:(struts2)