千里馬

          天馬行空

          JSTL(jsp標(biāo)準(zhǔn)標(biāo)簽庫(kù))

          1,JSTL是一個(gè)不斷完善的開放源代碼的jsp標(biāo)簽庫(kù),有Apache組織的jakarta小組維護(hù)。JSTL只能運(yùn)行在支持jsp1.2和Servlet2.3規(guī)范及其以后的web容器上,Tomcat4.x版本以上均可使用。從jsp2.0開始作為javaee標(biāo)準(zhǔn)支持的。
          2,jsp標(biāo)簽庫(kù):jsp標(biāo)簽庫(kù)規(guī)范指出,開發(fā)這可以通過實(shí)現(xiàn)javax.servlet.jsp.tagext.JspTag接口,并提供一個(gè)標(biāo)簽庫(kù)的描述文件(XML格式,以.tld結(jié)尾)來實(shí)現(xiàn)一個(gè)標(biāo)簽庫(kù)。使用該標(biāo)簽庫(kù)的jsp文件需要使用taglib指令元素進(jìn)行導(dǎo)入。
          jsp標(biāo)簽庫(kù)最大的有點(diǎn)是把某種特定的功能進(jìn)行封裝,需要使用這種功能的地方可以直接調(diào)用,而不必重復(fù)些類似的代碼,尤其對(duì)于web開發(fā)常見的功能非常有幫助。
          例子如下
          (1)完成標(biāo)簽類:
          package JSTL;

          import java.io.IOException;
          import java.util.Date;

          import javax.servlet.jsp.JspException;
          import javax.servlet.jsp.JspWriter;
          import javax.servlet.jsp.tagext.TagSupport;

          public class MyTag extends TagSupport {
            @Override
          public int doEndTag() throws JspException {
            JspWriter out= pageContext.getOut();
            try {
            out.print(new Date().toString());
           } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
           }
            return EVAL_PAGE;
          }
          }
          (2)完成標(biāo)簽庫(kù)描述文件:
          <?xml version="1.0" encoding="UTF-8"?>
           <taglib>
          <tlibversion>1.0</tlibversion>
          <jspversion>2.0</jspversion>
          <shortname>tagLib</shortname>
          <uri>/WEB-INF/TagDescription.tld</uri>
          <info>myTagLib</info>
          <tag>
          <name>currentName</name>
          <tagclass>JSTL.MyTag</tagclass>
          <bodycontent>empty</bodycontent>
          </tag>
          </taglib>

          (3),在jsp頁面中使用:
          <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
          <%@ taglib uri="/WEB-INF/TagDescription.tld" prefix="m" %>
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          <html>
            <head>
            </head>
           
            <body>
             µ±Ç°Ê±¼ä£º<m:currentName/>
            </body>
          </html>
          3,jstl的優(yōu)點(diǎn):(1)簡(jiǎn)化了jsp的開發(fā),減少了jsp中的scriptlet代碼數(shù)量。jsp主要用于顯示業(yè)務(wù)邏輯代碼處理以后的數(shù)據(jù)結(jié)果。不可避免的會(huì)使用循環(huán),布爾邏輯,數(shù)據(jù)格式轉(zhuǎn)換等語句,如果使用jsp腳本的for、if或其他語句,不僅需要導(dǎo)入必要的包,而且每個(gè)類似的地方都要寫相同的代碼,非常不利于維護(hù)。使用jstl可以大大簡(jiǎn)化這方面的開發(fā)。
          (2),在應(yīng)用程序服務(wù)器之間提供了一致的接口,最大程度提高了web應(yīng)用在各應(yīng)用服務(wù)器之間的移植。jstl屬于javaee規(guī)范以內(nèi),所有符合web規(guī)范的服務(wù)器都必須支持jstl,所以將web應(yīng)用程序進(jìn)行移植完全不存在問題。反過來,如果是其他第三方提供的標(biāo)簽庫(kù),就需要提供另外的資源才能進(jìn)行移植。
          (3),jstl的開源性決定了它具有很強(qiáng)的擴(kuò)展性。jstl的給類標(biāo)簽幾乎覆蓋了所有web應(yīng)用程序的常見功能,如果這些功能還不能滿足開發(fā)者的需求的話,可以對(duì)他本身的實(shí)現(xiàn)類繼續(xù)進(jìn)行擴(kuò)展,及利用率jstl的良好設(shè)計(jì),又可以滿足特定的需求。
          4,JSTL標(biāo)簽庫(kù)使用方法:

          標(biāo)簽庫(kù)                         URI                                           前綴      使用模式
          核心標(biāo)簽庫(kù)                  http://java.sun.com/jstl/core         c             <c:tagname…>

          國(guó)際化標(biāo)簽(I18N)        http://java.sun.com/jstl/fmt           fmt         <fmt:tagname…>

          SQL標(biāo)簽庫(kù)                 http://java.sun.com/jstl/sql            sql          <sql:tagname…>

          XML標(biāo)簽庫(kù)                http://java.sun.com/jstl/xml          x            <x:tagname…>

          函數(shù)標(biāo)簽庫(kù)                  http://java.sun.com/jstl/functions   fn           <fn:tagname…>

           (1)核心標(biāo)簽庫(kù):包含了常用的標(biāo)簽、迭代標(biāo)簽和其他一些一般用標(biāo)簽。在jsp頁面中使用核心標(biāo)簽庫(kù)的引用格式:
          <%@ taglib uri=" 一般用途標(biāo)簽:<c:out><c:set><c:remove>
          <c:out>用于向jsp的輸出流打印一個(gè)表達(dá)式的結(jié)果。
          <c:set>用于向特定的作用范圍設(shè)置一個(gè)屬性對(duì)象或設(shè)置一個(gè)javabean的屬性值。
          迭代標(biāo)簽<c:foreach>:在web應(yīng)用程序中,迭代主要用于訪存和顯示數(shù)據(jù)集。通常以列表和表中的一系列行的形式顯示。實(shí)現(xiàn)迭代內(nèi)容的主要的jstl標(biāo)簽是<c:foreach>.該標(biāo)記支持兩種不同樣式的迭代,整數(shù)范圍的迭代(類似java語言的for循環(huán)語句)和集合上的迭代(類似java語言的iterator和foreach);
          使用<c:if>和<c:choose>實(shí)現(xiàn)布爾邏輯判斷。
          jstl核心標(biāo)簽庫(kù)的其余標(biāo)簽主要是關(guān)于url的,這些標(biāo)簽中首推<C:url>,用于生成url。它提供了三個(gè)功能元素,為javaweb應(yīng)   用程序構(gòu)造url時(shí)特別有用。
            (1),在前面附加當(dāng)前servlet上下文的名稱。
             (2),為會(huì)話管理重寫url
             (3),請(qǐng)求參數(shù)的名稱和值的url編碼。
          (2),jstl數(shù)據(jù)庫(kù)標(biāo)簽庫(kù)(sql):
          jstl數(shù)據(jù)庫(kù)標(biāo)簽庫(kù)是為了減少操作數(shù)據(jù)庫(kù)的jsp腳本代碼而設(shè)計(jì)的。讓開發(fā)者快捷的操作數(shù)據(jù)庫(kù),他的本質(zhì)上也是使用jdbc進(jìn)行數(shù)據(jù)庫(kù)操作的。
          使用數(shù)據(jù)庫(kù)標(biāo)簽庫(kù)的:<%@ taglib uri="
          使用jstl數(shù)據(jù)庫(kù)標(biāo)簽進(jìn)行數(shù)據(jù)庫(kù)數(shù)據(jù)的添加,刪除,查詢,修改操縱大致分為三步,:準(zhǔn)備數(shù)據(jù)源、執(zhí)行sql語句,及根據(jù)執(zhí)行結(jié)構(gòu)進(jìn)行相應(yīng)的操作。
          (1),使用<sql:setDataSource>標(biāo)簽為所有的sql標(biāo)簽準(zhǔn)備數(shù)據(jù)源對(duì)象,。一般來說,一個(gè)web應(yīng)用程序只需要一個(gè)數(shù)據(jù)源即可。
            <sql:setDataSource
               driver="驅(qū)動(dòng)類名"
               url="連接字符串"
               user="用戶名"
               password="密碼"
               var="數(shù)據(jù)源保存的變量名"
               scope="作用范圍"
           />
          (2),<sql:query>標(biāo)簽用于執(zhí)行select的sql語句,得到 查詢的結(jié)果集。
          <sql:query var="結(jié)果變量"sq="sql"
                 [scope="作用范圍"
          datasource="數(shù)據(jù)源"
           maxRows="最大行數(shù)"
          startRow="其實(shí)行數(shù)"]>
          [<sql:param>指定sql參數(shù)]
          </sql:query>
          使用<sql:update>標(biāo)簽更新數(shù)據(jù)庫(kù)數(shù)據(jù):<sql:update>標(biāo)簽用于執(zhí)行insert、update和delete的sql語句得到的結(jié)果為影響的記錄條數(shù):
           <sql:update var="結(jié)果變量" sql="sql語句"
               [
          scope="作用范圍"
          datasource="數(shù)據(jù)源"]>
          [<sql:param>指定sql參數(shù)]
          <sql:update>
          <sql:update var="結(jié)果變量"
               [scope="作用范圍"
               datasource="數(shù)據(jù)源"]>
          sql語句
          [<sql:param>指定sql參數(shù)]
          </sql:update>
          使用<sql:transaction>標(biāo)簽來使用數(shù)據(jù)庫(kù)事務(wù)
          事務(wù)處理用于保護(hù)作為一組必須成功或必須失敗的一系列數(shù)據(jù)庫(kù)操作。當(dāng)使用jstl的數(shù)據(jù)表標(biāo)簽庫(kù)來進(jìn)行數(shù)據(jù)庫(kù)操作的時(shí)候同樣可以使用事物,將相應(yīng)的<sql:query>和<sql:update>操作嵌套到<sql:transaction>標(biāo)簽的主體內(nèi)容中,把一系列的查詢和更新操縱打包到一個(gè)事物處理中即可。
          <sql:transaction [dataSource="數(shù)據(jù)源" isolation="隔離級(jí)別"]>
          <sql:query .../>
          or
          <sql:update.../>
          ...
          </sql:transaction>
          (3)JSTL函數(shù)標(biāo)簽庫(kù)(Function)
          函數(shù)標(biāo)簽庫(kù)相對(duì)于其他的標(biāo)簽庫(kù)來說比較特殊,它是jstl定義的標(biāo)準(zhǔn)的el函數(shù)集合。直接在el中使用,使用方式:fn:函數(shù)名(參數(shù))。該標(biāo)簽庫(kù)定義的函數(shù)基本上都是對(duì)字符串進(jìn)行相關(guān)操作的函數(shù)。
          布爾表達(dá)式函數(shù):contains,containsIgnoreCase startWith endWith返回的true和false
          fn:contains("源字符串","匹配字符串")
          fn:contains("源字符串","匹配字符串");
          fn:startWith("源字符串","匹配的開頭字符串");
          fn:endWith("源字符串","匹配的結(jié)尾字符串");
          整型表達(dá)式函數(shù):indexOf和length分別是返回字符串的下表和整個(gè)字符串的長(zhǎng)度
          fn:indexOf("源字符串","匹配字符串")
          fn:length("源字符串")
          字符修改函數(shù):fn:replace("源字符串","匹配字符串","替換后的字符串")用于替換字符串的某些內(nèi)容
          fn:subString ("源字符串",開始下標(biāo),"結(jié)束下標(biāo)")用于截取字符串的一段
          fn:toUppercase()轉(zhuǎn)換成大寫
          fn:toLowerCase()轉(zhuǎn)換成小寫
          fn:trim 去掉字符串兩頭的空格

          posted on 2012-05-24 09:28 Mr Lee 閱讀(4081) 評(píng)論(1)  編輯  收藏 所屬分類: java技術(shù)

          Feedback

          # re: JSTL(jsp標(biāo)準(zhǔn)標(biāo)簽庫(kù))[未登錄] 2014-04-29 16:29 ddd

          fsdfsd  回復(fù)  更多評(píng)論   


          My Links

          Blog Stats

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章檔案

          (hibernate)http://www.aygfsteel.com/dyllove98/archive/2012/05/12/377959.html

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 浦江县| 景洪市| 屏边| 金阳县| 花垣县| 津市市| 石家庄市| 安康市| 新建县| 治多县| 松桃| 天镇县| 永城市| 彰武县| 慈利县| 昭觉县| 南华县| 渭南市| 邢台市| 芜湖县| 清新县| 理塘县| 普安县| 定日县| 五原县| 双江| 鲁甸县| 资源县| 平潭县| 昌江| 板桥市| 苍梧县| 闻喜县| 扎囊县| 图们市| 兴业县| 木兰县| 巴东县| 元阳县| 阿拉善右旗| 红河县|