第一篇:SSH技術(shù)方案
基于Struts2+Spring+Hibernate實(shí)現(xiàn)輕量級(jí)企業(yè)式開發(fā)技術(shù)方案
一. 技術(shù)平臺(tái)
J2EE是Java2平臺(tái)企業(yè)版(Java 2 Platform Enterprise Edition)
J2EE核心是一組技術(shù)規(guī)范與指南,其中所包含的各類組件、服務(wù)架構(gòu)及技術(shù)層次,均有共同的標(biāo)準(zhǔn)及規(guī)格,讓各種依循J2EE架構(gòu)的不同平臺(tái)之間,存在良好的兼容性,解決過去企業(yè)后端使用的信息產(chǎn)品彼此之間無法兼容,企業(yè)內(nèi)部或外部難以互通的窘境。
J2EE是一種利用Java 2平臺(tái)來簡化企業(yè)解決方案的開發(fā)、部署和管理相關(guān)的復(fù)雜問題的體系結(jié)構(gòu)。J2EE技術(shù)的基礎(chǔ)就是核心Java平臺(tái)或Java 2平臺(tái)的標(biāo)準(zhǔn)版,J2EE不僅鞏固了標(biāo)準(zhǔn)版中的許多優(yōu)點(diǎn),例如“編寫一次、隨處運(yùn)行”的特性、方便存取數(shù)據(jù)庫的JDBC API、CORBA技術(shù)以及能夠在Internet應(yīng)用中保護(hù)數(shù)據(jù)的安全模式等等,同時(shí)還提供了對 EJB(Enterprise JavaBeans)、Java Servlets API、JSP(Java Server Pages)以及XML技術(shù)的全面支持。其最終目的就是成為一個(gè)能夠使企業(yè)開發(fā)者大幅縮短投放市場時(shí)間的體系結(jié)構(gòu)。
J2EE體系結(jié)構(gòu)提供中間層集成框架用來滿足無需太多費(fèi)用而又需要高可用性、高可靠性以及可擴(kuò)展性的應(yīng)用的需求。通過提供統(tǒng)一的開發(fā)平臺(tái),J2EE降低了開發(fā)多層應(yīng)用的費(fèi)用和復(fù)雜性,同時(shí)提供對現(xiàn)有應(yīng)用程序集成強(qiáng)有力支持,完全支持Enterprise JavaBeans,有良好的向?qū)еС执虬筒渴饝?yīng)用,添加目錄支持,增強(qiáng)了安全機(jī)制,提高了性能。[1]
二. 輕量級(jí)J2EE架構(gòu)
目前 J2EE 應(yīng)用中,由于應(yīng)用需求不同,架構(gòu)設(shè)計(jì)上分成兩種設(shè)計(jì)方式,即重量級(jí)J2EE架構(gòu)和輕量級(jí)J2EE架構(gòu)。銀行,電信,大型企業(yè)的業(yè)務(wù)系統(tǒng)邏輯復(fù)雜,結(jié)點(diǎn)分布廣泛,且普遍使用了物理上多層架構(gòu),事務(wù)要求性極高,對系統(tǒng)的穩(wěn)定性要求也是極高的,因此大多數(shù)使用重量級(jí)的EJB開發(fā)架構(gòu)。
一般的中小型應(yīng)用系統(tǒng),所關(guān)注的是訪問速度與快速響應(yīng)市場需求變化,強(qiáng)大的系統(tǒng)緩存功能,傳統(tǒng)的大型分布式J2EE架構(gòu)就顯得不太合適。本系統(tǒng)的開發(fā)基于 J2EE 的輕量級(jí)多層架構(gòu),即業(yè)界比較成熟的 Struts2 + Spring + Hibernate 框架: Struts2實(shí)現(xiàn) MVC 最為成熟的框架之一,在 J2EE 項(xiàng)目中應(yīng)用廣泛; Spring 可以實(shí)現(xiàn)對 Hibernate 的無縫鏈接,適用于業(yè)務(wù)處理層;在數(shù)據(jù)持久層中,采用Hibernate 這一功能強(qiáng)大的 ORM 映射工具。
J2EE的三層結(jié)構(gòu)在業(yè)界是指表示層(Presentation),業(yè)務(wù)邏輯層(Business logic)以及基礎(chǔ)架構(gòu)層(Infrastructure)。一個(gè)最常用的擴(kuò)展就是將三層體系擴(kuò)展為五層體系,即表示層(Presentation)、控制/中介層(Controller/Mediator)、領(lǐng)域?qū)?Domain)、數(shù)據(jù)持久層(Data Persistence)和數(shù)據(jù)源層(Data Source)。它其實(shí)是在三層架構(gòu)中增加了兩個(gè)中間層。控制/中介層位于表示層和領(lǐng)域?qū)又g,數(shù)據(jù)持久層位于領(lǐng)域?qū)雍突A(chǔ)架構(gòu)層之間。而輕量級(jí)架構(gòu)Struts2 + Spring + Hibernate可以實(shí)現(xiàn)J2EE多層結(jié)構(gòu),Struts2用于表示層、控制層,Spring 用于業(yè)務(wù)處理層,而Hibernate用于數(shù)據(jù)持久層。[2] 三. 應(yīng)用部署架構(gòu)
1.Web服務(wù)器架構(gòu)
Tomcat 服務(wù)器是一個(gè)免費(fèi)的開放源代碼的Web 應(yīng)用服務(wù)器。Tomcat是Apache 軟件基金會(huì)(Apache Software Foundation)的Jakarta 項(xiàng)目中的一個(gè)核心項(xiàng)目,由Apache、Sun 和其他一些公司及個(gè)人共同開發(fā)而成。由于有了Sun 的參與和支持,最新的Servlet 和JSP規(guī)范總是能在Tomcat 中得到體現(xiàn)。因?yàn)門omcat 技術(shù)先進(jìn)、性能穩(wěn)定,而且免費(fèi),因而深受Java 愛好者的喜愛并得到了部分軟件開發(fā)商的認(rèn)可,成為目前比較流行的Web 應(yīng)用服務(wù)器。
Tomcat 是一個(gè)輕量級(jí)應(yīng)用服務(wù)器,它運(yùn)行時(shí)占用的系統(tǒng)資源小,擴(kuò)展性好,支持負(fù)載平衡與郵件服務(wù)等開發(fā)應(yīng)用系統(tǒng)常用的功能,在中小型系統(tǒng)和并發(fā)訪問用戶不是很多的場合下被普遍使用,是開發(fā)和調(diào)試JSP 程序的首選。對于一個(gè)初學(xué)者來說,可以這樣認(rèn)為,當(dāng)在一臺(tái)機(jī)器上配置好Apache 服務(wù)器,可利用它響應(yīng)對HTML 頁面的訪問請求。實(shí)際上Tomcat 部分是Apache 服務(wù)器的擴(kuò)展,但它是獨(dú)立運(yùn)行的,所以當(dāng)你運(yùn)行Tomcat 時(shí),它實(shí)際上作為一個(gè)與Apache 獨(dú)立的進(jìn)程單獨(dú)運(yùn)行的。2.系統(tǒng)數(shù)據(jù)庫 MySQL是一種關(guān)聯(lián)數(shù)據(jù)庫管理系統(tǒng),關(guān)聯(lián)數(shù)據(jù)庫將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個(gè)大倉庫內(nèi),這樣就增加了速度并提高了靈活性。MySQL的SQL語言是用于訪問數(shù)據(jù)庫的最常用標(biāo)準(zhǔn)化語言。由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點(diǎn),一般中小型網(wǎng)站的開發(fā)都選擇MySQL作為網(wǎng)站數(shù)據(jù)庫。
四. 主要技術(shù)方案
1.表示層、控制層
表示層是整個(gè)架構(gòu)中最活躍的分層,由WEB服務(wù)器及其組件構(gòu)成,主要用于處理客戶端的請求、響應(yīng)業(yè)務(wù)層組件的請求。表示層引入了基于組件開發(fā)的Struts開源框架,采用Servlet與XML等技術(shù)實(shí)現(xiàn),具有良好的可伸縮性和穩(wěn)定性,降低了系統(tǒng)開發(fā)的復(fù)雜度、提高了開發(fā)效率。
Struts:可用于快速開發(fā)JAVA WEB應(yīng)用。Struts實(shí)現(xiàn)的重點(diǎn)在C(Controller),包括ActionServlet/RequestProcessor和開發(fā)人員定制的Action,也為V(View)提供了一系列定制標(biāo)簽(Custom Tag)。Struts沒有涉及M(Model),所以Struts可以調(diào)用JAVA實(shí)現(xiàn)的任何形式的業(yè)務(wù)邏輯組件。2.業(yè)務(wù)層
在的項(xiàng)目開發(fā)中,每個(gè)領(lǐng)域都會(huì)有自己獨(dú)特的業(yè)務(wù)邏輯,由此使項(xiàng)目中代碼高度耦合,原本有可能被重用的代碼或功能,因?yàn)榕c具體的業(yè)務(wù)邏輯綁定在一塊而導(dǎo)致很難被重用。因此我們將實(shí)現(xiàn)這些具體邏輯的代碼抽取出來分為單獨(dú)的一層,其目的是希望通過層,來降低它與系統(tǒng)其他部分的耦合度。現(xiàn)實(shí)中世界是變化的,既然該層實(shí)現(xiàn)的是現(xiàn)實(shí)中具體的業(yè)務(wù)邏輯,那該層的實(shí)現(xiàn)代碼不可避免的會(huì)發(fā)生變更。怎樣讓該層適應(yīng)最大的變化,做到最小的改動(dòng)?通常我們在編碼的時(shí)候會(huì)盡量考慮到同一業(yè)務(wù)多種實(shí)現(xiàn)的兼容和可擴(kuò)展的能力。因此我們在該層借助了Spring,通過依賴注入、AOP應(yīng)用、面向接口編程,來降低業(yè)務(wù)組件之間的耦合度,增強(qiáng)系統(tǒng)擴(kuò)展性。
IOC(Inversion of Control),譯作反轉(zhuǎn)控制,其功能是將類之間的依賴轉(zhuǎn)移到外部的配置文件中,避免在調(diào)用類中硬編碼實(shí)現(xiàn)類,因此也被稱作依賴注入(Dependency Injection)。在以往的開發(fā)中,通常利用工廠模式(Factory)來解決此類問題,其實(shí)不管是工廠模式還是依賴注入,調(diào)用類與實(shí)現(xiàn)類不可能沒有任何依賴,工廠模式中工廠類通常根據(jù)參數(shù)來判斷該實(shí)例化哪個(gè)實(shí)現(xiàn)類,Spring IOC將需要實(shí)例的類在配置文件文件中配置。使用Spring IOC能得到工廠模式同樣的效果,而且編碼更加簡潔。3.數(shù)據(jù)持久層
Hibernate是一個(gè)ORM工具,它不僅僅是實(shí)現(xiàn)了數(shù)據(jù)庫訪問性能優(yōu)化和與數(shù)據(jù)庫交互的常用操作(CRUD),還將數(shù)據(jù)表與對象進(jìn)行了關(guān)聯(lián),讓開發(fā)人員可以脫離數(shù)據(jù)表,而直接針對對象來與數(shù)據(jù)庫交互,開發(fā)人員不再需要用字符串去描述表中字段,這使得編碼中可書寫性提高。
在本系統(tǒng)中已經(jīng)抽象出了一個(gè)CRUD DAO組件基類,利用JDK5.0的泛型技術(shù),每個(gè)繼承此組件基類的DAO都持有自身的持久對象類型,非常方便操作。在此基類中涵蓋了大多數(shù)數(shù)據(jù)庫操作方法,如CRUD,分頁,屬性查詢等。[3]
參考資料
[1] J2EE[EB] 百度百科http://baike.baidu.com/view/1507.htm [2] J2EE中三種框架Spring + Struts +Hibernate [EB] 百度百科http://baike.baidu.com/view/16184.htm#sub5909255 [3] 李剛.輕量級(jí)Java EE 企業(yè)應(yīng)用實(shí)戰(zhàn) Struts2+Spring3+hibernate整合開發(fā)[M] 北京:電子工業(yè)出版社,2012
第二篇:SSH總結(jié)面試題
張國良編輯
SSH面試題
版本1.0
1.struts1與struts2的區(qū)別 :
1、兩者之間目前只有名字是一樣的。
2、struts1是通過繼承來實(shí)現(xiàn)相關(guān)機(jī)制的。而struts2是通過接口方式來實(shí)現(xiàn)的。
3、在struts2中沒有了ActionForm使用Action來代替原來struts1中的ActionForm和Action兩者的功能。
4、Struts2比Struts1更加容易進(jìn)行單元測試
5、線程安全
2.hibernate與iBATIS的區(qū)別
hibernate和ibatis都是持久層的ORM框架,hibernate是全自動(dòng)化的,而ibatis是半自動(dòng)化的。
為什么這樣說呢?因?yàn)閔ibernate把我們要用到的增、刪、改的SQL語句都封裝了,我們不需要再自己手動(dòng)寫,直接調(diào)用即可,所以稱它全自動(dòng)。而對于ibatis,所有的SQL語句都要我們自己來手寫,所以稱它為半自動(dòng)化的框架,就等于是一個(gè)O/R Mapping 解決方案.有了這框架,只要配置下映射文件,就不需要手寫sql語句了.Hibernate是全自動(dòng)化的,可以說O/R做的相當(dāng)全面了.iBateis和Hibernate相比,iBatis最大的特點(diǎn)就是小巧,上手很快。如果你不需要太多復(fù)雜的功能,iBatis是能滿足你的要求又足 夠靈活的最簡單的解決方案
3、hibernate的優(yōu)化(項(xiàng)目)
1.使用雙向一對多關(guān)聯(lián),不使用單向一對多
2.靈活使用單向一對多關(guān)聯(lián)
3.不用一對一,用多對一取代
4.配置對象緩存,不使用集合緩存
5.一對多集合使用Bag,多對多集合使用Set
6.繼承類使用顯式多態(tài)
7.表字段要少,表關(guān)聯(lián)不要怕多,有二級(jí)緩存撐腰
4、hibernate中session與sessionfactory的聯(lián)系,分別什么時(shí)候用
sessionFactory、session都是由hibernate框架生成的,其中sessionFactory包括了數(shù)據(jù)庫配置和映射關(guān)系等資源,一個(gè)項(xiàng)目中只能生成一個(gè)sessionFactory實(shí)例。因此sessionFactory被設(shè)計(jì)成線程安全的。session是對對象進(jìn)行操作并映射至對應(yīng)的數(shù)據(jù)庫表中的,它由sessionFactory生成,不支持多線程并發(fā),因此它是非線程安全的。
5、hibernate中g(shù)et和load的區(qū)別
1、它們都用來根據(jù)主鍵,查找相應(yīng)的記錄
2、load和get方法對緩存的應(yīng)用不同,其中l(wèi)oad和get都可以使用session層的緩存,但是對于load可以應(yīng)用二級(jí)緩存,而get無法使用
拋異常Null
張國良編輯
注意:criteria也是綁定session的,即隨著session的產(chǎn)生而產(chǎn)生,隨著session的消亡而消亡。如果想重用criteria對象,必須使用DetechedCriteria對象,實(shí)現(xiàn)criteria和session進(jìn)行分離。
7、在項(xiàng)目中用hibernateORM框架與傳統(tǒng)jdbc比較有什么優(yōu)點(diǎn)
延遲加載:
延遲加載機(jī)制是為了避免一些無謂的性能開銷而提出來的,所謂延遲加載就是當(dāng)在真正需要數(shù)據(jù)的時(shí)候,才真正執(zhí)行數(shù)據(jù)加載操作。在Hibernate中提供了對實(shí)體對象的延遲加載以及對集合的延遲加載,另外在Hibernate3中還提供了對屬性的延遲加載。
hibernate中l(wèi)azy的使用
hibernate中l(wèi)azy的使用(2008-09-12 13:57:47)
標(biāo)簽:雜談分類:hibernate
hibernate中l(wèi)azy的使用
lazy,延遲加載
Lazy的有效期:只有在session打開的時(shí)候才有效;session關(guān)閉后lazy就沒效了。
lazy策略可以用在:
*
*
標(biāo)簽上,可以取值true/false,這個(gè)特性需要類增強(qiáng)
* 等集合上,可以取值為true/false/extra
*
一、概念:即兩者之間存在關(guān)聯(lián)關(guān)系,那么在加載主對象的時(shí)候,對副對象的加載處理,是延遲或立即,比如說公司(主)-》部門(副).二、分析
1.立即檢索
實(shí)現(xiàn)方法:將
a.在業(yè)務(wù)或程序中,需要立即訪問關(guān)聯(lián)對象時(shí)可以使用.b.使用二級(jí)緩存.2.延遲檢索
實(shí)現(xiàn)方法:將
a.一對多或多對多的關(guān)聯(lián)使用.b.在程序中不需要立即訪問或者該關(guān)聯(lián)的對象不需要訪問的時(shí)候.什么時(shí)候用延遲加載
例如:銀行開戶,一個(gè)人可以開多個(gè)帳戶,一個(gè)帳戶只能屬于一個(gè)人,所以在用戶類里包含一個(gè)帳戶的集合,帳戶類里包含一個(gè)用戶類型,他們之間是一對多的關(guān)系.如過你在查詢的時(shí)候,通過用戶查詢是,如果只想查到用戶就用(hibernate)默認(rèn)的延遲加載,這樣效率也高,如果你想把該用戶的的所有帳戶都一同查出來,那就需要立即加載了,這樣一來如果一個(gè)用戶對應(yīng)的帳戶比較多的話,他的效率是很低的.設(shè)置加載方式一般有兩種,一種是通過映射文件(lazy=false),另一種是通過程序的方式來實(shí)現(xiàn)的也很簡單.Struts2工作流程:
Struts2:
(1)客戶端提交一個(gè)HttpServletRequest請求(.action或JSP頁面)。
(2)請求被提交到一系列Filter過濾器,如ActionCleanUp和FilterDispatcher等。
(3)FilterDispatcher是Struts2控制器的核心,它通常是過濾器鏈中的最后一個(gè)過濾器。
(4)請求發(fā)到FilterDispatcher后,FilterDispatcher詢問ActionMapper是否需要調(diào)用某個(gè)Action來處理這個(gè)Request(一般根據(jù)URL后綴是否為.action來判斷)。
(5)如果ActionMapper決定需要調(diào)用某個(gè)Action,FilterDispatcher則把請求交到ActioProxy,由其進(jìn)行處理。
(6)ActionProxy通過Configuration Manager(它會(huì)訪問struts.xml)詢問框架的配置文件,找到需要調(diào)用的Action類。
(7)ActionProxy創(chuàng)建一個(gè)ActionInvocation實(shí)例,而ActionInvocation通過代理模式調(diào)用Action,(在調(diào)用之前會(huì)根據(jù)配置文
第三篇:ssh架構(gòu)個(gè)人總結(jié)
(轉(zhuǎn)載)看過了兩三個(gè)SSH搭建的視頻(浪曦風(fēng)中葉老師、尚學(xué)堂李勇老師的兩個(gè)視頻),也跟著視頻把這個(gè)框架搭了兩遍,有點(diǎn)迷迷糊糊的,為了加深印象,我決定不依靠視頻再來搭一遍,經(jīng)過一天的調(diào)試與處理,終于能夠獨(dú)立自主地把SSH框架給搭建起來了,不容易啊。
其中出現(xiàn)的錯(cuò)誤以及各種各樣的BUG不計(jì)其數(shù),通過查閱文檔以及Google得到了解決。這里,我就來做一個(gè)總結(jié):
SSH框架的基本配置:
1.相關(guān)jar包的引入,這里我采用的是spring2 + struts2 + hibernate3的組合,搭完了之后才發(fā)現(xiàn)Spring已經(jīng)到3了,不知道在Spring3上面的配置是否相同,有待嘗試。
Code:
1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.-----核心jar包-----# spring.jar# struts2-core.jar# xwork-core.jar# mysql-connector-java.jar# hibernate3.jar# struts2-spring-plugin.jar-----在默認(rèn)配置下核心jar所依賴的jar包---# commons-collections.jar---|# commons-fileupload.jar-----|------------這三個(gè)jar包是在jakarta-commons項(xiàng)目中一些# commons-logging.jar--------|基于JDK上擴(kuò)展的工具包。# freemarker.jar# log4j.jar# ognl.jar# dom4j.jar# jta.jar# cglib-nodep.jar# antlr.jar------------這個(gè)jar包是spring AOP 采用 動(dòng)態(tài)代理 時(shí)需要的jar包。
2.相關(guān)的配置
i)/WEB-INF/web.xml
a.需要配置一個(gè)Struts2的Filter:
Code:
1.2.3.
4.5.6.
8.
b.由于從struts2.1.3之后的版本不再建議采用
org.apache.struts2.dispatcher.FilterDispatcher,所以,我們最好
配置成StrutsPrepareAndExecuteFilter或者StrutsExecuteFilter以及StrutsPrepareFilter,需要注意的是:如果配置
成StrutsExecuteFilter需要將StrutsPrepareFilter也配置上,否則將會(huì)報(bào)錯(cuò)。所以建議就只直接采用StrutsPrepareAndExecuteFilter。c.此外還需要配置一個(gè)ContextListener:
Code:
1.2.3.4.5.
如果你的applicationContext.xml沒有配置在/WEB-INF/目錄或者采用的不是默認(rèn)的文件名,則還需要配置context-param,讓Spring找到對應(yīng)的配置文件,如下(注意:param-name的內(nèi)容一定是
contextConfigLocation,Spring將根據(jù)該名稱注入到相應(yīng)的對象中):
Code:
1.2.3.4. contextConfigLocation classpath*:application-Context.xml
ii)applicationContext.xml,這個(gè)文件是比較核心的文件:
a)配置sessionFactory,有兩種配置方式:
(1)采用傳統(tǒng)的Hibernate配置文件,將其映射到sessionFactory中:
Code:
1. ”> 2.3.4.5.
采用這種方式時(shí),需要在hibernate.cfg.xml文件中配置數(shù)據(jù)連接相關(guān)信息,這里與一般的hibernate配置文件一樣:
Code:
1.
3.4.5.
com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/ssh_test
6.7.8.9.10.11.12.13.14.15.
root
orange
org.hibernate.dialect.MySQLDialect
true
Code:
1.2. ”> 3.4.5.6.7.8.9.10.11.12.13.14. ”> 15.16.17.18.19.20.21.22.23.24.25. org.hibernate.dialect.MySQLDialect true 27.
b)配置完sessionFactory后,還可以根據(jù)需要配置以下三方面的內(nèi)容,也可以不配置選擇采用默認(rèn)的方式:
Code:
1.2. nManager”> 3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.
這樣就基本完成了我們的ssh的相關(guān)配置。
3.SSH的基本使用:
具體分工:
# 在applicationContext.xml中配置相關(guān)的bean信息
Code:
1.2.3.4.5.6. 7.
這里的property屬性中name值對應(yīng)的是相應(yīng)處理類生成時(shí)需要IoC容器注入的屬性,比如說id為loginAction的處
理類為com.ssh.action.LoginAction(它其中應(yīng)當(dāng)設(shè)置一個(gè)
setService(UserService service)方法),這樣在需要使
用該bean時(shí),IoC容器會(huì)調(diào)用這個(gè)setService方法來將生成的userService對象傳入。
需要注意的是,如果想讓IoC容器注入相應(yīng)屬性,則必須要實(shí)現(xiàn)相應(yīng)屬性的set方法。
# 在struts.xml中配置action的相關(guān)信息
相關(guān)注意事項(xiàng):
由于所有的bean都由Spring來管理,那么在struts.xml中一個(gè)action的class屬性就不能寫成具體的類,而是要使用該類在applicationContext.xml文件中配置的Bean的id,如:
Code:
1.2.3.4.
這個(gè)loginAction對應(yīng)的就是上面的id為loginAction的bean,而這個(gè)bean的class屬性中設(shè)置的才是真正的對應(yīng)的Action的處理類。
# 對于每個(gè)模型,都要有一*.hbm.xml
3.其它一些注意點(diǎn):
Spring中一些的概念很重要:AOP,IOC。
第四篇:(優(yōu)質(zhì))寶劍鋒從磨礪出,磨礪Ssh
優(yōu)質(zhì)范文:
寶劍鋒從磨礪出
經(jīng)過嚴(yán)寒的考驗(yàn),梅花變得更加美麗。經(jīng)過冰雪的重壓,松柏變得更加挺拔。經(jīng)過風(fēng)雨的打擊,雨燕變得更加矯健。
梅花香自苦寒來,寶劍鋒從磨礪出。人也是一樣,只有經(jīng)過了苦難,才能成就大事業(yè)。有位名人這樣說“自古英雄多磨難,從來紈绔少偉男”。韓信的事跡人人皆知,他出身于一個(gè)貧苦的家庭,曾經(jīng)在貧困的時(shí)候,向河邊洗衣服的婦人討過飯。但縱使這么貧困,他也從未放棄過努力,他努力學(xué)習(xí)兵法,最終獲得成功,成為漢朝的大將,并封為王候。
韓信的事跡不是很好的說明了這一觀點(diǎn)嗎?寶劍鋒從磨礪出。他經(jīng)過了生活的磨礪,終于獲得了成功。
古往今來,不必說蘇秦等人的懸梁刺骨,也不必說匡衡等人的鑿壁偷光、囊螢映雪,單是祖逖的聞雞起舞足以讓后人贊嘆不已,他們經(jīng)歷了生活的磨難,并戰(zhàn)勝了磨難,最終獲得了成功。
著名的發(fā)明家愛迪生就是這樣一個(gè)人,生活給予了他一次又一次打擊。他小時(shí)候在火車上做實(shí)驗(yàn)失敗,被車長打聾了一只耳朵,但他沒有放棄,苦難造就了他的輝煌,也磨練了他的意志。他為發(fā)明電光泡,做了一千次實(shí)驗(yàn),但正如別人所說的一樣 “沒有那一千次失敗,就沒有一千零一次的成功,沒有苦難環(huán)境的造就,就不可能有愛迪生的成功。”
生活的磨礪把愛迪生磨礪成了一把寶劍,并最終使他獲得了成功。在《報(bào)任安書》中,司馬遷這樣寫道“文王拘而演《周易》,仲尼厄而作《春秋》,屈原放逐,乃賦《離騷》,左丘失明,闕有《國語》,不韋遷蜀,世傳《呂覽》??大抵圣賢發(fā)憤之所為作也。”是生活的苦難與磨礪,使他們獲得了最終的成功。
蘇東坡也是這樣的一個(gè)人,仕途的苦悶,喪妻的悲哀,人生的坎坷,命運(yùn)的多艱,沒能打跨這個(gè)偉人。在黃州,在蘇州,在他貶謫的地點(diǎn),處處可以聽到他那膾炙人口的名句。
孟子說,“天將降大任于是人也,必先苦其心志,勞其筋骨,餓其體膚,行拂亂其所為,所以動(dòng)心忍性,增益其所不能”。不經(jīng)歷風(fēng)雨,怎能看到彩虹?
請記住,寶劍鋒從磨礪出,梅花香自苦寒來,不經(jīng)歷磨難,哪能隨隨便便成功。
第五篇:java的SSH框架總結(jié)(范文)
對于java中SSH框架的理解
SSH 是指 Struts+ spring+ hibernate 的一個(gè)集成框架,這是一種比較流行的java web應(yīng)用程序開源框架。
Struts
Struts是一個(gè)基于Sun J2EE平臺(tái)的MVC框架,主要采用Servlet和JSP技術(shù)來實(shí)現(xiàn)的。由于Struts能充分滿足引用開發(fā)的需求,簡單易用,敏捷迅速,所以很受關(guān)注。Struts 吧Servlet、JSP、自定義標(biāo)簽和信息資源(message resource)整合到一個(gè)統(tǒng)一的框架中,開發(fā)人員利用其進(jìn)行開發(fā)室不用再自己編寫實(shí)現(xiàn)全套的MVC模式,極大的節(jié)省了時(shí)間。
Spring Spring是一個(gè)解決了許多在J2EE開發(fā)中常見的問題的強(qiáng)大框架。Spring提供了管理業(yè)務(wù)對象的一致方法并且鼓勵(lì)了注入對接口編程而不是對類編程的良好習(xí)慣。
Spring的架構(gòu)基礎(chǔ)是基于JavaBean屬性的Inversion of Control 容器。然而,這僅僅是完整圖景中的一部分:在Spring使用IOC容器作為構(gòu)建完關(guān)注所有架構(gòu)層的完整解決方案是獨(dú)一無二的。Spring提供了唯一的數(shù)據(jù)訪問抽象,包括簡單和有效率的JDBC框架,極大的改進(jìn)了效率并且減少了可能的錯(cuò)誤。Spring的數(shù)據(jù)訪問架構(gòu)還集成了Hibernate 和其他O/R mapping 解決方案。Spring還提供了唯一的事物管理抽象。它能夠在各種底層事務(wù)管理技術(shù),例如JTA 或者JDBC事務(wù)提供一個(gè)一致的編程模型。Spring提供了一個(gè)標(biāo)準(zhǔn)Java語言編寫的AOP框架,他給POJOs提供了聲明式的事務(wù)管理和其他企業(yè)事務(wù)——如果有必要還可以實(shí)現(xiàn)自己的aspects。這個(gè)框架提供了可以和IOC容器集成的強(qiáng)大而靈活的MVC web框架。
Hibernate Hibernate 是一個(gè)開放源代碼的對象關(guān)系映射框架,它對JDBC進(jìn)行了非常輕量級(jí)的對象封裝,是的java程序員可以隨心所欲的適用對象編程思維來操控?cái)?shù)據(jù)庫。Hibernate 可以應(yīng)用在任何使用JDBC的場合,既可以在java客戶端程序中使用,也可以在Servlet/jsp的web應(yīng)用中使用,其最具革命性意義的是:Hibernate可以在應(yīng)用EJB的J2EE架構(gòu)中取代CMP,完成數(shù)據(jù)持久化的重任。
在SSH的組合框架模式中,三者各自的作用 Struts 是一個(gè)很好的MVC框架,主要技術(shù)是Servlet和JSP。Struts的MVC設(shè)計(jì)模式可以讓我們的邏輯思維變得很清晰,讓我們寫程序?qū)哟畏置鳌?/p>
Spring提供了管理業(yè)務(wù)對象的一致方法,并鼓勵(lì)注入對接口編程而不是對類編程的良好習(xí)慣,使我們的產(chǎn)品在最大程度上解耦。
Hibernate 是用來持久化數(shù)據(jù)的,提供了完全面向?qū)ο蟮臄?shù)據(jù)庫操作。Hibernate對JDBC進(jìn)行了非常輕量級(jí)的封裝,使得他與關(guān)系型數(shù)據(jù)庫打交道變得非常輕松。
負(fù)責(zé)Web層:
ActionFormBean接收網(wǎng)頁中表單提交的數(shù)據(jù),然后通過Action進(jìn)行處理,再Forward到對應(yīng)的網(wǎng)頁,在Struts-config.xml中定義了
Spring負(fù)責(zé)業(yè)務(wù)層管理,即Service:
Service為Action提供統(tǒng)一的調(diào)用接口,封裝持久層的DAO,并集成Hibernate,Spring可對JavaBean和事物進(jìn)行統(tǒng)一管理。
Hibernate負(fù)責(zé)持久層,完成數(shù)據(jù)庫的CRUD操作:
Hibernate有一組hbm.xml文件和PO,是與數(shù)據(jù)庫中的表相對應(yīng)的,然后定義DAO,這些是與數(shù)據(jù)庫打交道的類。
在Struts+Spring+Hibernate系統(tǒng)中,對象之間的調(diào)用流程如下:
Struts——>Spring——>Hibernate
JSP——>Action——>Service——>DAO——>Hibernate