摘 要: 針對目前Web項目開發(fā)面臨的諸多問題,結(jié)合當今流行的SSH(Struts+Spring+Hibernate)開源框架,,通過如何進行環(huán)境搭建,、配置文件設置、開發(fā)流程描述等,,給出了進行Web項目開發(fā)的全過程,,以幫助項目初學者和開發(fā)人員快速搭建架構(gòu)清晰,、可復用性好、維護方便的企業(yè)級Web項目,。最后,,通過具體案例實施說明方案的可行性。
關鍵詞: Web,;Struts,;Spring;Hibernate SSH
大,、中型企業(yè)級Web項目開發(fā)通常需要有一個良好的軟件架構(gòu),,便于協(xié)同工作和擴展升級,而傳統(tǒng)的開發(fā)模式在一定程度上滿足不了這些要求,。本文結(jié)合當今主流的框架技術(shù):基于MVC模式的Struts框架,、基于IoC模式的Spring框架以及對象/關系映射框架Hibernate,通過如何將這3種規(guī)范進行有機整合,,形成SSH框架[1-2],,使他們之間既相對獨立,又相互協(xié)作,,是要思考的問題,。
1 框架技術(shù)
Java框架如同建筑中的框架式結(jié)構(gòu)。使用了框架(鋼筋+混凝土)以后,,所專注的只是業(yè)務(非承重墻構(gòu)建不同格局),,當然是在遵守框架的協(xié)議上開發(fā)業(yè)務。好的框架都是松耦合的,、易配置的,。正如著名的軟件大師RALPH JOHNSON對框架(Framework)進行了如下的定義:框架是整個系統(tǒng)或系統(tǒng)的一部分可重用設計,由一組抽象的類及其實例間的相互作用方式組成[3],。
通俗一點講:“為了完成一個整體功能,,對實現(xiàn)這個功能的Java類的一種分工規(guī)范。”這種思想在多人合作開發(fā)一個大,、中型項目時尤為必要,。
2 軟件環(huán)境搭建及注意事項
2.1 JAVA安裝與配置JDK(Java Development Kit)
運行下載的“jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.exe”軟件包,在安裝過程中可以設置安裝路徑及選擇組件,,默認的組件選擇是全部安裝,,安裝成功后一定要注意環(huán)境變量JavaHome、path,、classpath配置和編輯[4],。具體配置如下:
系統(tǒng)變量:JavaHome,值為“D:\Program Files\Java\ jdk1.6.0_10”(即jdk安裝的主目錄),。
系統(tǒng)變量:path,,在“變量值”欄的命令后添加“,;%JavaHome%\bin”。
系統(tǒng)變量:classpath,,值為“.;%JavaHome%\lib”,,其中“.”表示當前目錄,。
設置完上述3個變量后,單擊“開始”—“所有程序”—“附件”—“命令提示符”打開DOS窗口,,在命令行提示符后輸入“java”或“javac”回車后,,如果出現(xiàn)其用法參數(shù)提示信息,則安裝正確,。
2.2 數(shù)據(jù)庫安裝(Mysql)
運行下載的“mysql-essential-5.0.87-win32.msi”軟件包,,在安裝過程中選擇“Custom”安裝類別,可方便熟悉安裝過程,??梢宰远x安裝路徑,建議不要放在與操作系統(tǒng)同一分區(qū),,這樣可以防止系統(tǒng)備份還原的時候,,數(shù)據(jù)被清空。設置完后,,按“Install”開始安裝,,直到出現(xiàn)“finish”界面。在“finish”界面,,選中“Configure the Mysql Server now”,,點“Finish”結(jié)束軟件的安裝并啟動mysql配置向?qū)А_x擇“Detailed Configuration” 配置方式,,方便熟悉配置過程,。在選擇服務器類型時選“Server Machine”。在數(shù)據(jù)庫的大致用途時選擇“Multifunctional Database”,,按“Next”繼續(xù),。在選擇網(wǎng)站的一般mysql訪問量時選“Decision Support(DSS)/OLAP)”,按“Next”繼續(xù),。在對mysql默認數(shù)據(jù)庫語言編碼進行設置,,選擇第3個,然后在Character Set下選擇或填入“gbk”,,當然也可以用“gb2312”,,就可以正常的使用漢字(或其他文字)了,否則不能正常顯示漢字,。這里選“gb2312”,,按“Next”繼續(xù),,設置完畢,直到“Finish”界面,。按“Finish”結(jié)束,,mysql的安裝與配置就啟動了。注意,,這里有一個常見的錯誤,,最后一步不能“Start service”,出現(xiàn)這種現(xiàn)象是以前安裝過mysql在服務器上,,解決的辦法是先保證以前安裝的mysql服務器徹底卸載掉或檢查是否按上一步所說,,之前的密碼是否有修改,照上面的操作,;如果依然出錯,,將mysql安裝目錄下的data文件夾備份,然后刪除,,在安裝完成后,,將安裝生成的data文件夾刪除,備份的data文件夾移回來,,再重啟mysql服務就可以了,,這種情況下,需要將數(shù)據(jù)庫檢查一下,,然后修復一次,,防止數(shù)據(jù)出錯。
2.3 安裝Apache Tomcat
直接將下載的“apache-tomcat-7.0.5”文件復制到指定路徑(可以不放置在jdk安裝的目錄中),。按照安裝向?qū)нM行安裝,,中間須注意選擇Tomcat運行所需的jre,沒有jre將不能進行后續(xù)安裝,,直到出現(xiàn)“Finish”界面,。
2.4 Myeclipse安裝與設置
運行下載的“myeclipse-10.1-offline-installer-windows.exe”軟件包,在安裝過程中可以設置安裝路徑及選擇組件,,完成后進行preferences設置:進入window—Preferences,,在type filter text過濾器中輸入要配置的東西:首先設置默認的全局JRE;其次設置工作空間全局編碼:選擇UTF-8,;最后修改文件默認編碼,。否則對于漢字容易出現(xiàn)亂碼。
最后,,若已經(jīng)安裝了Tomcat,,在MyEclipse中配置Tomcat。從Preferences左側(cè)菜單下找到MyEclipse,,打開其中的Servers項,,找到Tomcat,,選擇安裝的版本,此處可選擇“Tomcat7.x”,,將其設為Enable,,在Browse...目錄下選擇Tomcat的安裝目錄即可。
到此,,框架的運行環(huán)境基本就搭建起來了,,接下來開始進行配置文件的設置。
3 SSH(Struts+Spring+Hibernate)框架配置文件設置
首先創(chuàng)建Java-Web Project工程(工程名為Demo1),,為了以后不要再找包,把所有的包都復制到/WebRoot /WEB-INF/lib目錄下,,在以后用到時直接導入,。
3.1 配置Struts[5]
(1)創(chuàng)建struts.xml文件(注意:一定要在src根目錄下)
struts.xml文件主要負責管理應用中的Action映射,,以及該Action包含的Result定義等,。struts.xml內(nèi)容主要包括:Action、Interceptor,、Packages和Namespace等,。
代碼如下:
<?xml version="1.0"encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts
Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true"/>
<package name="front" extends="struts-default"
namespace="/">
<action name="init" class="com.snbcedu.
system.UserAction" method="init">
<result name="success">/WEB-INF/init.
jsp</result>
</action>
</package>
</struts>
(2)配置web.xml文件,添加Struts的核心控制器
代碼如下:
<,?xml version="1.0" encoding="UTF-8",?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
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">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.
StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/classes/applicationContext.xml
</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
</web-app>
測試發(fā)布,Struts2開發(fā)環(huán)境配置完畢,。每當配置完成一個開發(fā)組件時,,在tomcat發(fā)布一下,以便容易查找錯誤,,否則全部環(huán)境配置完畢,,不便于查錯。
3.2 配置Spring
創(chuàng)建Spring配置文件applictionContext.xml,,Spring如何知道Hibernate的存在,,這就是Spring的魅力所在,它讓依賴性的綁定變得非常簡單,。
applicationContext.xml代碼如下:
<,?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<context:annotation-config/>
<context:component-scan base-package="com.snbcedu.system"/>
<context:property-placeholder
location="WEB-INF/classes/jdbc.properties"/>
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"value="
${driverName}"></property>
<property name="url" value="${url}"></property>
<property name="username"value="${username}"
></property>
<property name="password"value="${password}"><
/property>
<property name="maxActive"value="30">
</property>
<property name="maxIdle" value="10"></property>
<property name="minIdle" value="5"></property>
<property name="maxWait"value="5000">
</property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.
AnnotationSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
<property name="packagesToScan">
<list>
<value>com.snbcedu.system</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org
.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
</beans>
3.3 配置Hibernate
在此之前先創(chuàng)建數(shù)據(jù)庫,,接下來進行jdbc.properties配置,,代碼如下:
driverName=com.mysql.jdbc.Driver
url=jdbc\:mysql\://localhost\:3306/security
username=root
password=870928
4 Web項目開發(fā)步驟
在具體開發(fā)前要做的預備工作:用mysql先創(chuàng)建一個security數(shù)據(jù)庫,然后創(chuàng)建user表和userinfo表,,完成后按照下述步驟進行項目開發(fā),。
?。?)創(chuàng)建項目(file-new-web project)Demo1。
?。?)復制java類庫(import或者直接從已有的項目中復制,,放置在WebRoot-(WEB-INF)-Lib中。
?。?)在src下建立包,。選中src,點右鍵:依次new-package,,輸入包名,,如:com.snbcedu.system(必須以com開始)。接下來依次創(chuàng)建applicationContext.xml,,jdbc.properties(DB配置),,struts.xml配置。
?。?)創(chuàng)建文件夾src/entity,,選中項目名,點右鍵依次選擇new-source folder,。在此文件夾下首先創(chuàng)建包(包名為com.snbcedu.system),,然后在包下再創(chuàng)建類(類名就是數(shù)據(jù)庫中的表名),先選中包名,,點右鍵依次選擇new-class,。完成后,開始創(chuàng)建類,,在此注意兩點[7]:@Entity,、@Id與@GeneratedValue(strategy=GenerationType.AUTO)的使用,最后在空白位置點右鍵,,依次選source-generate setters and getters,。
(5)創(chuàng)建文件夾src/java,,選中項目名,,點右鍵依次選擇new-source folder。然后在包下再依次創(chuàng)建Dao,、Service,、Action。
?、賱?chuàng)建Dao[8],。在創(chuàng)建之前先創(chuàng)建包(包名為com.snbcedu.system.dao),依次創(chuàng)建UserDao與UserDaoImpl,UserInfoDao與UserInfoDaoImpl兩組,,在創(chuàng)建之前先復制AGenericHibernateDao.java和IGenericDao.java兩個類,。出錯處理:先刪掉有問題的包,然后建立com.snbcedu.system.util包,,復制PageBean.java類到該包下,,最后再重新導入即可。
?、趧?chuàng)建Service[9],。在創(chuàng)建之前先創(chuàng)建包(包名為com.snbcedu.system.service),依次創(chuàng)建UserService,、UserInfoService,、UserLoginService 3個接口與UserServiceImp、UserInfoServiceImp,、UserLoginServiceImp 3個類,。
③創(chuàng)建Action[10],。在創(chuàng)建之前先創(chuàng)建包(包名為com.snbcedu.system.action),創(chuàng)建UserLoginAction之前,,先復制BaseAction.java,、HomeAction.java、HTHomeAction.java這3個包,。
?。?)在WebRoot-js下建立user_login.js文件。先建立js文件夾,,復制common.js,、init.js、jquery.js 3個文件后創(chuàng)建user_login.js,。
?。?)在WebRoot-(WEB-INF)-jsp下建立user_login.jsp。先建立jsp文件夾,,選中后點右鍵,,依次new-jsp。
?。?)部署,、發(fā)布項目。
通過上述配置,,一個項目的基本框架就基本形成了,,如圖1所示。
通過以上分析和應用,人們可能有一個疑問,,Spring如何以一個外部XML配置文件實現(xiàn)各種功能呢,?這其實沒有任何神秘而言,每個框架都有許多類包,,這些類包就是專門實現(xiàn)這些事情的,。類包是如何介入寫的類代碼或其他框架的呢?當然必須通過一定途徑才能調(diào)用其他類代碼,,有時Spring把這個細節(jié)隱藏了起來,,使人們感到不可思議,細究一下,,不難發(fā)現(xiàn)不外乎通過這兩種方式調(diào)用其他類代碼:一是把類寫在它的配置文件里,,二是類繼承它的接口。到此,,對SSH框架有了一個初步了解,,同時對于大、中型企業(yè)級Web項目開發(fā)流程也有了一個清楚的認識,,相信對項目初學者和開發(fā)人員快速搭建架構(gòu)清晰,、可復用性好、維護方便的企業(yè)級Web項目有直接的借鑒作用,。
參考文獻
[1] 陳亞輝,,繆勇.Structs+Spring+Hibernate框架技術(shù)與項目實戰(zhàn)[M].北京:清華大學出版社,2012.
[2] 李剛.輕量級Java EE企業(yè)應用實戰(zhàn)(第3版)—Structs+Spring+Hibernate整合開發(fā)[M].北京:電子工業(yè)出版社,,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框架技術(shù)下的WEB項目的研究與實現(xiàn)[J].數(shù)字技術(shù)與應用,,2012(10):126-127.
[8] 鄧榮.Linux平臺下基于Open SSH的安全遠程登錄服務的設計與實現(xiàn)[J].電腦知識與技術(shù),,2010(11):8970-8971.
[9] 王愛松,姜楠,,白鳳珍.以SSH協(xié)議為基礎加強高校校園網(wǎng)信息化安全[J].內(nèi)蒙古民族大學學報(自然科學版),,2008(6):626-628.
[10] 簡思遠.基于SSH架構(gòu)的高校校園網(wǎng)站備案系統(tǒng)的構(gòu)建[J].福建電腦,2010(5):125-126.