好文档 - 专业文书写作范文服务资料分享网站

Struts+Spring+Hibernate整合教程

天下 分享 时间: 加入收藏 我要投稿 点赞

? ? ? ?

管理业务级对象之间的依赖性

加入了表现和持久层之间的灵活性,以便它们不需要彼此进行直接通信 从表现层暴露上下文给业务层以获得业务服务 管理从业务层到表现层的实现

1.2.4 领域模型层

最后,因为我们要解决实际的问题的web应用,我们需要一套在不同的层间移动的对象。领域模型层包含的是表达实际业务对象的对象,比如Order, OrderLineItem, Product 等等。这一层允许能让开发者不再构建和维护不必要的数据传输对象DTO来匹配其领域对象。例如, Hibernate允许你读取数据库信息到一个领域对象的对象图中,以便你可以在离线的情况下将其表现在UI层中。这些对象可以被更新并跨过表现层发送回去,然后进行数据库更新。另外,你不再需要将对象转变成DTO,因为它们在不同的层间移动时可能会丢失事务。这种模型允许Java 开发者能够以OO风格的方式很自然的处理对象,而不用编写额外的代码。

1.3 整合一个简单的例子

到此,应该对各种层次和组件有一个高层的理解了罢。可以开始一些实践了。再次说明。我们的例子整合了Struts, Spring, 和Hibernate 框架。每个框架都包含大量的内容细节,我们不会多述。我们的目的使用一个例子向你说明如何将它们整合在一起构建一个优雅的Web应用架构。实例将演示一个请求是如何得到各层的服务的。此应用的用户可以将一个订单保存在数据库中并且察看数据中的已有订单。进一步的增强允许将用户更新和删除现有订单。

首先,我们将常见我们的领域对象,因为它们是要和各层沟通的。这些对象将允许我们能够定义那些对象需要持久化,那些业务逻辑需要提供,以及应该设计那些表现接口。接下来,我们将使用Hibernate 来为领域对象配置持久层和定义对象关系映射。然后,我们将定义和配置我们的业务层。在完成这些组件后,我们将讨论如何使用Spring将这些层关联起来。最后,我们将提供一个表现层,它知道如何与业务服务层通信以及如何处理来自于其他层的例外。

2 Spring整合 Struts

3.1 三个小窍门

? 接下来的每种整合技术(或者窍门)都有自己的优点和特点。我偏爱其中的一种,但

是我知道这三种都能够加深您对 Struts 和 Spring 的理解。在处理各种不同情况的时候,这将给您提供一个广阔的选择范围。方法如下:

第6页

1. 使用 Spring 的 ActionSupport 类整合 Structs

2. 使用 Spring 的 DelegatingRequestProcessor 覆盖 Struts 的 RequestProcessor 3. 将 Struts Action 管理委托给 Spring 框架 ? 装载应用程序环境

无论您使用哪种技术,都需要使用 Spring 的 ContextLoaderPlugin 为 Struts 的 ActionServlet 装载 Spring 应用程序环境。就像添加任何其他插件一样,简单地向您的 struts-config.xml 文件添加该插件,如下所示:

3.2 窍门 1. 使用 Spring 的 ActionSupport

? 步骤:

1. Action直接继承ActionSupport

2. 使用ApplicationContext ctx = getWebApplicationContext();取得Spring上下文 3. 取得相应Bean

//1继承ActionSupport public class SearchSubmit extends ActionSupport { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // 2.使用ApplicationContext ctx = getWebApplicationContext();取得Spring上下文 ApplicationContext ctx = getWebApplicationContext(); } } // 3.取得相应Bean BookService bookService =(BookService) ctx.getBean(\); ? 优点: 1) 简单 ? 缺点:

第7页

1) 耦合高 2) 违反IOC

3) 无法使用多方法的Action

3.3 窍门 2. 覆盖 RequestProcessor

? 步骤:

1. Action中,使用IOC获得服务,配置struts-config.xml:

input=\ 2. Spring 配置文件中注册该动作:

class=\> 3. 写具有 JavaBean 属性的 Struts 动作:

第8页

public class SearchSubmit extends Action { }

// 一个Service属性 private BookService bookService; // getter... public BookService getBookService() { } // setter... public void setBookService(BookService bookService) { } public ActionForward execute(ActionMapping mapping, ActionForm form, } HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { this.bookService = bookService; return bookService; // 调用bookService,不需要new Book book = getBookService().read(isbn.trim()); 3.4 窍门 3. 将动作管理委托给 Spring

? 步骤:

1. Action中,使用IOC获得服务,配置struts-config.xml:

2. Spring 配置文件中注册该动作:

class=\> 第9页

? 优点

1. 动作委托解决方法是这三种方法中最好的。 2. 不使用Spring api编写 Action 3. 利用了IOC装配

3.5 拦截 Struts 2.5.1. 前提:

将 Struts 动作委托给 Spring 框架可以将 Spring 的 AOP 拦截器应用于 Struts 动作。

2.5.2. 使用拦截器的步骤:

1. 创建拦截器。 2. 注册拦截器。

3. 声明在何处拦截代码。

2.5.3. 一个例子:

? 一个简单的日志记录拦截器 //创建拦截器 public class LoggingInterceptor implements MethodBeforeAdvice { public void before(Method method, Object[] objects, Object o) } } throws Throwable { System.out.println(\); ? 注册拦截器 第10页

Struts+Spring+Hibernate整合教程

????管理业务级对象之间的依赖性加入了表现和持久层之间的灵活性,以便它们不需要彼此进行直接通信从表现层暴露上下文给业务层以获得业务服务管理从业务层到表现层的实现1.2.4领域模型层最后,因为我们要解决实际的问题的web应用,我们需要一套在不同的层间移动的对象。领域模型层包含的是表达实际业务对象的对象,比如Or
推荐度:
点击下载文档文档为doc格式
7ymro4q8jb3z01x0bcii
领取福利

微信扫码领取福利

微信扫码分享