[轉]JAVA三大框架SSH和MVC


Java—SSH(MVC)

JAVA三大框架的各自作用 


hibernate是底層基於jdbc的orm(對象關系映射)持久化框架,即:表與類的映射,字段與屬性的映射,記錄與對象的映射 數據庫模型 也就是Model;
struts提供的豐富標簽是用於顯示層View;同時struts也充當了實現Control的功能(不管是Struts1,還是Struts2),接收參數,視圖分發。
Spring是用於降低層與層間耦合度的,就是所有的類都可以由spring統一創建,用時只需注入即可(IOC)


從功能上來說,hibernate為M,struts2 為V,也可以為C,spring可以為C。
但大多數項目中,hibernate為M,struts2 為V+C,spring用來幫助管理類以及實現一些業務無關功能,如日志記錄等,大多數都是用struts來做C的。

一、Spring

Spring是一個解決了許多在J2EE開發中常見的問題的強大框架。 Spring提供了管理業務對象的一致方法並且鼓勵了注入對接口編程而不是對類編程的良好習慣。Spring的架構基礎是基於使用JavaBean屬性的 Inversion of Control容器。然而,這僅僅是完整圖景中的一部分:Spring在使用IoC容器作為構建完關注所有架構層的完整解決方案方面是獨一無二的。 Spring提供了唯一的數據訪問抽象,包括簡單和有效率的JDBC框架,極大的改進了效率並且減少了可能的錯誤。Spring的數據訪問架構還集成了 Hibernate和其他O/R mapping解決方案。Spring還提供了唯一的事務管理抽象,它能夠在各種底層事務管理技術,例如JTA或者JDBC事務提供一個一致的編程模型。 Spring提供了一個用標准Java語言編寫的AOP框架,它給POJOs提供了聲明式的事務管理和其他企業事務--如果你需要--還能實現你自己的 aspects。這個框架足夠強大,使得應用程序能夠拋開EJB的復雜性,同時享受着和傳統EJB相關的關鍵服務。Spring還提供了可以和IoC容器 集成的強大而靈活的MVC Web框架。

二、STRUCTS

Struts是一個基於Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技術來實現的。由於Struts能充分滿足應用開發的需求,簡單易用,敏捷迅速,在過去的一 年中頗受關注。Struts把Servlet、JSP、自定義標簽和信息資源(message resources)整合到一個統一的框架中,開發人員利用其進行開發時不用再自己編碼實現全套MVC模式,極大的節省了時間,所以說Struts是一個 非常不錯的應用框架。

三、Hibernate

Hibernate是一個開放源代碼的對象關系映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來 操縱數據庫。 Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程序實用,也可以在Servlet/JSP的Web應用中使用,最具革命 意義的是,Hibernate可以在應用EJB的J2EE架構中取代CMP,完成數據持久化的重任。Hibernate可以在應用EJB的J2EE架構中 取代CMP,完成數據持久化的重任。映射很簡單呀,就是頁面的映射呀,多做點練習就會了。

JAVA三大框架用來做WEB應用。 struts主要負責表示層的顯示 spring利用它的IOC和AOP來處理控制業務(負責對數據庫的操作) hibernate主要是數據的持久化到數據庫。在 用jsp的servlet做網頁開發的時候有個web.xml的映射文件,里面有個mapping的標簽就是用來做文件映射的。 當你在瀏覽器上輸入URL地址的時候,文件就會根據你寫的名稱對應到一個java文件,根據java文件里編寫的內容顯示在瀏覽器上,就是一個網頁,所以 網頁名字是隨便寫的,隨便起的名字,不管你起的是.php .jsp .do還是其他的什么都對應這個java文件,這個java文件里的代碼進行什么操作就干什么,顯示一句話還是連接數據庫還是跳轉到其他頁面等等,這個 java文件把數據進行封裝起到安全和便於管理的作用。其實這個java文件編譯過來是.class的一個字節碼文件,沒有那么一個類似html嵌入標簽 和代碼的網頁文件。他與jsp文件區別就是jsp把代碼嵌入到html標簽中。 還有servlet或者struts中html表單的action中的提交名稱對應一個java文件,struts一般是.do的,都和上面一樣是映射。


