Struts2教程:数据传递与Action中依赖注入详解

5星 · 超过95%的资源 需积分: 10 5 下载量 163 浏览量 更新于2024-09-16 收藏 182KB PDF 举报
"Java详解教程-Structs 2"主要关注的是Struts2框架中关于数据传递模型和Action组件的深入理解。在Struts2中,设计的核心思想是将Action与Servlet解耦,以便更好地管理业务逻辑和控制请求处理流程。以下是对章节内容的详细解析: 1. 数据传递模型: - Struts2引入了ValueStack和ActionContext的概念,它们分别扮演着请求属性和上下文管理的角色。ValueStack是一个动态的Map,与Request对象同步,生命周期与之相同,用于存储在不同范围内的数据,如Action、Session、Request等。ActionContext提供了对这些范围的Map进行操作的接口,如`getContext()`方法用于获取不同范围的上下文。 - OGNL(Object-Graph Navigation Language)被用于表达式语言,使得开发者能够直接通过基于OGNL的标签(如`s:property`)访问ValueStack中的对象,无需显式指定范围。例如,如果Action的属性直接在ValueStack中,可以使用`s:property`标签直接访问,如`<s:property value="username"/>`。 2. Action组件: - 在Struts2的Action类中,开发者通常会利用依赖注入(Dependency Injection, IOC)机制来管理和传递数据。Action需要实现特定的接口,如`ServletRequestAware`, `SessionAware`, `ApplicationAware`, `CookiesAware`, `ParameterAware`等,以便在初始化时由Struts2的拦截器栈自动注入相应的对象。这简化了对象的获取过程,使得代码更加模块化和易于维护。 - 例如,一个名为`UserAction`的Action类可能会这样定义: ```java public class UserAction extends ActionSupport implements SessionAware { private String username; private String password; @Override public void setSession(Object session) { this.session = (HttpSession) session; } // 其他getter和setter方法... } ``` 在这个例子中,`UserAction`实现了`SessionAware`接口,当Action被实例化时,Struts2的拦截器会自动将其注入到Session上下文中。 总结来说,Struts2教程的这部分内容重点介绍了如何通过ValueStack和ActionContext管理请求数据,以及如何利用依赖注入技术在Action中轻松地处理各种范围的数据对象。这对于理解和开发基于Struts2的企业级Web应用至关重要。