SSH框架总结(框架分析+环境搭建+实例源代码下载)
?
首先,SSH不是一個框架,而是多個框架(struts+spring+hibernate)的集成,是眼下較流行的一種Web應(yīng)用程序開源集成框架,用于構(gòu)建靈活、易于擴展的多層Web應(yīng)用程序。
?
集成SSH框架的系統(tǒng)從職責(zé)上分為四層:表示層、業(yè)務(wù)邏輯層、數(shù)據(jù)持久層和域模塊層(實體層)。
?
Struts作為系統(tǒng)的總體基礎(chǔ)架構(gòu),負責(zé)MVC的分離,在Struts框架的模型部分,控制業(yè)務(wù)跳轉(zhuǎn),利用Hibernate框架對持久層提供支持。Spring一方面作為一個輕量級的IoC容器,負責(zé)查找、定位、創(chuàng)建和管理對象及對象之間的依賴關(guān)系,還有一方面能使Struts和Hibernate更好地工作。
?
?
由SSH構(gòu)建系統(tǒng)的基本業(yè)務(wù)流程是:
?
1、在表示層中,首先通過JSP頁面實現(xiàn)交互界面,負責(zé)傳送請求(Request)和接收響應(yīng)(Response),然后Struts依據(jù)配置文件(struts-config.xml)將ActionServlet接收到的Request委派給對應(yīng)的Action處理。
2、在業(yè)務(wù)層中,管理服務(wù)組件的Spring IoC容器負責(zé)向Action提供業(yè)務(wù)模型(Model)組件和該組件的協(xié)作對象數(shù)據(jù)處理(DAO)組件完畢業(yè)務(wù)邏輯,并提供事務(wù)處理、緩沖池等容器組件以提升系統(tǒng)性能和保證數(shù)據(jù)的完整性。
3、在持久層中,則依賴于Hibernate的對象化映射和數(shù)據(jù)庫交互,處理DAO組件請求的數(shù)據(jù),并返回處理結(jié)果。
?
採用上述開發(fā)模型,不僅實現(xiàn)了視圖、控制器與模型的徹底分離,并且還實現(xiàn)了業(yè)務(wù)邏輯層與持久層的分離。這樣不管前端怎樣變化,模型層僅僅需非常少的修改,并且數(shù)據(jù)庫的變化也不會對前端有所影響,大大提高了系統(tǒng)的可復(fù)用性。并且因為不同層之間耦合度小,有利于團隊成員并行工作,大大提高了開發(fā)效率。
?
?
以下我們再具體看一下組成SSH的這三個框架
一、Spring
1、什么是Spring?
簡單來說,Spring是一個輕量級的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架。
?
2、Spring的特性
詳細自己百度吧
全部Spring的這些特征使你可以編寫更干凈、更可管理、而且更易于測試的代碼
?
3、為什么使用Spring?
Spring的以上特性使得開發(fā)者使用主要的JavaBean來完畢曾經(jīng)僅僅可能由EJB完畢的事情。然而,Spring的用途不僅限于server端的開發(fā)。從簡單性、可測試性和松耦合的角度而言,不論什么Java應(yīng)用都能夠從Spring中受益。
?
二、Struts
1、什么是Struts?
它通過採用 Java Servlet/JSP 技術(shù),實現(xiàn)了基于Java EEWeb應(yīng)用的MVC設(shè)計模式的應(yīng)用框架,是MVC經(jīng)典設(shè)計模式中的一個經(jīng)典產(chǎn)品。
?
2、Struts1的核心構(gòu)成
?
在 Struts1 中,由一個名為 ActionServlet 的 Servlet 充當(dāng) 控制器(Controller)的角色,依據(jù)描寫敘述模型、視圖、控制器相應(yīng)關(guān)系的 struts-config.xml 的配置文件,轉(zhuǎn)發(fā)視圖(View)的請求,組裝響應(yīng)數(shù)據(jù)模型(Model)。
?
在 MVC 的模型(Model)部分,常常劃分為兩個主要子系統(tǒng)(系統(tǒng)的內(nèi)部數(shù)據(jù)狀態(tài)與改變數(shù)據(jù)狀態(tài)的邏輯動作),這兩個概念子系統(tǒng)分別詳細相應(yīng) Struts 1里的 ActionForm 與 Action 兩個須要繼承實現(xiàn)超類。在這里,Struts 1能夠與各種標(biāo)準(zhǔn)的數(shù)據(jù)訪問技術(shù)結(jié)合在一起,包含Enterprise Java Beans(EJB), JDBC 與 JNDI。
?
在 Struts 1的視圖(View) 端,除了使用標(biāo)準(zhǔn)的JavaServer Pages(JSP)以外,還提供了大量的標(biāo)簽庫使用,同一時候也能夠與其它表現(xiàn)層組件技術(shù)(產(chǎn)品)進行整合,比方 Velocity Templates,XSLT 等。
?
通過應(yīng)用 Struts 的框架,終于用戶能夠把大部分的關(guān)注點放在自己的業(yè)務(wù)邏輯(Action)與 映射關(guān)系的配置文件(struts-config.xml)中。
?
3、Struts1的基本運行流程
詳見《STRUTS基本工作流程》
?
4、什么是struts2
Struts 2是Struts的下一代產(chǎn)品,是在 struts 1和WebWork的技術(shù)基礎(chǔ)上進行了合并的全新的Struts 2框架。其全新的Struts 2的體系結(jié)構(gòu)與Struts 1的體系結(jié)構(gòu)區(qū)別巨大。Struts 2以WebWork為核心,採用攔截器的機制來處理用戶的請求,這種設(shè)計也使得業(yè)務(wù)邏輯控制器可以與ServletAPI全然脫離開,所以Struts 2可以理解為WebWork的更新產(chǎn)品
?
5、strut2的體系結(jié)構(gòu)
?
?
解析:
當(dāng)Web容器收到請求(HttpServletRequest)它將請求傳遞給一個標(biāo)準(zhǔn)的的過濾鏈包含? 流程(ActionContextCleanUp)過濾器,然后經(jīng)過Other filters(SiteMesh ,etc),
接下來須要調(diào)用FilterDispatcher核心控制器,然后它調(diào)用ActionMapper確定請求那個Action,ActionMapper返回一個收集Action具體信息的ActionMaping對象。
接下來FilterDispatcher將控制權(quán)委派給ActionProxy,ActionProxy調(diào)用配置管理器(ConfigurationManager) 從配置文件里讀取配置信息(struts.xml),然后創(chuàng)建ActionInvocation對象,ActionInvocation在調(diào)用Action之前會依次的調(diào)用所用配置攔截器(Interceptor N) 一旦運行結(jié)果返回結(jié)果字符串ActionInvocation負責(zé)查找結(jié)果字符串相應(yīng)的(Result)然后運行這個Result Result會調(diào)用一些模版(JSP)
來呈現(xiàn)頁面,之后攔截器(Interceptor N)會在被運行(順序和Action運行之前相反)最后響應(yīng)(HttpServletResponse)被返回在web.xml中配置的那些過濾器和(核心控制器)(FilterDispatcher)。
?
6、為什么使用Struts?
首先,Struts 是MVC的一種實現(xiàn),它將 Servlet和 JSP 標(biāo)記(屬于 J2EE 規(guī)范)用作實現(xiàn)的一部分。Struts繼承了MVC的各項特性,并依據(jù)J2EE的特點,做了對應(yīng)的變化與擴展,減弱了業(yè)務(wù)邏輯接口和數(shù)據(jù)接口之間的耦合,以及讓視圖層更富于變化
?
另外, struts具有頁面導(dǎo)航功能,使系統(tǒng)的脈絡(luò)更加清晰。通過一個配置文件,就可以把握整個系統(tǒng)各部分之間的聯(lián)系,這對于后期的維護有著莫大的優(yōu)點。尤其是當(dāng)還有一批開發(fā)人員接手這個項目時,這樣的優(yōu)勢體現(xiàn)得更加明顯。
?
7、?Struts1和Struts2的差別
詳見《Struts1 和 Struts2》
?
三、Hibernate
1、什么是Hibernate?
Hibernate是一個開放源碼的對象關(guān)系映射框架,它對JDBC進行了很輕量級的對象封裝,使得Java程序猿能夠隨心所欲的使用對象編程思維來操縱數(shù)據(jù)庫。 Hibernate能夠應(yīng)用在不論什么使用JDBC的場合,既能夠在Java的client程序使用,也能夠在Servlet/JSP的Web應(yīng)用中使用,最具革命意義的是,Hibernate能夠在應(yīng)用EJB的J2EE架構(gòu)中代替CMP,完畢數(shù)據(jù)持久化的重任
?
2、Hibernate核心構(gòu)成
?
詳細就不展開了
?
3、Hibernate基本運行流程
?
?
為什么使用Hibernate?
1. 對JDBC訪問數(shù)據(jù)庫的代碼做了封裝,大大簡化了數(shù)據(jù)訪問層繁瑣的反復(fù)性代碼。
2、Hibernate是一個優(yōu)秀的ORM實現(xiàn)。他非常大程度的簡化DAO層的編碼工作,將軟件開發(fā)者從大量同樣的數(shù)據(jù)持久層相關(guān)編程工作中解放出來,使開發(fā)更對象化了。
3、移植性好,支持各種數(shù)據(jù)庫,假設(shè)換個數(shù)據(jù)庫僅僅要在配置文件里變換配置就能夠了,不用改變hibernate代碼。
4、支持透明持久化,由于hibernate操作的是純粹的(pojo)java類,沒有實現(xiàn)不論什么接口,沒有侵入性。所以說它是一個輕量級框架。
?
?
最后附上SSH1和SSH2框架搭建的實例,點擊就可以下載
SSH1框架搭建實例(spring2+struts1+hibernate3)採用舊版本號,詳見代碼中凝視
SSH2框架搭建實例(spring3.2+strust2.3.4+hibernate4.2)所有採用最新版本號,詳見代碼中凝視
?
開發(fā)環(huán)境搭建,參照我的還有一篇博客
《Win7(64) + eclipse(64)+ tomcat7(64)+ jdk7(64)開發(fā)環(huán)境配置》
?
?
一些說明:索要代碼的郵箱,我基本上都發(fā)過了,假設(shè)有漏發(fā),請聯(lián)系我。還是希望大家去csdn下載頁去下載。假設(shè)速度慢,能夠去這里http://pan.baidu.com/s/1eQh7FXo開發(fā)環(huán)境配置。http://blog.csdn.net/shan9liang/article/details/8807784在war中,找到application-common.xml。改動數(shù)據(jù)源,指定自己的數(shù)據(jù)庫就可以。項目部署后,會自己主動映射表。<!--配數(shù)據(jù)源 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" /> <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" /> <property name="username" value="ssh" /> <property name="password" value="ssh" /> </bean>以上是oracle的配置。假設(shè)使用其它數(shù)據(jù)庫,請在lib文件夾下,增加驅(qū)動包。并改動數(shù)據(jù)源。強烈建議:https://code.csdn.net/shan9liang/tgb 這是在CSDN CODE托管的,採用ssh搭建的一個考勤管理系統(tǒng),maven項目,比原來那個更規(guī)范了,建議用這個,并且我會持續(xù)更新,逐漸增加各種主流框架,相信我。 。只是不是eclipse項目,須要手工導(dǎo)入eclipse,近期特喜歡用intellij。建議直接用git clone。?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的SSH框架总结(框架分析+环境搭建+实例源代码下载)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图像的放大与缩小(2)——双线性插值放大
- 下一篇: [Everyday Mathematic