1. 談談你mvc的理解
MVC是Model—View—Controler的簡稱。即模型—視圖—控制器。MVC是一種設計模式,它強制性的把應用程序的輸入、處理和輸出分開。
MVC中的模型、視圖、控制器它們分別擔負着不同的任務。
視圖: 視圖是用戶看到並與之交互的界面。視圖向用戶顯示相關的數據,並接受用戶的輸入。視圖不進行任何業務邏輯處理。
模型: 模型表示業務數據和業務處理。相當於JavaBean。一個模型能為多個視圖提供數據。這提高了應用程序的重用性
控制器: 當用戶單擊Web頁面中的提交按鈕時,控制器接受請求並調用相應的模型去處理請求。
然后根據處理的結果調用相應的視圖來顯示處理的結果。
MVC的處理過程:首先控制器接受用戶的請求,調用相應的模型來進行業務處理,並返回數據給控制器。控制器調用相應的視圖來顯示處理的結果。並通過視圖呈現給用戶。

Struts
1. struts1.2和struts2.0的區別?如何控制兩種框架中的單例模式?
struts1.2和struts2.0的對比
a、Action類:
struts1.2要求Action類繼承一個基類。struts2.0 Action要求繼承ActionSupport基類
b、線程模式
struts1.2 Action是單例模式的並且必須是線程安全的,因為僅有一個Action的實例來處理所有的請求。
單例策略限制了Struts1.2 Action能做的事情,並且開發時特別小心。Action資源必須是線程安全的或同步的。
struts2.0 Action為每一個請求產生一個實例,因此沒有線程安全問題。
c、Servlet依賴
struts1.2 Action依賴於Servlet API,因為當一個Action被調用時HttpServletRequest和HttpServletResponse被傳遞給execut方法。
struts2.0 Action不依賴於容器,允許Action脫離容器單獨測試。如果需要,Struts2 Action仍然可以訪問初始的Request和Response。
但是,其他的元素減少或者消除了直接訪問HttpServletRequest和HttpServletResponse的必要性。
d、可測性
測試struts1.2 Action的一個主要問題是execute方法暴露了Servlet API(這使得測試要依賴於容器)。一個第三方擴展:struts TestCase
提供了一套struts1.2的模擬對象來進行測試。
Struts2.0 Action可以通過初始化、設置屬性、調用方法來測試,“依賴注入”也使得測試更容易。

2. 項目中為什么使用SSH
1. 使用Struts是因為struts是基於MVC模式的,很好的將應用程序進行了分層,使開發者更關注於業務邏輯的實現;第二,struts有着豐富的taglib,如能靈活運用,則能大大提高開發效率。
2. 使用Hibernate:因為hibernate為Java應用提供了一個易用的、高效率的對象關系映射框架。hibernate是個輕量級的持久性框架,功能豐富。
3. 使用Spring:因為spring基於IoC(Inversion of Control,反向控制)和AOP構架多層j2ee系統的框架,但它不強迫你必須在每一層中必須使用Spring,因為它模塊化的很好,允許你根據自己的需要選擇使用它的某一個模塊;采用IoC使得可以很容易的實現bean的裝配,提供了簡潔的AOP並據此實現事務管理(Transcation Managment),等等 

3. struts與spring是如何繼承的
不懂題目之意:是否是說的struts的action都繼承自org.apache.struts.action.Action而Spring中的繼承就不清楚了。

4. struts如何實現國際化
以下以兩國語言(中文,英文)為例:
1. 在工程中加入Struts支持
2. 編輯ApplicationResource.properties文件,在其中加入要使用國際化的信息, 例如: 
lable.welcome.china=Welcome!!!
3. 創建英文資源文件ApplicationResource_en.properites
4. 創建臨時中文資源文件ApplicationResource_temp.properites 例如:lable.welcom.china=中國歡迎您!
5. 對臨時中文資源文件進行編碼轉換。可以使用myeclipse的插件,也可以在dos下執行:
native2ascii -encoding gb2312 ApplicationResource_temp.properties ApplicationResource_zh_CN.properties
6. 在jsp中加入struts的bean標記庫 <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
顯示信息: 
可以在struts-config.xml文件中定義多個資源包,而每個資源包可使用key屬性指定包的名稱。

