<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    風人園

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

    Spring Framework標記庫初學者指南

    Spring架構簡要介紹:


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

    Spring?標記庫介紹及用法:


    ????本文將重點介紹Spring?提供的標記庫及其用法:
    當你在項目中用Spring?Framework的時候,表現層可以選擇Spring?Framework自帶的標記庫。當然,這不是你唯一的選擇。你可以選擇其它標記庫或模板替換技術。Spring?Framework?并沒有為應用提供非常豐富的標記庫。Spring?Framework?提供的標記庫僅僅是為了夠用就行,它并不是無所不包的。呵呵,這點與Struts豐富的標記庫不一樣。其實這點符合RodJohnson的出發(fā)點,既“不造輪子”。當然,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>這個標記不能用來表示對象的狀態(tài),它僅僅可以綁定對象本身和對象的屬性。?具體用法如下:
    1. <spring:hasBindErrors?name="priceIncrease">
    2. ????<b>Please?fix?all?errors!</b>
    3. ??</spring:hasBindErrors>

    ??通過這個簡單的例子,我來具體說一下這個標記的屬性吧。
    ??name:是要被檢查的Bean的名字。這個屬性是必需要的。
    ??呵呵,這里是簡單用法,所以就不介紹它包含的errors變量了。具體看英語文檔。下同。
    ??
    2。spring:bind?
    對應org.springframework.web.servlet.tags.BindTag標記庫處理類
    這個標記用來為某個bean或bean?的屬性賦值,通常和form一起用,相當于action的作用。它指明表單要提交到那個類或類的屬性中去。
    其中path屬性是必須的,指明轉到的類的路徑。舉例如下:
    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?
    對應org.springframework.web.servlet.tags.TransformTag標記庫處理類,這個標記用來轉換表單中不與bean中的屬性一一對應的那些屬性,通常和<spring:bind>一起使用。<spring:transform>標記為<spring:bind>使用提供了更好的支持。
    屬性如下:
    value:必需要的。和當前<spring:bind>標記指向的bean類相同。就是你要轉換的實體類名。
    var:不是必需的。這個字符串被用來綁定輸出結果到page,request,?session或application?scope.默認情況輸出到jsp中。
    scope:不是必需的。前提條件var必須設置的情況下。它的值可以是page,request,?session或application。

    4。spring:message?對應org.springframework.web.servlet.tags.MessageTag標記庫處理類
    這個標記用來幫助springframework支持國際化。和JSTL的fmt:message標記類似。當然這個標記可以很好的工作的本地的springframework框架下。
    屬性如下:
    code:不是必需的。用來查找message,如果沒有被使用的話,text將被使用。
    text:不是必需的。假如code不存在的話,默認是text輸出。當code和text都沒有設置的話,標記將輸出為null.
    var:不是必需的。這個字符串被用來綁定輸出結果到page,request,?session或application?scope.默認情況輸出到jsp中。
    scope:不是必需的。前提條件var必須設置的情況下。它的值可以是page,request,?session或application。

    5。spring:htmlEscape?
    對應org.springframework.web.servlet.tags.HtmlEscapeTag標記庫處理類
    不常用,這里省略
    6。spring:theme?
    對應org.springframework.web.servlet.tags.ThemeTag標記庫處理類
    不常用,這里省略
    哈哈,學習完這些用法后,讓我們來看個具體的例子吧。
    配置步驟如下:
    目錄結構圖:
    -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>標記經常用來綁定<input>表單元素以便提交給PriceIncrease.java,其實PriceIncrease.java中就是包含一些getter和setter的方法的類。當用戶按下按鈕提交的時候,其表單中的值實際上就被framework放到了PriceIncrease.java中。<spring:bind>經常和form一起使用.這個${status.errorMessage}和${status.value}是一個framework定義的特殊變量,它們被用來顯示錯誤信息和當前表單中的數據。呵呵,今天就到此為止吧,關于Spring?Framework標記庫的詳細用法,請參考其文檔。
    參考資料:
    http://www.springframework.org/
    Spring?Framework英文文檔
    Spring?Framework中文論壇

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

    主站蜘蛛池模板: 曰曰鲁夜夜免费播放视频| 成全高清在线观看免费| 久久青草亚洲AV无码麻豆| a级日本高清免费看| 亚洲高清国产拍精品熟女| 久久精品视频亚洲| 中文字幕日韩亚洲| 久久久久久精品免费免费自慰| 亚洲av片不卡无码久久| 国产精品四虎在线观看免费| 国产一级婬片A视频免费观看| 亚洲大香伊人蕉在人依线| 亚洲情XO亚洲色XO无码| va亚洲va日韩不卡在线观看| 国产高清不卡免费视频| 国产免费A∨在线播放| 男男gay做爽爽的视频免费| 亚洲av日韩av天堂影片精品| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 久久精品私人影院免费看| 思思久久99热免费精品6| 亚洲GV天堂GV无码男同| 亚洲熟妇无码AV不卡在线播放| 亚洲欧洲校园自拍都市| 亚洲精品无码不卡| 国产免费观看黄AV片| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 中国一级特黄的片子免费 | 免费99热在线观看| 日韩精品无码人妻免费视频| 免费国产成人α片| 无码色偷偷亚洲国内自拍| 亚洲欧美成人一区二区三区| 亚洲AV午夜成人片| 亚洲国产精品福利片在线观看| 女人被弄到高潮的免费视频| 今天免费中文字幕视频| 国产色无码精品视频免费| 在线播放免费人成毛片乱码| 久久美女网站免费| 中文字幕免费在线观看|