Spring是一個服務於所有層面的application framework:提供了bean的配置基礎,AOP的支持,JDBC的提取框架,抽象事務支持,等等。它有一個非常顯著的特點:在某個層面上如果你不需要Spring的支持,你就可以不使用String的class,只使用它的某一部分的功能。從它的設計理念,你可以看到String幫助你實現了真正的邏輯層和web層的分離。
相對於EJB來說,Spring是一個輕量級的J2EE應用開發框架。這裡提到的輕量級指的是Spring框架本身,而不是說Spring只能適用於輕量級的應用開發。Spring的輕盈體現在其框架本身的基礎結構以及對其他應用工具的支持和裝配能力,與EJB這種龐然大物相比,Spring使我們把各個技術層次之間的風險降低。EJB的內聚性較強,比如數據持久層管理、事務管理、生命周期管理都全部交給了EJB容器中管理,內聚性的白盒特征使我們必須放棄一部分可控性而去信任容器能力。而Spring則是考慮如何“不造輪子”,如何更好的組裝這些輪子,讓他們更好的轉動。比如數據持久層管理可以使用hibernate,日志管理可以使用jakartacommonlogging。一個比較恰當的比喻就是“我們要釘幾個釘子,為了完成這個目的,錘子生產商生產了大大小小一系列的錘子,每個錘子都有一套復雜的使用方法,用來釘某種特別的釘子,結果令我們頭疼不堪。解決錘子過多的問題,通過spring,我們可以使用幾種錘子,但用起來象是只有一個錘子”。(注:這段話是在網上看見的,這裡引用這個比喻,我個人覺得很生動)關於這個框架也有一些簡單的總結:“Spring有幾個主要的部分:Bean+ApplicationContext,以一種統一的、IoC的方式查找、管理、組裝、使用系統的組件,取代一切工廠;持久化框架;web框架。“J2EE框架”是RodJohnson的願景,他希望Spring為J2EE輕量級解決方案提供自底至頂的全面基礎設施支持。”
上面是關於一個新的Framework的簡單介紹,據說是未來J2EE發展的方向。以前在論壇上有關於J2EE最佳組合的討論,聽說這個JSTL+Struts(或webwork)+Spring+Hibernate的組合很被看好,如果你感興趣的話,可以到SpringFramework中文論壇上看看。下面轉入本文的正題。
Spring 標記庫介紹及用法:
本文將重點介紹Spring 提供的標記庫及其用法:
當你在項目中用Spring Framework的時候,表現層可以選擇Spring Framework自帶的標記庫。當然,這不是你唯一的選擇。你可以選擇其它標記庫或模板替換技術。Spring Framework 並沒有為應用提供非常豐富的標記庫。Spring Framework 提供的標記庫僅僅是為了夠用就行,它並不是無所不包的。呵呵,這點與Struts豐富的標記庫不一樣。其實這點符合RodJohnson的出發點,既“不造輪子”。當然,Spring Framework標記庫有它自身的特點,可以說是個有益的補充吧。
Spring 標記庫分類如下:
1、spring:hasBindErrors
2、spring:bind
3、spring:transform
4、spring:message
5、spring:htmlEscape
6、spring:theme
下面我們來具體介紹一下用法:
1、spring:hasBindErrors
對應org.springframework.web.servlet.tags.BindErrorsTag標記庫處理類。
這個標記提供用於綁定對象的errors,如果這個標記被用到的話,那麼關於這個對象的錯誤將在頁面上顯示出來。使用這個標記的前提條件是要先使用<spring:bind>標記,並且<spring:hasBindErrors>這個標記不能用來表示對象的狀態,它僅僅可以綁定對象本身和對象的屬性。 具體用法如下:
<spring:hasBindErrors name="priceIncrease"> <b>Please fix all errors!</b> </spring:hasBindErrors>
通過這個簡單的例子,我來具體說一下這個標記的屬性吧。
name:是要被檢查的Bean的名字。這個屬性是必需要的。
這裡是簡單用法,所以就不介紹它包含的errors變量了。具體看英語文檔。下同。
2、spring:bind
對應org.springframework.web.servlet.tags.BindTag標記庫處理類
這個標記用來為某個bean或bean 的屬性賦值,通常和form一起用,相當於action的作用。它指明表單要提交到那個類或類的屬性中去。
其中path屬性是必須的,指明轉到的類的路徑。舉例如下:
<form method="post">
<table width="95%" bgcolor="f8f8ff" border="0" cellspacing="0" cellpadding="5">
<tr>
<td alignment="right" width="20%">Increase (%):</td>
<spring:bind path="priceIncrease.percentage">
<td width="20%">
<input type="text" name="percentage" value="<c:out value="${status.value}"/>">
</td>
<td width="60%">
<font color="red"><c:out value="${status.errorMessage}"/></font>
</td>
</spring:bind>
</tr>
</table>
<br>
……………………省略
</form>