"这篇文档主要讨论了Struts2框架中Action包的命名空间以及如何通过Struts2访问Servlet API。Struts2的Action类设计上避免了直接与Servlet API耦合,以提高测试的便捷性。然而,在实际的Web应用程序中,常常需要使用到Servlet API,特别是HttpServletRequest、HttpSession和ServletContext这三个核心接口。为了方便开发者,Struts2引入了ActionContext类,它作为一个桥梁,允许Action类间接访问这些Servlet API。
ActionContext类提供了若干关键方法,包括获取和设置请求(Request)、会话(Session)和应用(Application)范围内的数据。如`Object get(Object key)`用于获取HttpServletRequest中的参数值,`void put(String key, Object value)`用于设置请求参数。`Map getApplication()`和`void setApplication(Map application)`则用于处理ServletContext。此外,`Map getSession()`模拟了HttpSession,而`void setSession(Map session)`则允许直接将Map对象转换为会话属性。
代码示例展示了如何在Action类中使用ActionContext。首先,Action类通常需要导入必要的库,如`import java.util.Map;`和`import com.opensymphony.xwork2.ActionContext;`。然后,Action中可以调用`ActionContext.getContext().get("key")`获取请求参数,或者`ActionContext.getContext().put("key", value)`设置参数。对于会话操作,`ActionContext.getSession()`可以获取一个类似HttpSession的对象进行操作。
Struts2通过ActionContext提供了一种优雅的方式,使得开发者可以在不直接依赖Servlet API的情况下,依然能够灵活地处理Web应用中的请求、会话和全局应用数据。这种设计提高了代码的可测试性和可维护性。"