第一种方式-与ServletAPI解耦方式(不依赖原有Web组件)
为了避免与Servlet API耦合在一起,方便Action类的测试,Struts2框架使用了普通的Map对象代替了Servlet API中的HttpServletRequest、HttpSeesion和ServletContext。在Action类中,可以直接访问HttpServletRequest、HttpSeesion和ServletContext对应的Map对象。Struts2提供了com.opensymphony.xwork2.ActionContext类获取ServletAPI对应的Map对象。
获取HttpServletRequest对象
ActionContext ac = ActionContext.getContext();
Map request = (Map)ac.get("request");
获取HttpSeesion对象
ActionContext ac = ActionContext.getContext();
Map session = ac.getSession();
获取Application对象
ActionContext ac = ActionContext.getContext();
Map application = ac.getApplication();
第二种方式-与ServletAPI耦合方式(依赖于原有web组件)
直接访问Servlet API将使Action类与Servlet API耦合在一起,众所周知,Servlet API对象均有Servlet容器来构造,与这些对象绑定在一起,测试过程中就必须有Servlet容器,这样不便于Action类的测试,但有些时候确实需要直接访问这些对象。直接获取Servlet API对象可以直接使用org.apache.struts2.ServletActionContext类,该类是ActionContext类的子类。
获取HttpServletRequest对象使用getRequest()
获取ServletContext对象使用getServletContext()
获取HttpServletResponse对象使用getResponse()