Struts2 中, HTML 表单将被直接映射到一个 POJO,通过params拦截器。
Struts2 中,任何一个POJO都可以是一个action类。
Struts2 会为每一个 HTTP 请求创建一个新的 Action 类的实例,即 Action 不是单例的,是线程安全的。
必须有一个不带参的构造器,struts.xml中通过全类名反射创建类实例
//**************************Struts2 访问 web 资源**************************
在 Action 中, 可以通过以下方式访问 web 的 HttpSession, HttpServletRequest, HttpServletResponse 等资源
1、——与Servlet API解耦的方式(只能访问有限的API对象,及方法,方便 Action 做单元测试)
· 1.1、通过使用ActionContext(是Action执行的上下文对象,保存了parameters, request, session, application 等)
1 ActionContext actionContext = ActionContext.getContext(); 2 Map<String, Object> applicationMap = actionContext.getApplication(); 3 Map<String, Object> sessionMap = actionContext.getSession(); 4 Map<String, Object> requestMap = (Map<String, Object>) actionContext.get("request"); 5 Map<String, Object> parameters = actionContext.getParameters(); 6 System.out.println(((String[]) parameters.get("name"))[0]);
` 1.2、通过Action类中实现接口:ApplicationAware、RequestAware、SessionAware(Action 类通过可以实现某些特定的接口, 让 Struts2 框架在运行时向 Action 实例注入 parameters, request, session 和 application 对应的 Map 对象)
· 选用建议:若一个Action类中有多个 action 方法,且多个方法都需要使用Map或者parameters,则建议使用Aware接口的方式
· 备注:session对应的Map实际上是SessionMap类型的,强转后,若调用其invalidate()方法,可以是session失效。
· 备注:Struts2 对 HttpServletRequest, HttpSession 和 ServletContext 进行了封装, 构造了 3 个 Map 对象来替代这 3 个对象, 在 Action 中可以直接使用 HttpServletRequest, HttpServletSession, ServletContext 对应的 Map 对象来保存和读取数据.
2、——与Servlet API耦合的方式(可以访问更多的Servlet API对象,及其原生方法,直接访问 Servlet API 将使 Action 与 Servlet 环境耦合在一起, 测试时需要有 Servlet 容器, 不便于对 Action 的单元测试.)
· 2.1、通过使用ServletActionContext类
1 HttpServletRequest request = ServletActionContext.getRequest(); 2 HttpSession session = ServletActionContext.getRequest().getSession(); 3 ServletContext servletContext = ServletActionContext.getServletContext();//和application一样
· 2.2、通过Action类中实现接口:
**************************Struts2 访问 web 资源**************************//
原文:http://www.cnblogs.com/orco/p/6233930.html