SSH-MVC框架

SSH-MVC框架

MVC

M是指數據模型,V是指用戶界面,C則是控制器。使用MVC的目的是將M和V的實現代碼分離,從而使同一個程序可以使用不同的表現形式。C存在的目的則是確保M和V的同步,一旦M改變,V應該同步更新。

MVC如何工作

MVC是一個設計模式,它強制性的使應用程序的輸入、處理和輸出分開。使用MVC應用程序被分成三個核心部件:模型、視圖、控制器。它們各自處理自己的任務。

視圖

視圖是用戶看到並與之交互的界面。對老式的Web應用程序來說,視圖就是由HTML元素組成的界面,在新式的Web應用程序中,HTML依舊在視圖中扮演着重要的角色,但一些新的技術已層出不窮,它們包括MacromediaFlash和象XHTML,XML/XSL,WML等一些標識語言和Webservices.

如何處理應用程序的界面變得越來越有挑戰性。MVC一個大的好處是它能爲你的應用程序處理很多不同的視圖。在視圖中其實沒有真正的處理髮生,不管這些數據是聯機存儲的還是一個僱員列表,作爲視圖來講,它只是作爲一種輸出數據並允許用戶操縱的方式。

模型

模型表示企業數據和業務規則。在MVC的三個部件中,模型擁有最多的處理任務。例如它可能用象EJBs和ColdFusionComponents這樣的構件對象來處理數據庫。被模型返回的數據是中立的,就是說模型與數據格式無關,這樣一個模型能爲多個視圖提供數據。由於應用於模型的代碼只需寫一次就可以被多個視圖重用,所以減少了代碼的重複性。

控制器

控制器接受用戶的輸入並調用模型和視圖去完成用戶的需求。所以當單擊Web頁面中的超鏈接和發送HTML表單時,控制器本身不輸出任何東西和做任何處理。它只是接收請求並決定調用哪個模型構件去處理請求,然後用確定用哪個視圖來顯示模型處理返回的數據。


MVC的缺點

MVC的缺點是由於它沒有明確的定義,所以完全理解MVC並不是很容易。使用MVC需要精心的計劃,由於它的內部原理比較複雜,所以需要花費一些時間去思考。

你將不得不花費相當可觀的時間去考慮如何將MVC運用到你的應用程序,同時由於模型和視圖要嚴格的分離,這樣也給調試應用程序到來了一定的困難。每個構件在使用之前都需要經過徹底的測試。一旦你的構件經過了測試,你就可以毫無顧忌的重用它們了。

根據我個人經驗,由於我們將一個應用程序分成了三個部件,所以使用MVC同時也意味着你將要管理比以前更多的文件,這一點是顯而易見的。這樣好像我們的工作量增加了,但是請記住這比起它所能帶給我們的好處是不值一提。

MVC並不適合小型甚至中等規模的應用程序,花費大量時間將MVC應用到規模並不是很大的應用程序通常會得不償失。

SSH原理

Struts優點:對視圖層進行封裝更好的分離視圖層和控制層對數據進行封裝

Spring優點:用依賴注入模式大幅度的減少了程序之間的耦合性並很好的實現了各種JAVA的設計模式強制使用

者養成用接口編程的習慣

Hibernate:用操作對象的方式操作數據庫將對數據庫的操作面向對象化並對一些數據庫操作進行了封裝

1web.xml中新增一個監聽器(linstener),其作用就是啓動Web容器時,,自動裝配ApplicationContext的配置信息。它實現了ServletContextListener這個接口,在web.xml配置這個監聽器,啓動容器時,就會默認執行它實現的方法。可以通過配置applicationContext.xml這個文件來整合Struts2Hibernate3框架。

2、將Hibernate整合到Spring中去,由Spring管理數據庫連接池的數據源和分配sessionFactory對象。Springhibernate的配置是通過建立一個LocalSessionFactoryBean對象來完成的,這是一個工廠bean的實現。然後就可以通過繼承Spring爲我們提供HibernateDaoSupportHibernateDao層都需要繼承extends它)來對數據庫的DAO模式管理。

