基于Spring MVC+OpenJPA框架的web应用开发

2011-12-31 00:00:00刘晶
电脑知识与技术 2011年27期


  摘要:该文首先分析介绍了Spring MVC框架运行的原理及其运行过程,然后介绍了JPA体系结构并且分析了我们使用OpenJPA作为持久化层的原因,最后以一个实际项目阐述了如何在中小型web系统的开发中应用Spring MVC+OpenJPA的集成。
  关键词:Spring MVC;OpenJPA;web系统
  中图分类号:TN98 文献标识码:A文章编号:1009-3044(2011)27-6656-02
  对于web系统的开发,基于MVC的多层架构设计思想已经成为解决web应用开发的成功模式,许多框架纷纷涌现出来。在这众多优秀的框架之中,Spring MVC和OpenJPA因其开源并且功能强大受到了J2EE开发人员的喜爱。通过对这两种框架的整合,为中小型web系统的开发提供了一个开发灵活、易于扩展和维护的解决方案。
  1 Spring MVC框架
  在MVC体系结构中,模型(model)负责封装应用程序数据,供视图来展示;视图(view)只展示数据,不包括任何业务逻辑;控制器(controller)负责接收来自用户的请求,并调用后端的服务进行业务处理,处理之后,后端的服务会返回某些数据供视图展示;Spring MVC 框架为模型、视图、控制器之间提供了一个非常清晰的划分,各部分耦合性极低。Spring MVC主要包括以下几个组件:DispatcherServlet,HandleMapping,Controller,ModelAndView和ViewResolver等。
  1)当web请求被发送到Spring MVC应用程序时,DispatcherServlet会先接收请求,然后查找适当的处理程序来处理请求。DispatcherServlet通过一个或多个处理程序映射,将每个请求映射到处理程序中。Spring MVC中用来处理Web请求的最典型的处理程序是控制器(controller)。控制器通常必须调用后台服务来处理请求。
  2)控制器处理完请求之后,会将模型和视图名称返回给DispatcherServlet。模型包含了控制器要传递给视图进行显性的属性。绑定模型和视图的基本类是ModelAndView。
  3)当DispatcherServlet接收到模型和视图名称时,它会将逻辑视图名称解析成视图对象再进行呈现。DispatcherServlet从一个或者多个视图解析器中解析视图。视图解析器配置在Web应用程序上下文中,是实现了ViewResolver接口的Bean。它的任务是根据逻辑视图名称返回视图对象。
  4)一旦DispatcherServlet将视图名称解析成视图对象,它就会呈现视图对象,并传递控制器返回的模型。视图会将模型属性展示给用户。
  2 OpenJPA框架
  Java 是一种面向对象的语言,对象和对象之间存在着继承,引用关系,这样的关系无法通过简单的方式直接反应到关系型数据库中。因此在关系型数据库与面向对象之间需要一种转换机制。JPA定义了一套类和接口用于实现持久化管理和对象/关系的映射,而OpenJPA是Apache组织提供的JPA标准实现,它很好的实现了关系型数据库和面向对象之间的转换,封装了和关系型数据库交互的操作,为数据持久化提供了更简单、易用的编程方式。因此选择OpenJPA作为持久层框架是一个不错的选择。
  实体(Entity)是持久类映射的数据库表的记录,它可以通过EntityManager提供的相应方法进行管理,EntityManager通过EntityManagerFactory创建。EntityManager实现了数据库中的创建、修改、删除等操作。EntityTransaction提供了对Entity操作时需要的事务管理。在对数据库进行创建、修改、删除操作的时候显示的使用EntityTransaction的相关方法管理事务,可以确保数据操作在安全的环境下执行。EntityManager同时也提供createQuery方法来获得Query接口来查询符合条件的对象列表。Query对象目前支持JPQL和原生态SQL两种方式。
  3 基于Spring MVC 和OpenJPA的web系统的实现
  本web系统是某企业的资产管理系统,利用Spring MVC 作为 MVC开发模式,用OpenJPA作为数据持久层框架,结合JSP作为表现层技术。下面以该系统的硬件查询模块为例子,详细介绍如何应用Spring MVC 和OpenJPA的集成。
  3.1 系统的结构描述
  我们的系统是分模块进行的,不同的功能属于不同的模块,现在我们关注于该系统的硬件查询模块。系统主要分为以下几个层次:
  1)Action层:该层对应Sping MVC中的Controller层,用来连接web界面和逻辑层的操作。对于硬件查询模块,我们在该层需要定义两个controller:HardwareSearchController和HardwareSearchResultController,这两个controller分别负责查询过程和得到查询结果过程的处理。
  2)Dao层和DaoImpl层:主要定义操作数据库的接口和对接口的实现。
  3)Entity层:主要定义与数据库表对应的实体类,这些类通过annocation的方式将实体类和数据库表对应起来。
  4)Interceptor层:主要定义了一些基于Spring MVC 的拦截器,用来控制用户的访问权限。
  5)Service层和ServiceImpl层:主要定义了系统的业务逻辑和业务逻辑的实现,这两层中需要调用Dao层的接口来实现某些业务逻辑。
  6)web层:该层属于系统的表示层,主要定义了一些JSP页面。对于硬件查询模块,该层主要定义了hardwareSearch.jsp和hardwareSearchSuccess.jsp两个页面来分别显示硬件查询页面和硬件查询结果页面。
  3.2 Spring MVC的配置
  1)web.xml:这个配置文件是所有的web程序所必须的一个配置文件。在这个文件里面我们需要定义一个将来控制我们所有转向请求的DispatcherServlet,它根据我们以后某处输入的信息进行工作。同时我们需要用一个标准的用来映射到我们使用的URL模式的servlet-mapping条目。在本项目中我们用带“.action”扩展名的URL转向到“springapp”分配器。具体配置如下:
  
  main
  org.springframework.web.servlet.DispatcherServlet
  

  
  main
  *.action
  

  2)hardware-servlet.xml主要用于hardware模块的控制器、映射器,视图器、业务类和DAO类的配置。具体配置如下:
  
    class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  
  
  hardwareSearchController
  

  

  

  
  
  
  
  

  
  
  
  3)main-servlet:定义公用的控制器,web.xml文件中DispatcherServlet所使用的定义需要放在这个文件中,因此在这个文件里需要将hardware-servlet.xml和其它模块的配置文件包含进来,如下所示:
  
  3.3 Spring MVC与OpenJPA集成
  为了实现OpenJPA同Spring MVC的集成,我们定义一个openjpa-servlet.xml的文件,在这个文件里面,我们需要配置数据源和EntityManager对象。最后把该文件也包含到Spring MVC的配置中的main.xml文件中。具体配置如下:
  
  
  
  
  
  
  
  

  

  

     class="org.springframework.orm.jpa.JpaTransactionManager" lazy-init="true">
  
  

  这样我们就完成了该实例的配置。通过上述配置之后,我们再完成相应的业务类,DAO类,控制类等,hardware模块的查询功能就能顺利实现了。
  4 结束语
  Spring MVC与OpenJPA的框架集成为程序开发人员提供了快捷的开发方案,同时也向系统提供了更高的安全行和可扩展性。经测试证明,这两种框架的集成特别适合中小型web系的开发。可以肯定,随着Spring框架和OpenJPA框架的进一步完善和发展,这两种框架的集成会为我们带来更为强大的开发支持。
  参考文献:
  [1] 李刚.经典Java EE企业级应用实战[M].北京:电子工业