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