摘 要: 針對目前Web項目開發(fā)面臨的諸多問題,,結合當今流行的SSH(Struts+Spring+Hibernate)開源框架,通過如何進行環(huán)境搭建,、配置文件設置,、開發(fā)流程描述等,給出了進行Web項目開發(fā)的全過程,,以幫助項目初學者和開發(fā)人員快速搭建架構清晰,、可復用性好、維護方便的企業(yè)級Web項目,。最后,,通過具體案例實施說明方案的可行性。
關鍵詞: Web,;Struts,;Spring;Hibernate SSH
大,、中型企業(yè)級Web項目開發(fā)通常需要有一個良好的軟件架構,,便于協同工作和擴展升級,而傳統(tǒng)的開發(fā)模式在一定程度上滿足不了這些要求,。本文結合當今主流的框架技術:基于MVC模式的Struts框架,、基于IoC模式的Spring框架以及對象/關系映射框架Hibernate,通過如何將這3種規(guī)范進行有機整合,,形成SSH框架[1-2],,使他們之間既相對獨立,又相互協作,,是要思考的問題,。
1 框架技術
Java框架如同建筑中的框架式結構。使用了框架(鋼筋+混凝土)以后,所專注的只是業(yè)務(非承重墻構建不同格局),,當然是在遵守框架的協議上開發(fā)業(yè)務。好的框架都是松耦合的,、易配置的,。正如著名的軟件大師RALPH JOHNSON對框架(Framework)進行了如下的定義:框架是整個系統(tǒng)或系統(tǒng)的一部分可重用設計,由一組抽象的類及其實例間的相互作用方式組成[3],。
通俗一點講:“為了完成一個整體功能,,對實現這個功能的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”回車后,,如果出現其用法參數提示信息,則安裝正確,。
2.2 數據庫安裝(Mysql)
運行下載的“mysql-essential-5.0.87-win32.msi”軟件包,,在安裝過程中選擇“Custom”安裝類別,可方便熟悉安裝過程,??梢宰远x安裝路徑,建議不要放在與操作系統(tǒng)同一分區(qū),,這樣可以防止系統(tǒng)備份還原的時候,,數據被清空。設置完后,按“Install”開始安裝,,直到出現“finish”界面,。在“finish”界面,選中“Configure the Mysql Server now”,,點“Finish”結束軟件的安裝并啟動mysql配置向導,。選擇“Detailed Configuration” 配置方式,方便熟悉配置過程,。在選擇服務器類型時選“Server Machine”,。在數據庫的大致用途時選擇“Multifunctional Database”,按“Next”繼續(xù),。在選擇網站的一般mysql訪問量時選“Decision Support(DSS)/OLAP)”,,按“Next”繼續(xù)。在對mysql默認數據庫語言編碼進行設置,,選擇第3個,,然后在Character Set下選擇或填入“gbk”,當然也可以用“gb2312”,,就可以正常的使用漢字(或其他文字)了,,否則不能正常顯示漢字。這里選“gb2312”,,按“Next”繼續(xù),,設置完畢,直到“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將不能進行后續(xù)安裝,直到出現“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的安裝目錄即可,。
到此,,框架的運行環(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內容主要包括: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)建數據庫,接下來進行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數據庫,,然后創(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)建類(類名就是數據庫中的表名),,先選中包名,點右鍵依次選擇new-class,。完成后,,開始創(chuàng)建類,在此注意兩點[7]:@Entity,、@Id與@GeneratedValue(strategy=GenerationType.AUTO)的使用,,最后在空白位置點右鍵,依次選source-generate setters and getters,。
?。?)創(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,。
(8)部署,、發(fā)布項目,。
通過上述配置,一個項目的基本框架就基本形成了,,如圖1所示,。
通過以上分析和應用,人們可能有一個疑問,,Spring如何以一個外部XML配置文件實現各種功能呢,?這其實沒有任何神秘而言,每個框架都有許多類包,,這些類包就是專門實現這些事情的,。類包是如何介入寫的類代碼或其他框架的呢?當然必須通過一定途徑才能調用其他類代碼,,有時Spring把這個細節(jié)隱藏了起來,,使人們感到不可思議,細究一下,,不難發(fā)現不外乎通過這兩種方式調用其他類代碼:一是把類寫在它的配置文件里,,二是類繼承它的接口。到此,,對SSH框架有了一個初步了解,,同時對于大、中型企業(yè)級Web項目開發(fā)流程也有了一個清楚的認識,,相信對項目初學者和開發(fā)人員快速搭建架構清晰,、可復用性好、維護方便的企業(yè)級Web項目有直接的借鑒作用,。
參考文獻
[1] 陳亞輝,,繆勇.Structs+Spring+Hibernate框架技術與項目實戰(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框架技術下的WEB項目的研究與實現[J].數字技術與應用,2012(10):126-127.
[8] 鄧榮.Linux平臺下基于Open SSH的安全遠程登錄服務的設計與實現[J].電腦知識與技術,,2010(11):8970-8971.
[9] 王愛松,,姜楠,白鳳珍.以SSH協議為基礎加強高校校園網信息化安全[J].內蒙古民族大學學報(自然科學版),,2008(6):626-628.
[10] 簡思遠.基于SSH架構的高校校園網站備案系統(tǒng)的構建[J].福建電腦,,2010(5):125-126.