關於Struts, Spring, Hibernate的一點文字

1.Struts:
MVC框架:
Model(M): ActionForm, 每個表單的數據都組成一個ActionForm的對象, ActionForm就是Struts中的Model,不過它只能算是請求級別的Model,因爲真正的Model是數據庫。
View(V): JSP, 一個個JSP頁面,Struts裏面提供了豐富的標籤庫方便界面的開發, 如:struts-logic, struts-bean, struts-html, struts-nested, struts-tile.
Controller(C): Struts-config.xml, 這個配置文件是Controller,它控制一個Action進來,被forward到哪裏去,由誰來處理。
 
常見的標籤有:
Struts-html幾乎與html標籤對應.
Struts-logic:
messagesPresent, empty, equal, lessThan, lessEqual, match, forward, redirect.
Struts-bean:
Bean:message:以key的方式到資源文件中找到一個字符串替換相應位置。
下面struts和webwork的比較摘自(http://dev.csdn.net/article/71/71043.shtm)

 

 

 

Struts1.1

 

 

 

WebWork2

 

 

 

Action

 

 

 

Struts裏面,每一個Action類必需要繼承一個抽象的類org.apache.struts.action.Action。這個在Java編程中會引來一些問題,就是關於多種繼承的問題。

 

 

 

WebWorkAction類僅需要實現接口com.opensymphony.xwork.Action,也可以實現其它的接口來實現更多的功能,譬如:validate(驗證),localware(國際化)等。當然,它也提供了一個類ActionSupport集成了上面的所有功能,我們在開發中可以根據需要選擇。

 

 

 

線程模型

 

 

 

Struts Action必需是threadsafe方式,它僅僅允許一個實例去處理所有的請求。所以action用到的所有的資源都必需統一同步,這個就引起了線程安全的問題。

 

 

 

WebWork中,每個請求對應一個Action,因此沒有線程的安全問題。實際上Servlet容器對每個請求也產生多個對象,它也沒有證明對性能和垃圾回收產生太多的影響。

 

 

 

Servlet的依賴

 

 

 

Struts處理Action時必需要依賴ServletRequest ServletResponse,所有它擺脫不了Servlet容器。

 

 

 

WebWorkAction不用依賴Web層和其它的容器。它可以通過ActionContext,直接去訪問RequestResponse,但這個是可選的,只有在必需的請求下使用。

 

 

 

測試

 

 

 

Struts的每個Action都同Web層耦合在一起,這樣它的測試依賴於Web容器,單元測試也很難實現。不過有一個Junit的擴展工具Struts TestCase可以實現它的單元測試。

 

 

 

Webworkaction能夠通過賦予一定的屬性,就可以執行單元測試。同時也可以使用一個mock的實例去測試,而不是通過啓動web容器來進行測試。

 

 

 

FormBean

 

 

 

Struts要求有FormBean對應每一個表單,而且FormBean必需繼承抽象類ActionForm。而使用DynaBeans實際上沒有太大的意義。不能夠很好的處理現有的模型。

 

 

 

Webwork 能夠動態的收集web的數據然後再賦值給bean。它也可以使用FormBean的形式,FormBean可以是普通的DTO和域對象,它不用重新根據域對象來生成新的FormBean,也不需繼承抽象類ActionForm

 

 

 

前端表達式語言

 

 

 

Struts集成了JSTL,所以它主要使用JSTL的表達式語言來獲取數據。可是JSTL的表達式語言在Collection和索引屬性方面處理顯得很弱。

 

 

 

WebWork的表達式語言使用了功能強大的OGNL。它使用OGNL建立一個OgnlValueStack來搜索數據。Webwork前端也可以使用JSTL,但它同時支持:velocityfreemakerjspparerxml

 

 

 

類型的轉換

 

 

 

StrutsFormBean把所有的數據都作爲String類型,它可以使用工具Commons-Beanutils進行類型轉化。但它的轉化都是在Class級別,而且轉化的類型是不可配置的。類型轉化時的錯誤信息返回給用戶也是非常困難的。

 

 

 

WebWork使用OGNL進行類型轉化,提供了所有基本類型的轉化功能。類型轉化可以直接對一個Class進行(Class級別)轉化,也可以對Class的字段進行類型轉化。它使用攔截器可以很容易的將類型轉化的錯誤信息返回給用戶,而且錯誤信息可以對應到一個相應的字段。

 

 

 

Action 執行前和後的處理

 

 

 

Struts處理Action的時候是基於classhierarchies,很難在action處理前和後進行操作。

 

 

 

Webwork2 允許您處理Action可以通過攔截器,就是在每一個Action處理前或者後進行其它操作。它的攔截器可以在配置文件中動態添加,這樣Action和攔截器之間完全解藕,更好的實現了組件化。

 

 

 

驗證處理

 

 

 

Struts的驗證是調用FormBeanvalidator()方法,其實就是對FormBean的驗證。它一般使用框架Commons Validation進行數據驗證處理。它使用了一個全局的配置文件validation.xml定義了FormBean的驗證信息。StrutsFormBean屬性都被認爲是String類型,所以它在驗證時也需要額外的類型轉化。

 

 

 

WebWork使用Xwork的驗證框架進行驗證處理,它可以通過配置攔截器來激活。它可以爲每個需要驗證的Class指定一個xml驗證文件,也可以爲一個Class在不同的情況指定不同的xml驗證文件。WebWork證可以給每個Action類指定對應的驗證文件,也可以給Action的字段去指定驗證文件。通過攔截器來組裝Action和其驗證文件,使它們之間完全解藕。

 

 

 

Action執行的控制

 

 

 

Struts創建一個Action,如果想控制它的執行順序將會非常困難。甚至你要重新去寫Servlet來實現你的這個功能需求。

 

 

 

在這個方面,WebWork的攔截器棧提供了強大的功能。Action的所有切面功能都有攔截器來實現(比如:取得request請求參數、驗證處理等),這樣你就可以用攔截器棧來組織攔截器的執行順序。例如:你需要在使用request請求參數來設置Action屬性之前,使用IoC框架設置Action的屬性,反之已然。這時,你就可以爲packageAction指定一個攔截器棧來實現。

2.Spring:
Inversion of Control(IOC), Dependency Injection(DI)框架. 它使類之間的調用關係由配置文件來確定而不在代碼中限定死。
不使用DI代碼示例:
// 不使用DI.
public class A ...{
    
private B b;
    
public void demo() ...{
        
// BSon是b的一個子類
        b = new BSon();
        b.work();
   }

}

使用DI代碼示例:
 
// 使用DI
Public class A ...{
    Private B b;
    Public 
void demo() ...{
        
// 你在使用b之前沒有初始化這個對象因爲spring幫你設置好。
        b.work();
}

}

Spring配置文件:
<bean name="b"
    class
="BSon"
singleton
="false">
</bean>
<bean name="b1"
    class
="BSon1"
singleton
="false">
</bean>
 
<bean name="a"
    class
="A"
    singleton
="false">
<property name="b">
        
<ref bean="b" />
</property>
</bean>
 
Spring中常見的一些bean:
dataSource, 一般是org.apache.commons.dbcp.BasicDataSource的對象。
sessionFactory,
一般是org.springframework.orm.hibernate3.LocalSessionFactoryBean的一個對象。
transactionManager,
一般是org.springframework.orm.hibernate3.HibernateTransactionManager的對象。
 
3.Hibernate
ORM映射工具
 

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