摘 要:针对目前Web项目开发面临的诸多问题,结合当今流行的SSH(Struts+Spring+Hibernate)开源框架,通过如何进行环境搭建、配置文件设置、开发流程描述等,给出了进行Web项目开发的全过程,以帮助项目初学者和开发人员快速搭建架构清晰、可复用性好、维护方便的企业级Web项目。最后,通过具体案例实施说明方案的可行性。
关键词:Web;Struts;Spring;Hibernate SSH
大、中型企业级Web项目开发通常需要有一个良好的软件架构,便于协同工作和扩展升级,而传统的开发模式在一定程度上满足不了这些要求。本文结合当今主流的框架技术:基于MVC模式的Struts框架、基于IoC模式的Spring框架以及对象/关系映射框架Hibernate,通过如何将这3种规范进行有机整合,形成SSH框架[1-2],使他们之间既相对独立,又相互协作,是要思考的问题。
1 框架技术
Java框架如同建筑中的框架式结构。使用了框架(钢筋+混凝土)以后,所专注的只是业务(非承重墙构建不同格局),当然是在遵守框架的协议上开发业务。好的框架都是松耦合的、易配置的。正如著名的软件大师RALPH JOHNSON对框架(Framework)进行了如下的定义:框架是整个系统或系统的一部分可重用设计,由一组抽象的类及其实例间的相互作用方式组成[3]。
通俗一点讲:“为了完成一个整体功能,对实现这个功能的Java类的一种分工规范。”这种思想在多人合作开发一个大、中型项目时尤为必要。
2 软件环境搭建及注意事项
2.1 JAVA安装与配置JDK(Java Development Kit)
运行下载的“jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.exe”软件包,在安装过程中可以设置安装路径及选择组件,默认的组件选择是全部安装,安装成功后一定要注意环境变量JavaHome、path、classpath配置和编辑[4]。具体配置如下:
系统变量:JavaHome,值为“D:\Program Files\Java\ jdk1.6.0_10”(即jdk安装的主目录)。
系统变量:path,在“变量值”栏的命令后添加“;%JavaHome%\bin”。
系统变量:classpath,值为“.;%JavaHome%\lib”,其中“.”表示当前目录。
设置完上述3个变量后,单击“开始”—“所有程序”—“附件”—“命令提示符”打开DOS窗口,在命令行提示符后输入“java”或“javac”回车后,如果出现其用法参数提示信息,则安装正确。
2.2 数据库安装(Mysql)
运行下载的“mysql-essential-5.0.87-win32.msi”软件包,在安装过程中选择“Custom”安装类别,可方便熟悉安装过程。可以自定义安装路径,建议不要放在与操作系统同一分区,这样可以防止系统备份还原的时候,数据被清空。设置完后,按“Install”开始安装,直到出现“finish”界面。在“finish”界面,选中“Configure the Mysql Server now”,点“Finish”结束软件的安装并启动mysql配置向导。选择“Detailed Configuration” 配置方式,方便熟悉配置过程。在选择服务器类型时选“Server Machine”。在数据库的大致用途时选择“Multifunctional Database”,按“Next”继续。在选择网站的一般mysql访问量时选“Decision Support(DSS)/OLAP)”,按“Next”继续。在对mysql默认数据库语言编码进行设置,选择第3个,然后在Character Set下选择或填入“gbk”,当然也可以用“gb2312”,就可以正常的使用汉字(或其他文字)了,否则不能正常显示汉字。这里选“gb2312”,按“Next”继续,设置完毕,直到“Finish”界面。按“Finish”结束,mysql的安装与配置就启动了。注意,这里有一个常见的错误,最后一步不能“Start service”,出现这种现象是以前安装过mysql在服务器上,解决的办法是先保证以前安装的mysql服务器彻底卸载掉或检查是否按上一步所说,之前的密码是否有修改,照上面的操作;如果依然出错,将mysql安装目录下的data文件夹备份,然后删除,在安装完成后,将安装生成的data文件夹删除,备份的data文件夹移回来,再重启mysql服务就可以了,这种情况下,需要将数据库检查一下,然后修复一次,防止数据出错。
2.3 安装Apache Tomcat
直接将下载的“apache-tomcat-7.0.5”文件复制到指定路径(可以不放置在jdk安装的目录中)。按照安装向导进行安装,中间须注意选择Tomcat运行所需的jre,没有jre将不能进行后续安装,直到出现“Finish”界面。
2.4 Myeclipse安装与设置
运行下载的“myeclipse-10.1-offline-installer-windows.exe”软件包,在安装过程中可以设置安装路径及选择组件,完成后进行preferences设置:进入window—Preferences,在type filter text过滤器中输入要配置的东西:首先设置默认的全局JRE;其次设置工作空间全局编码:选择UTF-8;最后修改文件默认编码。否则对于汉字容易出现乱码。
最后,若已经安装了Tomcat,在MyEclipse中配置Tomcat。从Preferences左侧菜单下找到MyEclipse,打开其中的Servers项,找到Tomcat,选择安装的版本,此处可选择“Tomcat7.x”,将其设为Enable,在Browse...目录下选择Tomcat的安装目录即可。
到此,框架的运行环境基本就搭建起来了,接下来开始进行配置文件的设置。
3 SSH(Struts+Spring+Hibernate)框架配置文件设置
首先创建Java-WebProject工程(工程名为Demo1),为了以后不要再找包,把所有的包都复制到/WebRoot /WEB-INF/lib目录下,在以后用到时直接导入。
3.1 配置Struts[5]
(1)创建struts.xml文件(注意:一定要在src根目录下)
struts.xml文件主要负责管理应用中的Action映射,以及该Action包含的Result定义等。struts.xml内容主要包括:Action、Interceptor、Packages和Namespace等。
代码如下:
"-//Apache Software Foundation//DTD Struts
Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
jsp
(2)配置web.xml文件,添加Struts的核心控制器
代码如下:
<?xml version="1.0" encoding="UTF-8"?>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
StrutsPrepareAndExecuteFilter
/WEB-INF/classes/applicationContext.xml
org.springframework.web.context.ContextLoaderListener
测试发布,Struts2开发环境配置完毕。每当配置完成一个开发组件时,在tomcat发布一下,以便容易查找错误,否则全部环境配置完毕,不便于查错。
3.2 配置Spring
创建Spring配置文件applictionContext.xml,Spring如何知道Hibernate的存在,这就是Spring的魅力所在,它让依赖性的绑定变得非常简单。
applicationContext.xml代码如下:
<?xml version="1.0" encoding="UTF-8"?>
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"
default-autowire="byName">
/property>
AnnotationSessionFactoryBean">
.hibernate.dialect.MySQLDialect
3.3 配置Hibernate
在此之前先创建数据库,接下来进行jdbc.properties配置,代码如下:
driverName=com.mysql.jdbc.Driver
url=jdbc\:mysql\://localhost\:3306/security
username=root
password=870928
4 Web项目开发步骤
在具体开发前要做的预备工作:用mysql先创建一个security数据库,然后创建user表和userinfo表,完成后按照下述步骤进行项目开发。
(1)创建项目(file-new-web project)Demo1。
(2)复制java类库(import或者直接从已有的项目中复制,放置在WebRoot-(WEB-INF)-Lib中。
(3)在src下建立包。选中src,点右键:依次new-package,输入包名,如:com.snbcedu.system(必须以com开始)。接下来依次创建applicationContext.xml,jdbc.properties(DB配置),struts.xml配置。
(4)创建文件夹src/entity,选中项目名,点右键依次选择new-source folder。在此文件夹下首先创建包(包名为com.snbcedu.system),然后在包下再创建类(类名就是数据库中的表名),先选中包名,点右键依次选择new-class。完成后,开始创建类,在此注意两点[7]:@Entity、@Id与@GeneratedValue(strategy=GenerationType.AUTO)的使用,最后在空白位置点右键,依次选source-generate setters and getters。
(5)创建文件夹src/java,选中项目名,点右键依次选择new-source folder。然后在包下再依次创建Dao、Service、Action。
①创建Dao[8]。在创建之前先创建包(包名为com.snbcedu.system.dao),依次创建UserDao与UserDaoImpl,UserInfoDao与UserInfoDaoImpl两组,在创建之前先复制AGenericHibernateDao.java和IGenericDao.java两个类。出错处理:先删掉有问题的包,然后建立com.snbcedu.system.util包,复制PageBean.java类到该包下,最后再重新导入即可。
②创建Service[9]。在创建之前先创建包(包名为com.snbcedu.system.service),依次创建UserService、UserInfoService、UserLoginService 3个接口与UserServiceImp、UserInfoServiceImp、UserLoginServiceImp 3个类。
③创建Action[10]。在创建之前先创建包(包名为com.snbcedu.system.action),创建UserLoginAction之前,先复制BaseAction.java、HomeAction.java、HTHomeAction.java这3个包。
(6)在WebRoot-js下建立user_login.js文件。先建立js文件夹,复制common.js、init.js、jquery.js 3个文件后创建user_login.js。
(7)在WebRoot-(WEB-INF)-jsp下建立user_login.jsp。先建立jsp文件夹,选中后点右键,依次new-jsp。
(8)部署、发布项目。
通过上述配置,一个项目的基本框架就基本形成了,如图1所示。
通过以上分析和应用,人们可能有一个疑问,Spring如何以一个外部XML配置文件实现各种功能呢?这其实没有任何神秘而言,每个框架都有许多类包,这些类包就是专门实现这些事情的。类包是如何介入写的类代码或其他框架的呢?当然必须通过一定途径才能调用其他类代码,有时Spring把这个细节隐藏了起来,使人们感到不可思议,细究一下,不难发现不外乎通过这两种方式调用其他类代码:一是把类写在它的配置文件里,二是类继承它的接口。到此,对SSH框架有了一个初步了解,同时对于大、中型企业级Web项目开发流程也有了一个清楚的认识,相信对项目初学者和开发人员快速搭建架构清晰、可复用性好、维护方便的企业级Web项目有直接的借鉴作用。
参考文献
[1] 陈亚辉,缪勇.Structs+Spring+Hibernate框架技术与项目实战[M].北京:清华大学出版社,2012.
[2] 李刚.轻量级Java EE企业应用实战(第3版)—Structs+Spring+Hibernate整合开发[M].北京:电子工业出版社,2013.
[3] GAMMA E, HELM R, JOHNSON R, et al. Design patterns: Elements of reusable object-oriented software[M]. Addison Wesley, 2000.
[4] 计磊,李里,周伟.精通J2EE—EclipseStruts Hibernate Spring整合应用案例[M].北京:人民邮电出版社,2006.
[5] 李宁.Struts2教程3:struts.xml常用配置解析[OL].[2008-04-16](2013-4-12)http://www.blogjava.net/nokiaguy/archive/2008/04/16/193457.html.
[6] Wesley002.搭建简单Web项目:spring3.0基础配置(1) [OL].[2010-10-27](2013-4-12)http://blog.csdn.net/wzl002/article/details/5969469
[7] 邵雪航,王大鹏.基于SSH框架技术下的WEB项目的研究与实现[J].数字技术与应用,2012(10):126-127.
[8] 邓荣.Linux平台下基于Open SSH的安全远程登录服务的设计与实现[J].电脑知识与技术,2010(11):8970-8971.
[9] 王爱松,姜楠,白凤珍.以SSH协议为基础加强高校校园网信息化安全[J].内蒙古民族大学学报(自然科学版),2008(6):626-628.
[10] 简思远.基于SSH架构的高校校园网站备案系统的构建[J].福建电脑,2010(5):125-126.