混合Eclipse、WTP、Struts和Hibernate2010-12-31 bea Boris Minkin使用Eclipse Web Tools Project、Tomcat应用服务器和MySQL数据库服务器,创建了一个Web应用程序。尽管该应用程序(DBTest)可能会很不错,但是也会存在一些局限性: 在servlet代码中,Java Server Pages (JSP) 名称是硬编码的 SQL也被硬编码到命令类中。幸运的是,这些问题可以通过两种有趣的解决方案得以解决。第一个问题可通过使用开源Struts框架解决,该框架通过将模型动作映射到一个简单配置文件中的视图组件(比如JSP),从而分离应用程序的模型、视图和控制器。第二个问题可使用提供Java和关系数据库持久性的框架来解决。Hibernate框架在对象和数据库表之间提供了一个强大的高性能映射引擎。本文将使用下列技术:J2SE 5.0 JRE:http://java.sun.com/j2se Eclipse 3.1:www.eclipse.org WTP 1.0:www.eclipse.org/webtools Tomcat 5.0:http://jakarta.apache.org/tomcat/ MySQL 4.0.25:www.mysql.com MySQL Connector/J driver 3.1:www.mysql.com/products/connector/j/ Struts 1.1:http://struts.apache.org Hibernate 3...www.hibernate.org 应用程序概述我们再扼要重述一下上次我们做了些什么。该基本Web应用程序实现了下列用例:顾客必须在站点注册以下单 顾客可以下单 顾客可以浏览自己的订单 管理员可以列出全部已注册顾客该系统使用通用servlet/jsp编程模型、MySQL数据库以及Tomcat应用服务器实现。系统域模型由Customer(顾客)和Order(订单)两个类表示(参见图1)。

创建了两个对应的数据库表CUSTOMERS和ORDERS来表示这些对象所持有的数据。还创建了4个负责执行上述用例的数据库命令类,以及四个作为控制器的Servlet,来收集用户输入信息,调用这些命令,并将响应转发给适当的JSP。CommandExecutor类负责使用Tomcat连接池处理数据库连接。添加Struts支持使用File-Import选项并选择要导入的WAR文件,将DBTestWAR文件导入Eclipse工作空间。如果工作空间中没有DBTest项目,上述操作就可以了。如果工作空间中已经有了DBTest项目,在Navigator视图的已有项目上右击,然后选择复制和粘贴,保存现有项目。当提示输入新项目名称时,选择DBTestStruts作为新项目名,以便不会覆盖现有项目。现在,为添加Struts支持,必须将下列文件复制到WEB-INFlib文件夹:struts.jar、commons-lang.jar、commons-collections.jar、commons-beanutils.jar、commons-validator.jar、commons-logging.jar、commons-digester.jar、commons-fileupload.jar。上述所有文件均可从Struts Web站点下载获得,这些文件包含Struts framework以及相应的Apache Commons包,这些包是处理诸如国际化、集合操作、实用工具、验证、日志记录、digester以及文件上传操作等特性所必需的。上述均为Struts支持的组件。本文不会用到上述所有功能,但是Struts依赖于其中的许多功能,例如,在解析Struts配置文件时就会大量用到digester功能。当需要使用日志记录、文件上传等服务时,这些功能就会派上用处。因此,要将下列文件添加到WEB-INF文件夹中:struts-config.xml、struts-bean.tld、struts-html.tld、struts-logic.tld、struts-nested.tld、struts-template.tld、struts-tiles.tld。其中struts-config.xml文件最为重要,该文件是Struts框架的主要配置文件,包含有所有的动作映射、数据源、插件等的定义。参见清单1中的例子。清单1:Struts配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
<!-- Data Sources -->
<data-sources>
</data-sources>
<!-- Form Beans -->
<form-beans>
</form-beans>
<!-- Global Exceptions -->
<global-exceptions>
</global-exceptions>
<!-- Global Forwards -->
<global-forwards>
</global-forwards>
<!-- Action Mappings -->
<action-mappings>
</action-mappings>
</struts-config>