風(fēng)人園

          弱水三千,只取一瓢,便能解渴;佛法無邊,奉行一法,便能得益。
          隨筆 - 99, 文章 - 181, 評(píng)論 - 56, 引用 - 0
          數(shù)據(jù)加載中……

          Spring Framework標(biāo)記庫(kù)初學(xué)者指南

          Spring架構(gòu)簡(jiǎn)要介紹:


          ????Spring是一個(gè)服務(wù)于所有層面的application?framework:提供了bean的配置基礎(chǔ),AOP的支持,JDBC的提取框架,抽象事務(wù)支持,等等。它有一個(gè)非常顯著的特點(diǎn):在某個(gè)層面上如果你不需要Spring的支持,你就可以不使用String的class,只使用它的某一部分的功能。從它的設(shè)計(jì)理念,你可以看到String幫助你實(shí)現(xiàn)了真正的邏輯層和web層的分離。
          ???相對(duì)于EJB來說,Spring是一個(gè)輕量級(jí)的J2EE應(yīng)用開發(fā)框架。這里提到的輕量級(jí)指的是Spring框架本身,而不是說Spring只能適用于輕量級(jí)的應(yīng)用開發(fā)。Spring的輕盈體現(xiàn)在其框架本身的基礎(chǔ)結(jié)構(gòu)以及對(duì)其他應(yīng)用工具的支持和裝配能力,與EJB這種龐然大物相比,Spring使我們把各個(gè)技術(shù)層次之間的風(fēng)險(xiǎn)降低。EJB的內(nèi)聚性較強(qiáng),比如數(shù)據(jù)持久層管理、事務(wù)管理、生命周期管理都全部交給了EJB容器中管理,內(nèi)聚性的白盒特征使我們必須放棄一部分可控性而去信任容器能力。而Spring則是考慮如何“不造輪子”,如何更好的組裝這些輪子,讓他們更好的轉(zhuǎn)動(dòng)。比如數(shù)據(jù)持久層管理可以使用hibernate,日志管理可以使用jakartacommonlogging。一個(gè)比較恰當(dāng)?shù)谋扔骶褪恰拔覀円攷讉€(gè)釘子,為了完成這個(gè)目的,錘子生產(chǎn)商生產(chǎn)了大大小小一系列的錘子,每個(gè)錘子都有一套復(fù)雜的使用方法,用來釘某種特別的釘子,結(jié)果令我們頭疼不堪。解決錘子過多的問題,通過spring,我們可以使用幾種錘子,但用起來象是只有一個(gè)錘子”。(注:這段話是在網(wǎng)上看見的,這里引用這個(gè)比喻,我個(gè)人覺得很生動(dòng))關(guān)于這個(gè)框架也有一些簡(jiǎn)單的總結(jié):“Spring有幾個(gè)主要的部分:Bean+ApplicationContext,以一種統(tǒng)一的、IoC的方式查找、管理、組裝、使用系統(tǒng)的組件,取代一切工廠;持久化框架;web框架。“J2EE框架”是RodJohnson的愿景,他希望Spring為J2EE輕量級(jí)解決方案提供自底至頂?shù)娜婊A(chǔ)設(shè)施支持。”?
          ???好了,上面是關(guān)于一個(gè)新的Framework的簡(jiǎn)單介紹,據(jù)說是未來J2EE發(fā)展的方向。以前在論壇上有關(guān)于J2EE最佳組合的討論,聽說這個(gè)JSTL+Struts(或webwork)+Spring+Hibernate的組合很被看好(觀點(diǎn)不一,僅供參考,呵呵),如果你感興趣的話,可以到SpringFramework中文論壇上看看。下面轉(zhuǎn)入本文的正題。

          Spring?標(biāo)記庫(kù)介紹及用法:


          ????本文將重點(diǎn)介紹Spring?提供的標(biāo)記庫(kù)及其用法:
          當(dāng)你在項(xiàng)目中用Spring?Framework的時(shí)候,表現(xiàn)層可以選擇Spring?Framework自帶的標(biāo)記庫(kù)。當(dāng)然,這不是你唯一的選擇。你可以選擇其它標(biāo)記庫(kù)或模板替換技術(shù)。Spring?Framework?并沒有為應(yīng)用提供非常豐富的標(biāo)記庫(kù)。Spring?Framework?提供的標(biāo)記庫(kù)僅僅是為了夠用就行,它并不是無所不包的。呵呵,這點(diǎn)與Struts豐富的標(biāo)記庫(kù)不一樣。其實(shí)這點(diǎn)符合RodJohnson的出發(fā)點(diǎn),既“不造輪子”。當(dāng)然,Spring?Framework標(biāo)記庫(kù)有它自身的特點(diǎn),可以說是個(gè)有益的補(bǔ)充吧。
          Spring?標(biāo)記庫(kù)分類如下:
          1。spring:hasBindErrors?
          2。spring:bind?
          3。spring:transform?
          4。spring:message?
          5。spring:htmlEscape?
          6。spring:theme?
          下面我們來具體介紹一下用法:
          1。spring:hasBindErrors?
          對(duì)應(yīng)org.springframework.web.servlet.tags.BindErrorsTag標(biāo)記庫(kù)處理類。
          這個(gè)標(biāo)記提供用于綁定對(duì)象的errors,如果這個(gè)標(biāo)記被用到的話,那么關(guān)于這個(gè)對(duì)象的錯(cuò)誤將在頁面上顯示出來。使用這個(gè)標(biāo)記的前提條件是要先使用<spring:bind>標(biāo)記,并且<spring:hasBindErrors>這個(gè)標(biāo)記不能用來表示對(duì)象的狀態(tài),它僅僅可以綁定對(duì)象本身和對(duì)象的屬性。?具體用法如下:
          1. <spring:hasBindErrors?name="priceIncrease">
          2. ????<b>Please?fix?all?errors!</b>
          3. ??</spring:hasBindErrors>

          ??通過這個(gè)簡(jiǎn)單的例子,我來具體說一下這個(gè)標(biāo)記的屬性吧。
          ??name:是要被檢查的Bean的名字。這個(gè)屬性是必需要的。
          ??呵呵,這里是簡(jiǎn)單用法,所以就不介紹它包含的errors變量了。具體看英語文檔。下同。
          ??
          2。spring:bind?
          對(duì)應(yīng)org.springframework.web.servlet.tags.BindTag標(biāo)記庫(kù)處理類
          這個(gè)標(biāo)記用來為某個(gè)bean或bean?的屬性賦值,通常和form一起用,相當(dāng)于action的作用。它指明表單要提交到那個(gè)類或類的屬性中去。
          其中path屬性是必須的,指明轉(zhuǎn)到的類的路徑。舉例如下:
          1. <form?method="post">
          2. ??<table?width="95%"?bgcolor="f8f8ff"?border="0"?cellspacing="0"?cellpadding="5">
          3. ????<tr>
          4. ??????<td?alignment="right"?width="20%">Increase?(%):</td>
          5. ??????<spring:bind?path="priceIncrease.percentage">
          6. ????????<td?width="20%">
          7. ??????????<input?type="text"?name="percentage"?value="<c:out?value="${status.value}"/>">
          8. ????????</td>
          9. ????????<td?width="60%">
          10. ??????????<font?color="red"><c:out?value="${status.errorMessage}"/></font>
          11. ????????</td>
          12. ??????</spring:bind>
          13. ????</tr>
          14. ??</table>
          15. ??<br>
          16. ?……………………省略
          17. </form>

          3。spring:transform?
          對(duì)應(yīng)org.springframework.web.servlet.tags.TransformTag標(biāo)記庫(kù)處理類,這個(gè)標(biāo)記用來轉(zhuǎn)換表單中不與bean中的屬性一一對(duì)應(yīng)的那些屬性,通常和<spring:bind>一起使用。<spring:transform>標(biāo)記為<spring:bind>使用提供了更好的支持。
          屬性如下:
          value:必需要的。和當(dāng)前<spring:bind>標(biāo)記指向的bean類相同。就是你要轉(zhuǎn)換的實(shí)體類名。
          var:不是必需的。這個(gè)字符串被用來綁定輸出結(jié)果到page,request,?session或application?scope.默認(rèn)情況輸出到j(luò)sp中。
          scope:不是必需的。前提條件var必須設(shè)置的情況下。它的值可以是page,request,?session或application。

          4。spring:message?對(duì)應(yīng)org.springframework.web.servlet.tags.MessageTag標(biāo)記庫(kù)處理類
          這個(gè)標(biāo)記用來幫助springframework支持國(guó)際化。和JSTL的fmt:message標(biāo)記類似。當(dāng)然這個(gè)標(biāo)記可以很好的工作的本地的springframework框架下。
          屬性如下:
          code:不是必需的。用來查找message,如果沒有被使用的話,text將被使用。
          text:不是必需的。假如code不存在的話,默認(rèn)是text輸出。當(dāng)code和text都沒有設(shè)置的話,標(biāo)記將輸出為null.
          var:不是必需的。這個(gè)字符串被用來綁定輸出結(jié)果到page,request,?session或application?scope.默認(rèn)情況輸出到j(luò)sp中。
          scope:不是必需的。前提條件var必須設(shè)置的情況下。它的值可以是page,request,?session或application。

          5。spring:htmlEscape?
          對(duì)應(yīng)org.springframework.web.servlet.tags.HtmlEscapeTag標(biāo)記庫(kù)處理類
          不常用,這里省略
          6。spring:theme?
          對(duì)應(yīng)org.springframework.web.servlet.tags.ThemeTag標(biāo)記庫(kù)處理類
          不常用,這里省略
          哈哈,學(xué)習(xí)完這些用法后,讓我們來看個(gè)具體的例子吧。
          配置步驟如下:
          目錄結(jié)構(gòu)圖:
          -spirngapp?
          ??-WEB-INF?
          ??????-classes?
          ??????-lib?
          ??-src?
          ??-war
          1。將spring.tld拷貝到WEB-INF目錄。
          2。將spring.jar拷貝到WEB-INF\lib包下
          舉例如下:
          在web.xml中配置好taglib屬性,代碼如下:
          1. <?xml?version="1.0"?encoding="UTF-8"?>
          2. <!DOCTYPE?web-app?PUBLIC?'-//Sun?Microsystems,?Inc.//DTD?Web?Application?2.3//EN'?'http://java.sun.com/dtd/web-app_2_3.dtd'>
          3. <web-app>
          4. ??<servlet>
          5. ????<servlet-name>springapp</servlet-name>
          6. ????<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
          7. ????<load-on-startup>1</load-on-startup>
          8. ??</servlet>
          9. ??<servlet-mapping>
          10. ????<servlet-name>springapp</servlet-name>
          11. ????<url-pattern>*.htm</url-pattern>
          12. ??</servlet-mapping>
          13. ??<welcome-file-list>
          14. ????<welcome-file>
          15. ??????index.jsp
          16. ????</welcome-file>
          17. ??</welcome-file-list>
          18. ??<taglib>
          19. ????<taglib-uri>/spring</taglib-uri>
          20. ????<taglib-location>/WEB-INFspring.tld</taglib-location>
          21. ??</taglib>
          22. </web-app>

          jsp頁面代碼如下:
          1. <%@?include?file="/WEB-INF/jsp/include.jsp"?%>
          2. <%@?taglib?prefix="spring"?uri="/spring"?%>
          3. <html>
          4. <head><title><fmt:message?key="title"/></title></head>
          5. <body>
          6. <h1><fmt:message?key="priceincrease.heading"/></h1>
          7. <form?method="post">
          8. ??<table?width="95%"?bgcolor="f8f8ff"?border="0"?cellspacing="0"?cellpadding="5">
          9. ????<tr>
          10. ??????<td?alignment="right"?width="20%">Increase?(%):</td>
          11. ??????<spring:bind?path="priceIncrease.percentage">
          12. ????????<td?width="20%">
          13. ??????????<input?type="text"?name="percentage"?value="<c:out?value="${status.value}"/>">
          14. ????????</td>
          15. ????????<td?width="60%">
          16. ??????????<font?color="red"><c:out?value="${status.errorMessage}"/></font>
          17. ????????</td>
          18. ??????</spring:bind>
          19. ????</tr>
          20. ??</table>
          21. ??<br>
          22. ??<spring:hasBindErrors?name="priceIncrease">
          23. ????<b>Please?fix?all?errors!</b>
          24. ??</spring:hasBindErrors>
          25. ??<br><br>
          26. ??<input?type="submit"?alignment="center"?value="Execute">
          27. </form>
          28. <a?href="<c:url?value="hello.htm"/>">Home</a>
          29. </body>
          30. </html>

          <spring:bind>標(biāo)記經(jīng)常用來綁定<input>表單元素以便提交給PriceIncrease.java,其實(shí)PriceIncrease.java中就是包含一些getter和setter的方法的類。當(dāng)用戶按下按鈕提交的時(shí)候,其表單中的值實(shí)際上就被framework放到了PriceIncrease.java中。<spring:bind>經(jīng)常和form一起使用.這個(gè)${status.errorMessage}和${status.value}是一個(gè)framework定義的特殊變量,它們被用來顯示錯(cuò)誤信息和當(dāng)前表單中的數(shù)據(jù)。呵呵,今天就到此為止吧,關(guān)于Spring?Framework標(biāo)記庫(kù)的詳細(xì)用法,請(qǐng)參考其文檔。
          參考資料:
          http://www.springframework.org/
          Spring?Framework英文文檔
          Spring?Framework中文論壇

          posted on 2006-06-21 13:38 風(fēng)人園 閱讀(197) 評(píng)論(0)  編輯  收藏 所屬分類: Spring

          主站蜘蛛池模板: 江达县| 海南省| 许昌县| 枝江市| 东至县| 清镇市| 行唐县| 兰考县| 华宁县| 合阳县| 富民县| 琼中| 陵水| 定兴县| 康保县| 都兰县| 皋兰县| 万州区| 钦州市| 大余县| 和平区| 赫章县| 福安市| 江城| 桐梓县| 怀远县| 深水埗区| 曲阜市| 方正县| 夹江县| 伊春市| 枣阳市| 芒康县| 武安市| 潞西市| 岗巴县| 石楼县| 梨树县| 卢湾区| 宁国市| 商丘市|