基于Spring MVC和Hibernate集成的Portlet开发构架研究
摘要:J2EE在Portal开发上定义了JSR168接口规范,实现了在不同服务器上的门户可移植性。Spring框架的引入,让Portal开发实现了基于MVC的多层体系结构,使门户系统的开发和扩展变得更加容易。深入研究了基于Spring和Hibernate的Portal开发构架,基于该构架完成了一个简单的Portal系统,并验证了构架的合理性。
关键词:门户系统;开发构架;JSR168;MVC;Portal;Hibernate;Spring
1.1Portal页面的产生
Portal将不同的应用程序集合到一个页面,这个页面的外观是Portal用户共有的,同时Portal也可以有复杂的个性化特征,这些特征能够给用户提供自定义内容,其页面可以有不同的Portlet集,以便为不同的用户创建内容。Portal系统一般由Portal 服务器、支持Servlet的Java应用服务器或Web服务器、数据库服务器、LDAP服务器组成,此外还可以加上身份认证和访问控制服务器(Identity Server或Access Manager)等,而前面所说的Portlet容器通常是打包在Portal服务器中的,如图1所示:图1基于JSR168的Portlet系统构架
一个Portlet能够生成标记语言的片段,而Portal通常是在
Portlet生成的标记语言片里添加标题、控制按钮和别的修失控件,然后Portlet窗口调用这个新产生的片段,从而Portal把这些Portlet窗口整合成一个完整的文档,即一个Portal页面。Portlets 运行在一个Portlet容器中,Portlet容器收到Portlets产生的内容后,Portlet容器把Portlet的内容交给Portal,Portal服务器用Portlet 产生的内容来生成一个Portal页面,然后发送到一个客户端(如浏览器),再显示给用户,如图2所示。
spring framework扩展点图2Portal的页面生成流程
1.2Spring 框架结构
Spring框架是一个分层架构,由7个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理bean 的方式,如图3所示。
图3Spring的架构体系
核心容器的主要组件是BeanFactory,它是工厂模式的实现组件。BeanFactory 使用控制反转(IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。Spring 上下文是一个配置文件,向Spring 框架提供上下文信息。Spring AOP 通过配置管理特性,直接将面向方面的编程功能集成到了Spring 框架中,所以可以很容易地使Spring框架管理的任何对象支持AOP。Spring DAO的JDBC DAO
抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息,并且Spring 框架插入了若干个ORM 框架,从而提
供了ORM 的对象关系工具。Spring Web 上下文模块建立在应用程序上下文模块之上,为基于Web 的应用程序提供了上下文。Spring MVC 框架是一个全功能的构建Web应用程序的MVC 实现框架,通过策略接口,使得MVC 框架高度可配置。
1.3Hibernate研究分析
Hibernate对JDBC进行了轻量级的对象封装,使得Java 程序员可以完全使用面向对象的编程思维来操作关系数据库如图3所示,是持久层的一项实现技术。相比于其它持久层实现技术,如JDBC、EJB(实体Beans)、JDO等,Hinbernate易于掌握,更加符合编程人员的面向对象思维,Hibernate拥有自己的一种查询语言(HQL),它是完全面向对象的,其在应用中的基本结构,如图4所示:
图4Hibernate ORM的体系结构
Hibernate为Java 程序员提供了面向对象的API和接口来操纵数据库,从而避免了在业务逻辑中嵌入大量的JDBC访问和事物控制代码。SessionFactory接口对应我们的数据库存储源,程序从此接口中得到Session接口实例。Session接口则是应用中进行持久化时经常使用的接口,它提供了所有的持久化相关操作,同时我们可以通过Session接口获得Tranaction接口来实现数据库事务的控制。
2基于Spring和Hibernate的Portlet开发与测试本文基于Spring和Hibernate框架对Portlet的开发方法进行了研究,因为
组件符合JSR168规范,所以可以被移植到所有支持该规范的J2EE服务器上,在本文中采用Pluto作为Portlet容器对门户组件进行了测试,下面将对各层代码进行简单介绍:
2.1Portlet层
2.1.1显示列表SelectController.java
显示列表,是通过服务接口取出所有数据,再跟跳转到页面上显示;跳转到显示页面是由返回ModelAndView对象控制到达哪个页面,如下所示:
SelectController.java
public class SelectController implements Controller{
private static Log log = Log(SelectController.class);
private IContactService contactService;
public void setContactService(IContactService contactService) { actService = contactService; }
public IContactService getContactService() {
return contactService;
}
2.1.2修改跳转页面代码
<a href='<portlet:renderURL>
<portlet:param name="action" value="update"/>
<portlet:param name="contactId">
<jsp:attribute name="value">
<c:out value="${actId}"/>
</jsp:attribute>
</portlet:param>
</portlet:renderURL>
><c:out value="${actId}"/></a>
以上代码是说明根据对象的ID作为参数跳转到修改的控制器,这里注意的是应用<jsp:attribute>标记来传递参数,而不是servlet的直接追加参数,portlet里的URL和参数是经过编码处理的。
2.1.3删除跳转页面代码
<a href='<portlet:actionURL><portlet:param name="action" value="delete"/>
<portlet:param name="contactId">
<jsp:attribute name="value">
<c:out value="${actId}"/>
</jsp:attribute>
</portlet:param>?
</portlet:actionURL>
'>Remove</a>
以上是通过传入数据对象的id跳转到删除对象的控制器。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。