构建Portlet应用
【IT168 技术文档】引言
Hibernate是最近比较流行的一个用来处理O/R Mapping的持久层框架。它的工作原理是通过文件把值对象和数据库表之间建立起一个映射关系,这样,我们只需要通过操作这些值对象和Hibernate提供的一些基本类,就可以达到使用数据库的目的。使用Hibernate可以很好的将持久层和逻辑层进行隔离。请参阅参考资料一节获得更多Hibernate框架的信息。
Spring框架是一个包含了MVC层,中间层和持久层管理的框架,其核心模块是bean管理,现在很多的应用都采用Spring的bean管理机制来管理其逻辑层。请参阅参考资料一节获得更多Spring框架的信息。
Struts框架是Apache Jakarta项目的一部分,它为构建Web应用程序提供了很流行的MVC框架。WebSphere Portal V5提供了Struts Portlet框架,这个框架针对Portlet应用,将Struts的类包和taglib在URL生成,URL解析等处,做了自己的改写,使Portlet框架也可以支持Struts应用,将其作为Portlet来部署。
本文将通过构建一个使用Hibernate,Spring,Struts框架的Portlet应用,来描述如何在Portlet应用中使用这些框架。对于那些并不熟悉使用这些框架进行开发的Web应用程序的读者来说,本文提供了足够的信息使您可以掌握一些基础知识。但本文并不是一篇介绍如何使用这些框架的教程。
在本文中讨论的应用程序的开发或部署中用到了以下产品:
1.WebSphere Portal 5.0.2.2
2.WebSphere Studio Application Developer 5.1.2
请您注意!如果您的部署服务器Portal Server的版本低于5.0.2.2,您在部署web.xml的时候,在过滤器设置上将会遇到问题导致不能部署,从而无法通过设置过滤器来解决应用程序的中文问题。如果您的开发环境低于WebSphere Studio Application Developer 5.1.2,您可能不能得到本文中所述的Struts Portlet的全部支持。
示例应用程序
我们的示例应用程序将实现对一组持久数据的标准的创建、读取、更新、删除(Create/Read/Update/Delete,CRUD)操作。这个示例应用程序为一个新闻编辑程序,用户可以在列表中查看新闻,并新建,修改,删除新闻。
虽然这个示例应用程序是一个比较简单的应用,但为了更好的阐述Hibernate,Spring和Struts的作用范围,我们还是将这个应用程序进行分层的阐述:
--应用程序的分层
和通常大多数的Web应用程序一样,本应用程序分为四层,这四层是:presentation(描述),business(业务),persistence(持久)和domain model(域模型)。
--表示层(The Presentation Layer)
一般来讲,一个典型的Web应用的的末端应该是表示层。用来管理用户的请求,做出相应的响应,给出显示。在这里,我们使用了Struts Portlet框架来实现本应用程序的表示层。
--域模型层(The Domain Model Layer )
域模块层由实际需求中的业务对象组成,即我们常说的BO(Business Object) 比如, Order , Pet等等。 开发者在这层 不用管那些DTOs,仅关注domain object即可。 例如,Hibernate允许你将数据库中的信息存放入对象(domain objects),这样你可以在连接断开的情况下把这些数据显示到UI层。 而那些对象也可以返回给持久层,从而在数据库里更新。
--业务层(The Business Layer)
一个典型Web应用的中间部分是业务层或者服务层。这一层最容易受到忽视,从而导致大量的代码紧密的耦合在一起,从而使整个程序变的难以维护。在这里,我们使用Spring框架来解决这个问题,Spring把程序中所涉及到包含业务逻辑和Dao?的Objects--例如transaction management handler(事物管理控制)、Object Factories(对象工厂)、service objects(服务组件)--都通过XML来配置联系起来,从而使业务层变得非常灵活和易于维护。
--持久层(The Persistence Layer)
持久层是我们典型的Web应用的另一个末端。现在已经有很多很好的ORM开源框架来解决持久层的各种问题,尤其是Hibernate。 Hibernate为Java提供了OR持久化机制和查询服务, 它还给已经熟悉SQL和JDBC API 的Java开发者一个学习桥梁,他们学习起来很方便。 Hibernate的持久对象是基于POJO和Java collections。
前期准备工作
1. 打开WSAD,点击 文件-新建-其他,在弹出的对话框左边选择Portlet开发,右边选择Portlet项目。如图1:
图1

2. 点下一步,在项目名中输入Sample,类型选择Struts Portlet,如果没有需要配置的高级选项,点击完成。这样,就创建了一个设置为使用 WebSphere Portal Server 所包括的 Struts Portlet Framework 的 Portlet。如图2:
图2

3. 建立目录结构。在刚建的Sample项目上点右键,选择属性-JAVA构建路径-源,选中Sample/JavaSource,选中'除去',将这个目录从构建路径中清除。点击'添加文件夹',在JavaSource下创建目录:dao,service,web,并将这三个目录添加到构建路径中。在下面的步骤中,我们将在dao目录下放置和持久层相关的代码,在service目录下放置业务层相关的代码,在web目录下放置struts相关的action,form代码。在Sample目录下建立Test目录,Test目录下建立dao,service目录。我们将在Test/dao下放置dao层的JUnit测试代码,在Test/service下放置service层的JUnit测试代码。如图3:
图3

4. 配置环境变量将附件中lib目录下的文件,全部拷贝到Sample项目的对象lib目录下,并在构建路径中完成类路径设置。
5. 配置数据库。在附件中,你可以找到两个文件,分别名为build.xml和build.properties,将其拷贝到Sample应用的根目录下。修改build.properties文件中关于数据库的设置,包括数据库用户名,数据库密码,数据库名,数据库驱动类名,连接数据库的URL,以及Hibernate需要使用的数据库Dialect类名。将其设置为你的测试环境数据库一致即可。默认的数据库设置为MySql。
创建域模型层
这层是编码的着手点,我们的编码就从这层开始。 本应用中的Domain Object比较简单,只使用了一个对象:com.ibm.sample.bo.InfoObject.java。
代码清单 :
package com.ibm.sample.bo;
![]()
public class InfoObject ...{
private Long infoId;
private String title;
private String content;
}
infoId记录了这个InfoObject对象的唯一标识,title记录了新闻标题,content记录了新闻内容。