李健 田立鋒 郭瑞
(海洋石油工程股份有限公司,天津 300451)
Java SSH框架在Java Web中的應(yīng)用
李健 田立鋒 郭瑞
(海洋石油工程股份有限公司,天津 300451)
SSH框架是Java Web開發(fā)的常見技術(shù)框架集合,包含Struts、Hibernate和Spring三個框架,這三個框架在具體開發(fā)應(yīng)用側(cè)重點都有所不同,各自管理的代碼范圍也有著較大的區(qū)別,當(dāng)前應(yīng)用SSH框架集進行Java Web項目的開發(fā)是web開發(fā)過程中非常流行的開發(fā)模式。本文通過對SSH框架進行簡單介紹,探討各自框架在web領(lǐng)域具體應(yīng)用以及Java Web框架技術(shù)的發(fā)展展望,使得讀者能夠通過本文快速了解SSH框架及相關(guān)技術(shù),同時為開發(fā)人員進行快速開發(fā)提供有效參考。
Java;ssh框架;Java Web;應(yīng)用
Java于1995由sun公司推出(現(xiàn)被oracle收購),當(dāng)前Java最新版本為Java 9.0,Java是一種面向?qū)ο蟮拈_發(fā)語言,其主要有三大體系,分別為Java Se、Java Me以及Java EE。Java語言目前常見的開發(fā)形式主要體現(xiàn)在web方面、android方面以及當(dāng)前炙手可熱的云計算方面,在桌面類型開發(fā)相對較少。Java以其獨特的健壯性、高性能以及跨平臺性等特點深受廣大開發(fā)者的追捧。
Java Web是利用Java技術(shù)解決web問題的技術(shù)集。web應(yīng)用通常有兩方面的內(nèi)容,即表現(xiàn)層和服務(wù)器層。表現(xiàn)層所運用的技術(shù)包括HTML、CSS、JavaScript(包含常見的JS應(yīng)用集ext、jquery、Node.js等)、FreeMarker、Velocity、JSP等,而服務(wù)器層則更多的由Java技術(shù)集來處理,如常見的Servlet技術(shù)、Java Data Base Connectivity技術(shù)、Struts框架、JSF框架、Hibernate框架、ibatis框架、Spring框架等。正是由于Java技術(shù)如此豐富的工具集,使得Java語言在web開發(fā)中占有舉足輕重的作用。需要提及的是,正因為Java技術(shù)集的龐雜,使得Java Web開發(fā)的復(fù)雜度較傳統(tǒng)開發(fā)web開發(fā)有了一定的難度,一些輕量級web開發(fā)技術(shù)如PHP也迅速發(fā)展壯大,給Java開發(fā)帶來了巨大的挑戰(zhàn)。總之,Java Web是當(dāng)前十分流行web開發(fā)技術(shù),也是諸多程序員和軟件公司青睞的技術(shù)流,相信隨著Java技術(shù)的發(fā)展,Java在web方面的必將展現(xiàn)出其強大生命力和技術(shù)適應(yīng)能力。
2.1 Struts框架的具體應(yīng)用過程
本文主要就Struts2進行應(yīng)用介紹。Struts的具體應(yīng)用主要體現(xiàn)在三方面,首先是struts.xml文件的配置,Struts框架通過“包”的形式來管理各類action和攔截器,如下文所示:
〈!--定義包名以及包的繼承屬性--〉
〈package name="default"extends="struts-default"〉
……
〈!--定義處理action--〉
〈action name="XXX"class="XXX.action"〉
〈!--定義JSP資源和請求結(jié)果的映射關(guān)系--〉
〈result name="success"〉/success.jsp〈/result〉
〈result name="error"〉/error.jsp〈/result〉
〈/action〉
……
〈/package〉
攔截器的定義類似于action的定義,具體請參考相關(guān)文檔。其次,在配置好struts.xml就要進行相關(guān)action類的定義,action類通常繼承actionSupport類,然后定義好相關(guān)JavaBean的屬性,并為其生成set/get方法,最后是execute方法的描述,execute則是調(diào)用相關(guān)的業(yè)務(wù)處理邏輯進行判斷,然后根據(jù)返回的具體字段,結(jié)合上述struts.xml的配置,進行相應(yīng)視圖的跳轉(zhuǎn),其大致的編寫過程如下:
public class XXXaction extendsactionSupport{
……
//定義相關(guān)屬性(或者直接應(yīng)用Javabean)
private String Property1;
private String Property2;
……
//get set方法定義
//請求處理的方法
public String execute()throws Exception{
if( //業(yè)務(wù)邏輯1)
return this.SUCCESS;
else{
return this.ERROR;
}
……
}
最后則是JSP頁面的編制過程,JSP頁面也就是最終展現(xiàn)在用戶面前的網(wǎng)頁代碼,主要是html編碼加上JSP的一些特殊標簽構(gòu)成的,當(dāng)然Struts也提供了自身的一些標簽,可供開發(fā)者選用。需要注意的是,Struts框架也提供了異常處理機制,開發(fā)人員可根據(jù)自身需求進行應(yīng)用。上文所述的只是Struts框架在應(yīng)用的時候最為核心的應(yīng)用過程,Java版本的更新也提供了annotation等形式的零配置類型開發(fā)方式,本文在此就不再介紹。
2.2 Hibernate框架的具體應(yīng)用過程
Hibernate配置應(yīng)用過程體現(xiàn)在四個方面:
第一,hibernate.cfg.xml,具體如下:
……
//項目所用數(shù)據(jù)庫用戶名
〈property name="connection.username" 〉username〈/ property〉
//MySQL數(shù)據(jù)庫鏈接URL以及端口的配置
〈property name="connection.url"〉jdbc:mysql://XXXXX: 3306/所用數(shù)據(jù)庫名〈/property〉
//數(shù)據(jù)庫方言配置
〈property name="dialect"〉org.hibernate.dialect.MySQLDialect〈/property〉
//數(shù)據(jù)庫密碼
〈property name="connection.password"〉XXXXX〈/property〉
//相關(guān)數(shù)據(jù)庫驅(qū)動
〈property name="connection.driver_class"〉具體數(shù)據(jù)庫驅(qū)動〈/property〉
//Hibernate映射文件路徑
〈mapping resource="包名.hbm.xml"/〉
……
第二,即相應(yīng)hbm.xml的配置過程,通常所見的配置包括一對一、一對多、多對一和多對多這四種關(guān)系的配置,該XML配置過程是hibernate應(yīng)用的核心,也是hibernate將數(shù)據(jù)庫中的二維表轉(zhuǎn)化為面向?qū)ο缶幊痰年P(guān)鍵所在。
第三,即相關(guān)JavaBean的編寫過程,在此需要提及的是,此處的JavaBean與Struts應(yīng)用中JavaBean是同樣的類,因此,在程序設(shè)計的時候應(yīng)通盤考慮,做好JavaBean的設(shè)計工作,主要是屬性名以及get/set方法的定義。
第四,即是相關(guān)業(yè)務(wù)處理代碼的編寫,根據(jù)Hibernate框架提供的Session以及事務(wù)處理等工具類,完成數(shù)據(jù)添加、修改、刪除、查的具體工作,此外Hibernate也提供了直接訪問數(shù)據(jù)庫的一些類和方法,開發(fā)人員可以越過框架本身進行數(shù)據(jù)訪問以及持久化的操作,本文不建議開發(fā)者這樣做,如此會破壞代碼的復(fù)用性以及結(jié)構(gòu)完成性。最后,Hibernate框架與Struts框架結(jié)合點在于JavaBean類的公用以及action類中execute方法調(diào)用業(yè)務(wù)邏輯類,而業(yè)務(wù)邏輯類中代碼有可能進行數(shù)據(jù)持久化層的訪問。
2.3 Spring框架的具體應(yīng)用過程
Spring框架的具體應(yīng)用在于有機地整合了Struts框架以及Hibernate框架。首先,上文所述的數(shù)據(jù)庫配置被Spring框架進行整合,通過數(shù)據(jù)源(datasource)的配置,管理Hibernate中數(shù)據(jù)驅(qū)動、數(shù)據(jù)庫URL名以及數(shù)據(jù)庫名以及密碼等內(nèi)容,具體的配置如下文:
//數(shù)據(jù)源的配置
〈bean id="dataSource"class="org.springframework.jdbc. datasource.DriverManagerDataSource"〉
//驅(qū)動名配置
〈property name="driverClassName"〉
〈value〉具體驅(qū)動類〈/value〉
〈/property〉
//數(shù)據(jù)庫URL信息
〈property name="url"〉
〈value〉URL值〈/value〉
〈/property〉
//數(shù)據(jù)庫用戶名和密碼
〈property name="username"〉
〈value〉用戶名〈/value〉
〈/property〉
〈property name="password"〉
〈value〉密碼〈/value〉
〈/property〉
〈/bean〉
其次,JavaBean、業(yè)務(wù)類、持久化、action類、Hibernate中的事務(wù)管理類也類似于數(shù)據(jù)源的配置進行管理,比如action類的配置和JavaBean的配置:
〈!--控制層action類的配置--〉
〈bean id="XXXXaction"
class="包名.XXXXaction"scope="作用范圍"〉
〈property name="屬性名"ref="屬性引用"〉〈/property〉
〈/bean〉
……
〈!--javabean的配置--〉
〈bean id="類名ID"class="包名.類名"scope="prototype"/〉
〈/beans〉
再次,Java對象的生成方式也有所不同,Java對象不再通過new的形式生成,而是以注入的形式完成,類似于“〈bean id="對象名"class="包名.類型"〉〈/bean〉”樣式;除此之外,還有aOP的配置類型,aOP是面向切面編程,主要是對于切面的定義、切面的實現(xiàn)類定義、切面異常拋出類等內(nèi)容的定義:
〈!--切面定義--〉
〈aop:config〉
〈!--切面ID,以及所指向的類--〉
〈aop:aspect id="切面ID"ref="aspectBean"〉
〈!--切入點的定義--〉
〈aop:pointcut id="切點ID"expression="execution(*切點作用類)"/〉
〈!--切點進行前完成的業(yè)務(wù)代碼--〉
〈aop:before pointcut-ref="切點引用"method="方法名" /〉
〈aop:after-returning pointcut-ref="切點引用"method="方法名"/〉
……
〈/aop:aspect〉
面向切面編程在權(quán)限驗證、內(nèi)容傳遞、懶加載以及事務(wù)處理方面都有重要的應(yīng)用。最后Spring除了最為核心的aOP和IOC應(yīng)用以外,還有自身一些組件如SpringMVC、亂碼處理、SpringData等,為Spring的應(yīng)用提供了更多的可能。
2.4 三大框架的整合應(yīng)用
通過上文的分析可以看出,SSH三大框架在Java Web的開發(fā)過程中彼此之間都有一定的聯(lián)系,例如Struts與Hibernate的應(yīng)用結(jié)合點在于action類中execute方法,Struts框架與Spring框架的結(jié)合點在于JavaBean類對象的定義過程中,而Spring框架與Hibernate框架的整合支出在于數(shù)據(jù)源的配置過程,事務(wù)管理過程以及業(yè)務(wù)邏輯實現(xiàn)類的應(yīng)用以及aOP切面的生成過程中。三個框架之間當(dāng)然可以進行單獨的應(yīng)用,開發(fā)人員應(yīng)根據(jù)項目組的要求進行相應(yīng)技術(shù)的選擇和應(yīng)用,達到項目開發(fā)時間、項目規(guī)劃、運行可靠性以及技術(shù)可行性的最優(yōu)保障。
上文對于SSH框架的具體應(yīng)用進行了簡單的介紹,通過上文的介紹可以看出Struts、Hibernate以及Spring框架的應(yīng)用領(lǐng)域都不盡相同。Struts更多地承擔(dān)了基礎(chǔ)性視圖層和應(yīng)用層調(diào)用的角色,Hibernate則專注于對于數(shù)據(jù)持久化的應(yīng)用,應(yīng)用Hibernate實現(xiàn)了持久化層以面向?qū)ο蟮脑L問模式,而Spring更像一個大管家,通過以“bean”形式的配置,通盤地管理action、JavaBean、數(shù)據(jù)源、事務(wù)處理過程、緩存處理過程以及aOP的支持等,使得Struts和Hibernate更能夠?qū)W⒂谧陨順I(yè)務(wù)的處理,減少對于配置帶來復(fù)雜度關(guān)注,使得程序的編寫和開發(fā)過程復(fù)用性方面有了更大的提升。另外需要提及的是,大多數(shù)的軟件公司在Java Web開發(fā)過程并不局限于SSH框架的應(yīng)用,往往采取Struts+Spring+ibatis或者JSF+ HIbernate+Spring甚至于Struts+Spring+JDBC的開發(fā)框架,當(dāng)然還有一些其他的開發(fā)模式存在。本文僅僅以SSH框架對Java Web開發(fā)過程進行簡要的描述,使得讀者能夠更加深入了解Java Web的開發(fā)模式,至于在開發(fā)團隊選取具體框架進行web開發(fā)時,能夠做到胸有成竹。
本文對于Java Web的開發(fā)過程側(cè)重于服務(wù)器端的分析和闡述,在視圖層次,伴隨HTML5技術(shù)的發(fā)展以及EXT、JQuery、JavaFlex等富客戶端技術(shù)使得網(wǎng)頁的展現(xiàn)形式更加豐富多彩,同時異步刷新機制也使得網(wǎng)頁數(shù)據(jù)的更新展現(xiàn)都邁入了新的層次,一定程度上做到了與C/S模式相媲美,在此本文就不過多地進行分析了。總之,相信隨著Java技術(shù)的發(fā)展以及各種框架技術(shù)的成熟發(fā)展,Java在web領(lǐng)域依然會大放異彩。
Java語言作為面向?qū)ο笳Z言的代表,從Java applet小程序開始、再到后來Java Se、Java Me以及Java EE的齊頭并進,再到如今Java android程序開發(fā)的火爆和Java Web開發(fā)的蓬勃發(fā)展,以及以Hadoop為代表的云計算領(lǐng)域大放異彩,展現(xiàn)出了Java語言強大的生命力。本文以Java Web技術(shù)為側(cè)重點,主要講解了SSH(Struts、Hibernate、Spring)框架在web開發(fā)過程中的實際應(yīng)用,通過以實例代碼的展示和文字說明,簡要分析了SSH框架的核心應(yīng)用,限于篇幅與筆者技術(shù)能力有限,不能將各個框架的細節(jié)進行完整的展示,相信通過文本的簡要介紹,讀者一定能夠有“撥開雨霧見天日”的感覺,為踏入Java Web開發(fā)領(lǐng)域以及熟練運用SSH框架開發(fā)有所幫助。
參考文獻:
[1]韓江.基于SSH2架構(gòu)的Java Web通用權(quán)限管理的設(shè)計[J].智能計算機與應(yīng)用,2014,02:114-116.
[2]丁亮,許舒人.基于SSH框架的java代碼自動生成[J].計算機系統(tǒng)應(yīng)用,2014,09:72-77.
[3]王向兵.Java EE多層架構(gòu)Struts2+Spring3+Hibernate3+Ajax的整合[D].大連海事大學(xué),2009.
[4]諶湘倩,狄文輝,孫冬.基于SSH框架與AJAX技術(shù)的Java Web應(yīng)用開發(fā)[J].計算機工程與設(shè)計,2009,10:2590-2592+2596.
[5]馬琰.基于SSL&SET協(xié)議的在線支付模型的研究[J].電腦與電信,2011,5:64-65.
Theapplication of Java SSH Framework in Java Web
Li Jian Tian Lifeng Guo Rui
(Offshore Oil Engineering Co.,Ltd.Tianjin 300451)
SSH is a common technology framework collection for Java Web development,including Struts,Hibernate and Spring.These three frameworks are different in the development and application,and each code range also has a greater difference. The application of SSH framework in Java Web is a very popular development mode of web development.This paper introduces the SSH framework,studies on the application of each frame in web and the prospect of Java Web framework,allowing readers to quickly understand the SSH framework and the relevant techniques.It will provide a valid reference for developers.
Java;ssh framework;Java Web;application
TP311.1
a
1008-6609(2016)03-0069-04
李健,男,遼寧葫蘆島人,本科,助理工程師,研究方向:系統(tǒng)架構(gòu)設(shè)計。