1. 引言
Java技术是目前流行的开发Web语言。Java Web开发模式已被广泛用于开发B/S软件应用。Java Web技术的发展归因于互联网浏览器的发展。
基于B/S结构的软件与基于C/S结构的软件相比较有一个显著的改进。基于C/S结构的软件,客户端代码和服务器端代码必须分别存储在客户端和服务器端。客户端请求发送到服务器,然后服务器响应请求并且返回结果。它在维修和应用中带来了很多不便,因为每个客户端必须安装客户端代码。
基于B / S结构软件的客户端浏览器。客户端代码和服务器端代码都存储在Web容器(Web服务器)中。用户通过客户端浏览器发送一个请求到服务器,客户端代码被下载到客户端计算机,并且在浏览器中运行。它不再需要客户端计算机安装客户端代码,这是不同于基于C / S结构的软件。因此,不仅在客户端计算机系统维护的工作能方面显著简化,同时也使用户的操作简单和一致。
基于B/S结构的Java Web软件不断改进。模型1(JSP + JavaBean)和模型2(JSP + Servlet + JavaBean)已先后发展起来。后者实现了MVC模型(模型+视图+控制器)。基于B/S的软件在结构发展方面变得越来越有层次。层次结构的目的是从程序中分离出数据,将业务逻辑从显示逻辑中分离出来,将数据库管理从业务逻辑中分离出来。层次结构有利于系统扩张,以便对整个系统因某层的改变所造成的影响可以最小化。
表示层:提供用户特定的操作接口,接收客户端请求,并显示响应结果。它也可以识别小数量的业务逻辑。
业务层:识别主要的业务逻辑。业务代码是独立的,不需要知道如何以及在哪里显示。此外,它也是独立的后端数据库。
数据层:是一个独立的后端数据资源。数据可以被不同的程序使用。目前,典型的数据资源是关系数据库。
由于上述几个优点,分层网络软件应用程序已迅速成为主流的Web应用程序。
2. SH框架技术
作者研究了基于SH中间件的Java Web软件应用程序的体系结构和设计技术,并应用在开发项目上。
A. Struts
Struts2是在Java开发平台上的一个开放资源的表示层中间件。它认识到表示层的MVC模式,成功地在表示层分离了视图和控制。Struts2包括三个部分:核心控制器过滤调度员,逻辑控制器动作和视图组件。过滤调度分配器是一个在运行的Web应用程序上的过滤器。它负责拦截所有客户端请求,然后通过阅读配置文件“struts.xml”确定处理客户端请求的方法。
执行方法获得信息,例如客户端请求的参数和执行业务处理。它还将处理结果传输到客户端显示出来,如JSP,FreeMarker,速度,等[2]。
B. Hibernate
Hibernate3是在Java开发平台中数据层中间件的开放资源和对象/关系数据库的映射工具。它将实体对象到关系数据库映射的很好,屏蔽了应用软件的关系数据库,关系数据库的访问封装到对象的访问,并为上层提供了一个统一的数据访问接口。
Hibernate3不仅提供了从Java类双向映射到数据表,而且提供数据查询、数据修改、数据修复、数据恢复的机制。Hibernate3可用于J2EE和J2SE应用软件开发的JDBC方面。Hibernate3提供HQL(Hibernate查询语言),可以完全以面向对象的方式访问数据资源。
3. 基于SH框架的软件体系结构
作者介绍了SH中间件在气象预报系统设计项目中的应用。Struts2在表示层,Hibernate3在数据层。
JSP:客户端页面,使用Struts2标记和在表单中从POJO接收客户端数据的形式。
Action:Struts2 Action类,其私人属性符合JSP表单的POJO。Action不需要执行大量的业务流程。主要的业务流程由业务层完成。Action类在业务层调用业务接口的方法。
业务接口:它是一个正面的业务层,定义了各业务模块中的方法。应用软件的各个模块应该有这个接口来分离表示层与业务层。表示层和业务层之间通过接口连接,这样可以降低层与层之间的相互作用,是软件扩展的首选。
业务实现:业务接口的实现类,实现软件的各种业务功能。
DAO接口:它是数据访问接口,它定义了所有的数据访问模块中的方法。应用软件的各个模块应该有这个接口来分离的数据层和业务层。业务层和数据层之间通过接口连接。它可以降低层与层之间的相互作用,且修改软件者优先。
DAO实现:DAO接口的实现类,调用管理Hibernate类的方法来创建Hibernate会话对象和实现CRUD(创建、检索、更新、删除)数据访问。
Manage Hibernate:它是一个Hibernate管理的工具类。它直接接触Hibernate。它根据 “hibernate.cfg. xml”文件和ORM映射文件提供了初始化Hibernate和创建Hibernate 会话工厂对象的方法。它还提供了创建Hibernate会话对象的方法,打开,关闭会话等等。与此同时,为了方便的恢复数据,日志数据层应提供机制,可以通过使用Hibernate3 Log4J实现。
Hibernate3:Hibernate3框架用于封装数据库。每个Session Factory对象对应一个数据库和每个会话对象对应一个数据库访问会话。Hibernate会话对象提供各种各样的数据库访问方法。
数据库:这是一个关系数据库。作者使用MySQL 5.0,它是一个开放的资源关系数据库。
4. 设计中的一些技术问题
为了安全,来自JSP页面的每个请求必须充当一个Action请求(通过Struts2 Filter Dispatcher 接收),这样是为了避免网页之间的超链接。
Hibernate 会话工厂对象是用于连接数据库并创建连接池。因此,它会消耗更多的系统资源。这是一个重量级的和线程安全对象。它应该被多个线程共享。为了节省内存,提高操作效率,应该采用静态方式使用这个重量级的对象。
Hibernate会话对象对应一个数据访问会话。它是一个轻量级对象。它应该在应用软件中频繁的被创建和销毁。
为了确保数据的完整性,数据库访问的操作集合必须被完全执行,以便Hibernate JTA(Java事务API)必须应用到会话事务。
Session是一个不安全的线程。为了防止冲突,最好在应用软件中为每个线程创建一个会话对象,即每个会话请求应该有自己的会话对象实例。一个更好的方法是使用线程本地类分别绑定相应的会话对象。
结合会话密钥代码对象:
private static ThreadLocal<Session> threLocal = new
ThreLocal<Session>();
public static Session currentSession()
{
Session cSession = (Session)threLocal.get();
if(cSession == null)
{
cSession = sessionFactory.openSession();
threLocal.set(cSession);
}
return (Session) threLocal.get();
}
public static void closeSession()
{
Session cSession = (Session)threLocal.get();
if (cSession != null)
{
cSession.close();
threLocal.set(null);
}
}
5. 结论
在这个软件体系结构中,表示层使用Struts2中间件。它接收客户端数据,将客户端请求转移到相关业务模块。与此同时,它还响应页面。
数据层地图对象/关系在关系数据库中通过使用Hibernate3中间件实现。静态方法应采取使用重量级Hibernate Session Factory对象节省系统资源,应该使用ThreadLocal类绑定轻量级Hibernate会话对象,以确保线程安全的。
通过不同层次的接口可以减少交互层。它有助于改变和扩展应用软件。
为了一致的使用和管理Hibernate,有必要设计一个ManageHibernate类,对DAO提供服务。
从前台JSP到后台Hibernate,POJO在层和操作数据对象之间进行参数传递
POJO的表示层封装客户端数据,可以是相同的类作为数据层的POJO ORM映射。