3<beanid="MemberDaoService"class="com.gloryview.dao.MemberDaoService"><propertyname="sessionFactory"ref="sessionFactory"/></bean>需要將sessionFactory對象作爲屬性注入到這個服務類中去。

4、註冊Action<beanid="Member_Deal_With"class="com.tenstars.actions.MemberDealWith"scope="prototype"><propertyname="memberDaoService"ref="MemberDaoService"/></bean>

5、配置struts.xmlAction


spring的prototype屬性


Singleton:Spring容器只存在一個共享的bean實例,默認的配置(缺省)。

Prototype:每次對bean的請求都會創建一個新的bean實例。

二者選擇的原則:有狀態的bean都使用Prototype作用域,而對無狀態的bean則應該使用singleton作用域。

(

有狀態和無狀態會話bean的本質區別是它們的生命期。 

首先解釋一個下面要用到的概念--用戶:session bean 的用戶實際上就是直接調用ejb的類的實例,甚至是這個實例的某個方法。同一個類的不同實例對於session bean 來說是不同的用戶。

有狀態會話bean :每個用戶有自己特有的一個實例,在用戶的生存期內,bean保持了用戶的信息,即“有狀態”;一旦用戶滅亡(調用結束或實例結束),bean的生命期也告結束。即每個用戶最初都會得到一個初始的bean。

無狀態會話bean :bean一旦實例化就被加進會話池中,各個用戶都可以共用。即使用戶已經消亡,bean 的生命期也不一定結束,它可能依然存在於會話池中,供其他用戶調用。由於沒有特定的用戶,那麼也就不能保持某一用戶的狀態,所以叫無狀態bean。但無狀態會話bean 並非沒有狀態,如果它有自己的屬性(變量),那麼這些變量就會受到所有調用它的用戶的影響,這是在實際應用中必須注意的。

)

springautowire自動裝配


在應用中,我們常常使用<ref>標籤JavaBean注入它依賴的對象(依賴注入)。但是對於一個大型的系統,這個操作將會耗費我們大量的資源,我們不得不花費大量的時間和精力用於創建和維護系統中的<ref>標籤。實際上,這種方式也會在另一種形式上增加了應用程序的複雜性,那麼如何解決這個問題呢?Spring爲我們提供了一個自動裝配的機制,儘管這種機制不是很完善,但是在應用中結合<ref>標籤還是可以大大的減少我們的勞動強度。前面提到過,在定義Bean時,<bean>標籤有一個autowire屬性,我們可以通過指定它來讓容器爲受管JavaBean自動注入依賴對象。

<bean>autowire屬性有如下六個取值,他們的說明如下:

1、No:即不啓用自動裝配。Autowire默認的值。

2、byName:通過屬性的名字的方式查找JavaBean依賴的對象併爲其注入。比如說類Computer有個屬性printer,指定其autowire屬性爲byName後,SpringIoC容器會在配置文件中查找id/name屬性爲printerbean,然後(通過在java文件中設置getter/setter使用Seter方法爲其注入

3、byType:通過屬性的類型查找JavaBean依賴的對象併爲其注入。比如類Computer有個屬性printer,類型爲Printer,那麼,指定其autowire屬性爲byType後,SpringIoC容器會查找Class屬性爲Printerbean(通過在java文件中設置getter/setter使用Seter方法爲其注入

4、constructor:同byType一樣,也是通過類型查找依賴對象。與byType的區別在於它不是使用Seter方法注入,而是(通過在java文件中)使用構造器注入

5、autodetect:在byTypeconstructor之間自動的選擇注入方式。

6、default:由上級標籤<beans>default-autowire屬性確定。

注意:在配置bean時,<bean>標籤中Autowire屬性的優先級比其上級標籤高,即是說,如果在上級標籤中定義default-autowire屬性爲byName,而在<bean>中定義爲byType時,SpringIoC容器會優先使用<bean>標籤的配置。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章