5. struts2.0的常用標簽
1. 往action里傳值:
2. 顯示標簽 property 用於輸出指定值:
3. 用於從頁面往action中(user)的對象內傳值:
4. 判斷 用於在頁面中判斷指定數據 …. …. 
5. 迭代用於將List、Map、ArrayList等集合進行循環遍歷
6. URL地址標簽,用於生成一個URL地址,可以通過URL標簽指定的子元素向URL地址發送請求參數
7. 超鏈接 一般和標簽一起使用,用於帶多個參數。“>超鏈接
8. set標簽,用於將某個值放入指定的范圍內。例如application,session等。

6. struts中怎么配置form-bean、action、tiles
此處配置的是struts1.2的
form-bean配置:(在配置文件struts-config.xml中):
name: 指定form的名字; type指定form的類型:包名+類名;
action配置:(在配置文件struts-config.xml中)
attribute=""
input=""
name=""
parameter=""
scope="request"
type=""
>
path:請求Action的名字; attribute:form的名字,與form-bean中的name對應; input:輸入頁的路徑;
name:如果配置了attribute,name不起作用,與attribute一樣; parameter:使用分發Action時,指定調用分發
Action中的方法名;

scope:Action的范圍; type:Action的類型:包名+類名;

7.什么是IOC(DI),有什么好處(java project 的spring IOC模擬)

IOC(Inversion Of Control,控制反轉):一個類的某個屬性需要使用時,需要有本類自己初始化。而在spring類的某些屬性不用自己初始化而交給了spring來管 理。這樣的轉換就是IOC思想。Spring的IOC思想是,spring的IOC容器在初始化的時候就根據配置對相應的對象進行初始化,並放在容器中。 同時根據配置對相應類的屬性進行初始化。也就是DI(Dependency Injection依賴注入),至此類的初始化不需要類本身負責初始化而交給了spring容器。
IOC的好處是:降低耦合性:某個類的一個屬性,以前是該類自己控制,而引人Spring后,這個類的屬性由Spring控制。
Spring IOC的模擬所做的事情是:在xml文件配置好相應的bean,設置注入關系。在解析xml時候對bean進行初始化同時對相應屬性進行注入。


8.什么是AOP?

兩種注入方式:

a)使用Annotation
b)使用xml

面向切面編程(AOP)完善spring的依賴注入(DI),面向切面編程在spring中主要表現為兩個方面
1.面向切面編程提供聲明式事務管理
2.spring支持用戶自定義的切面

面向切面編程(aop)是對面向對象編程(oop)的補充,面向對象編程將程序分解成各個層次的對象,面向切面編程將程序運行過程分解成各個切面。
AOP從程序運行角度考慮程序的結構,提取業務處理過程的切面,oop是靜態的抽象,aop是動態的抽象,是對應用執行過程中的步驟進行抽象,從而獲得步驟之間的邏輯划分。
aop框架具有的兩個特征:
1.各個步驟之間的良好隔離性
2.源代碼無關性 


9.DAO層采用JdbcTemplate操作數據,如何在Service層控制事務?
DAO層采用JdbcTemplate進行數據庫操作。 
Service層調用DAO層方法。 
由於一個Service方法可能需要調用多個DAO對象的方法,需要在Service層進行事務控制。 
由於一些原因,需要采用編程式事務(現使用TransactionTemplate)。 
可是存在一個問題: 
只有當創建TransactionTemplate對象的DataSourceTransactionManager使用的DataSource對象和 DAO對象創建JdbcTemplate對象使用的DataSource是同一個對象時才能在 transactionTemplate.execute()方法中控制事務。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM