傳智javaee第8標(biāo)簽庫本章中所有例子都在名為JSTLWEB應(yīng)用程序運行使用_第1頁
傳智javaee第8標(biāo)簽庫本章中所有例子都在名為JSTLWEB應(yīng)用程序運行使用_第2頁
傳智javaee第8標(biāo)簽庫本章中所有例子都在名為JSTLWEB應(yīng)用程序運行使用_第3頁
傳智javaee第8標(biāo)簽庫本章中所有例子都在名為JSTLWEB應(yīng)用程序運行使用_第4頁
傳智javaee第8標(biāo)簽庫本章中所有例子都在名為JSTLWEB應(yīng)用程序運行使用_第5頁
免費預(yù)覽已結(jié)束,剩余56頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第8章標(biāo)準(zhǔn)庫Tomcat5.5JSP網(wǎng)頁文件的例子程序都省略了<html><head>、<title>、<body>等HTML全局架構(gòu)。本章中用于描述的語法的各種符號的意義如果屬性的值用斜體字表示,表示該屬性可以是表達(dá)式;如果體的內(nèi)容用斜體字表示,表示體的內(nèi)容可以是JSP代碼。UserBeanJavaBean8-18-1packageorg.it315;publicclassUserBean{privateStringuserName;privateStringpassword;privateStringaddress;privateintvisitCount;publicvoidsetUserName(String{this.userName=}publicString{return}publicvoidsetPassword(String{this.password=}publicString{return}publicvoidsetAddress(String{this.address=}publicString{return}publicvoidsetVisitCount(int{this.visitCount=}publicint{return}}編譯這個源程序,將編譯后的UserBean.class文件放在<TOMCAT_HOME>\webapps\JSTL\WEB-INF\classes\org\it315JSTLJSTL簡從JSP1.1規(guī)范開始JSP就支持使自定義,使用自定義大大降低了JSP頁面的雜度,同時增強了代碼的重用性,因此自定義在WEB應(yīng)用中被廣泛使用。許多WEB應(yīng)廠都開發(fā)出了自己的一套庫提供給用戶使用,這導(dǎo)致出現(xiàn)了許多功能相同的,令網(wǎng)頁制者無所適從,不知道選擇哪一家的好。為了解決這個問題,ApacheJakarta網(wǎng)頁設(shè)計人員經(jīng)常遇到的問題,開發(fā)了一套用于解決這些常用問題的自定義庫,這套被SUN公定義為標(biāo)準(zhǔn)庫(TheJavaServerPagesStandardTagLibrary,稱JSTL。使用JSTL可解決用戶選用不同WEB廠商的自定義時的困惑JSP范同時也允許WEB容廠商按JSTL庫的標(biāo)準(zhǔn)提供自己的實現(xiàn),以獲取最佳性能。JSTLJSP1.2JSTLJSP1.2WEB,Tomcat5.5JSTL的邏輯組筆者在寫本章內(nèi)容時的JSTL規(guī)范的版本是JSTL1.1,它是JSP2.0規(guī)范中的一個重要組成部分。JSTL1.1中包含四個庫和一組EL函數(shù)。為方便用戶使用,JSP規(guī)范中描述了表 庫功能建議前庫hcXMLhx庫h數(shù)據(jù)庫hh下面對JSTL的各個庫進(jìn)行簡單的介紹)(1庫中包含了實現(xiàn)WEB應(yīng)用中的通用操作的。例如,用于輸出一個變量內(nèi)容)(2)格式化庫中包含實現(xiàn)WEB應(yīng)程序的的。例如,設(shè)置JSP頁面JSP(例如數(shù)值、日期等)JSP數(shù)據(jù)庫庫中包含用于數(shù)據(jù)庫和對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行操作的。例如,從數(shù)據(jù)源中獲得數(shù)據(jù)庫連接、從數(shù)據(jù)庫表中檢索數(shù)據(jù)等。由于在軟件分層的開發(fā)模型中,JSP頁面僅用作表現(xiàn)層,我們一般不在JSP頁面中直接操作數(shù)據(jù)庫,而是在業(yè)務(wù)邏輯層或數(shù)據(jù)層操作數(shù)據(jù)庫,所以,JSTL中提供的這套數(shù)據(jù)庫庫沒有多大的實用價值。XML庫中包含對XML文檔中的數(shù)據(jù)進(jìn)行操作的。例如,解析XML文檔、輸出XML文檔中的內(nèi)容,以及迭代處理XML文檔中的元素。因為XML廣泛應(yīng)用于WEB開發(fā),對XML文檔的處理非常重要,XML庫使處理XML文檔變得簡單方便,這也是JSTL的JSTLELJSP頁面制作者經(jīng)常要用到的字符串操作。JSTL的物理完整的JSTL應(yīng)包含SUN公司提供的jstl.jarWEB容器產(chǎn)商提供的JSTL實現(xiàn)包,以ApacheJakartaJSTLJSTLjstl.jar、standard.jarxalan.jarjarsunjstl.jarJSTLAPI接口和類,ApacheJakartaJSTLAPIstandard.jarJDK1.5XPathAPIapacheJakartaJSTLAPI是在JDK1.5之前推apacheJakartaJSTL中使用的是他們自己開發(fā)的XPathAPIAPI封裝在xalan.jar包中。Standard.jar包中包括庫、/格式化庫、數(shù)據(jù)庫庫中的和標(biāo)準(zhǔn)的EL自定義函數(shù)的實現(xiàn)類,xalan.jar包中包括JSTL解析XPath的相關(guān)API類。安裝和測試JSTL包可以從Apache的JSTL的jar包。進(jìn)入面,根據(jù)相關(guān)的提示信息zip壓縮文件,這個壓縮文件中包含JSTL的三個jar包。提示:由于的不斷升級,JSTL的jar包的可能改變。讀者在這些文件時,如果在指定的沒有的可以進(jìn)入Apache的首頁然后根據(jù)相關(guān)的提示所需的文件。例如,筆者在編寫JSTL初稿時,從的壓縮jstl.jar和standard.jar兩個jar包,而xalan.jar包要從。在Tomcat中安裝JSTL很簡單,只要將JSTL的jar包到<WEB應(yīng)用程序>\WEB-INF\lib的三個jar包到<TOMCAT_HOME>\webapps\JSTL\WEB-INF\lib 下即完成了JSTL的安裝。提示:Tomcat5.5自帶的JSP例子應(yīng)用程序中提供了使用JSTL的例子,在<TOMCAT_HOME>\webapps\jsp-examples\WEB-INF\libJSTL的jstl.jar包和standard.jar包,所以,對于讀者來說,如果不使用JSTL的XML庫中的,可以直接將這兩個包到<WEB應(yīng)用程序的主>\WEB-INF\lib中而不用事先從Apache的JSTLjarJSTLJSTLApache小組在提供JSTL時,同時也提供了JSTL的描述文件(即TLD文件,它們都封裝在standard.jar包中,位于該jar文件的META-INF 中。用WinRAR打開standard.jar包,進(jìn)入META-INF,可以看到JSTL的庫描述文件。查看這些TLD源文件,可以看到文件中定義的<uri>元素的內(nèi)容與表8.1中列出的庫的URI相同。因為standard.jar包中封裝了JSTL的庫描述文件,Tomcat在啟動時會自動加載standard.jar包中的META-INF下的所有TLD文件所以使用JSTL時不必在web.xml文件中配置JSTL庫的URI信息,就可以在JSP文件中直接使用JSTL。taglib指令的uri屬性必須為相應(yīng)庫的TLD文件中的<uri>元素的值taglib指令的prefix8.1JSTL應(yīng)用程序的主中按例程8-2編寫一個包含JSTL的簡單JSP文件test.jsp。8-2<%@taglib /jsp/jstl/core"prefix="c"<c:outvalue="oworld!"上面的test.jsp頁面中的<c:out>用于向瀏覽器輸出文本內(nèi)容它屬于JSTL庫中的。由于在test.jsp文件中只使用了JSTL的庫中的,所以,只需要使用一條taglib指令導(dǎo)入JSTL的庫而不必使用多條taglib指令導(dǎo)入JSTL的所有庫。啟動Tomcat后,在瀏覽器地址欄中輸入test.jsp頁面的地址進(jìn)行,如果瀏覽器中顯示出了“oworld!,說明JSTL安裝成功。 JSTL庫包含了一組用于實現(xiàn)WEB應(yīng)用中的通用操作的,JSP規(guī)范為c。況下,pageContext對象當(dāng)前保存的“out”對象的數(shù)據(jù)是輸出到客戶端瀏覽器,所以,<c:out>標(biāo)簽通常用于輸出一段文本內(nèi)容到客戶端瀏覽器。如果<c:out>輸出的文本內(nèi)容中包含了需要進(jìn)行轉(zhuǎn)義的HTML特殊字符,例如,<、>、'、"、&等,<c:out>默認(rèn)對它們按表8.2進(jìn)行HTML編碼轉(zhuǎn)換后再進(jìn)行輸出,這樣就可以在瀏覽器中顯示出這些字符。8.2語法1,沒有體的情況<c:out[default="defaultValue"]語法2,有體的情況,在體中指定輸出的默認(rèn)值<c:out[escapeXml="{true|false}"]default<c:out>的屬性說明如表8.3所示表8.3<c:out>的屬屬性是否支屬性類&指定如果valuenull為空字符串。<c:out>的體的內(nèi)容用于指定輸出的默認(rèn)值,如果value屬性的值不為null,即使體部分不為空,體的內(nèi)容也不會被輸出。如果value屬性不是指向一個java.io.Reader對象,<c:out>將調(diào)用這個對象的toString方法,然后輸出獲得的字符串內(nèi)容。如果value屬性指向一個java.io.Reader對象,<c:out>將從這個Reader對象中讀escapeXmltrue,<c:out>例程8-3是<c:out>的一個演示例子程序。8-3<%@taglibprefix="c" /jsp/jstl/core"<%@pagecontentType="text/html;charset=gb2312"session.setAttribute("test_session",<c:outvalue="test"default="123456"/><br/><hrWeb:<br<c:outvalue="${test_request}"default="這個屬性不存在"/><br/><hrWebtest_session:<br<c:outvalue="${test_session}"例程8-4和例程8-5是兩個用于演示<c:out>的escapeXml屬性的例子程序,例程8-8-4<%@taglibprefix="c" /jsp/jstl/core"<c:outvalue="${null}"<metahttp-equiv="refresh"content="0;url="8-5<%@taglibprefix="c" /jsp/jstl/core"<c:outvalue="${null}"<metahttp-equiv="refresh"content="0;url="<c:set>用于設(shè)置各種Web域中的屬性或者設(shè)置Web域中的java.util.Map類型的屬性對象或JavaBean類型的屬性對象的屬性。<c:set>有四種語法格式:語法1,使用value屬性設(shè)置指定域中的某個屬性的值<c:set[scope="{page|request|session|application}"]語法2,在體中設(shè)置指定域中的某個屬性的值<c:setbody3,使用value屬性設(shè)置Web域中的一個屬性對象的某個屬性<c:setproperty="propertyName"/>語法4,在體中設(shè)置Web域中的一個屬性對象的某個屬性性<c:setbody<c:set>的屬性說明如表8.4所示表8.4<c:set>的屬屬性是否支屬性類WebWeb如果使用第1種語法格式時的value屬性值為null,或者使用第2種語法格式時的體內(nèi)容為空,<c:set>將從scope屬性指定的域范圍中刪除var屬性指定的屬性。在第3法格式和第4語法格式如果target屬性的java.util.Mapproperty屬性表示該Map對象的關(guān)鍵字,如果Map對象沒有指定的關(guān)鍵字,就給Map對象增加指定的關(guān)鍵字如果target屬性的值是JavaBean對象property屬性表示JavaBean對象的屬性value的類型與JavaBean屬性的類型不匹配時,會根據(jù)EL的轉(zhuǎn)換規(guī)則自動進(jìn)行轉(zhuǎn)換。當(dāng)使用第3種語法格式或第4種語法格式時,如果target屬性的值為null(即target屬性指定的對象不存在),<c:set>將拋出異常。如果使用第3種語法格式時value屬性的值為null,或者使用第4種語法格式時體的內(nèi)容為空如果target屬性的值是一個java.util.Map對象就從Map對象中刪除property屬性指定的關(guān)鍵字對應(yīng)的項如果target屬性的值是一個JavaBean對象JavaBeannull。例程8-6是使用<c:set>設(shè)置某個Web域中的屬性的一個演示例子程序8-6<%@taglibprefix="c" /jsp/jstl/core"<%@pagecontentType="text/html;charset=gb2312"<c:setvar="userName"scope="session">sessionuserNamer<c:outvalue="${userName}"/><br/><hrsessionbookname<c:setvar="bookname"scope="session"<c:outvalue="${bookname}"例程8-7是使用<c:set>設(shè)置UserBean對象和Map對象的屬性的一個演示例子程序8-7<%@taglibprefix="c" /jsp/jstl/core"<%@pagecontentType="text/html;charset=gb2312"<%@pageimport="java.util.HashMap"<jsp:useBeanid="user"class="org.it315.UserBean"HashMappreferences=newHashMap();<c:setvalue="zxx"target="${user}"property="userName"<c:outvalue="${user.userName}"/><br/><hr<c:settarget="${user}"property="password"<c:outvalue="${user.password}"/><br/><hr<c:settarget="${preferences}"property="color"value="${param.color}"<c:outvalue="${preferences.color}"在瀏覽器地址欄輸入如下地址例程8-7:8-78.5<c:remove>用于刪除各種Web域中的屬性,其語法格式如下<c:remove[scope="{page|request|session|application}"]var屬性用于指定要刪除的屬性的名稱,scope屬性用于指定要刪除的屬性所屬的Web們的值都不能接受動態(tài)值。如果沒有指定scope屬性,<c:remove>就調(diào)用PageContext.removeAttribute(varName)方法,否則就調(diào)用PageContext.removeAttribute(varName,scope)方法<c:remove>與<c:set>第一種語法格valuenull例程8-8是使用<c:remove>的一個演示例子程序8-8<%@taglibprefix="c" /jsp/jstl/core"<%@pagecontentType="text/html;charset=gb2312"<c:setvalue="org.it315"var="company"scope="request"<c:setvar="passWord"scope="session">在沒有使用<c:remove>之前,變量的值為:<br/>company:<c:outvalue="${company}"/><br/>passWord:<c:outvalue="${passWord}"/><br/><c:removevar="company"scope="request"<!--c:setvar="companyscope="request"<c:removevar="passWord"scope="session"/><hr在使用<c:remove>之后,變量的值為:<br/>company:<c:outvalue="${company}"/><br/>passWord:<c:outvalue="${passWord}"/><c:catch>用于捕獲嵌套在體中的內(nèi)容拋出的異常,其語法格式如下<c:catchnestedvar屬性用標(biāo)識<c:catch>捕的異常對象其值是一個靜態(tài)的字符串不支持動態(tài)性值。<c:catch>捕獲的異常對象以var指定的名稱保存到page這個Wb中,如果沒有指定var性則<c:catch>僅獲異常不在page域存異常對象如果<c:catch>體中的內(nèi)容沒有拋出異常,<c:catch>將從page域中刪除var屬性指的屬性。<c:catch>可以捕獲任何拋出的異常并且可以同時處理多個拋出的異常這樣,JSPJSP是出現(xiàn)重要異常后跳轉(zhuǎn)到錯誤處理頁面建議盡量不要用<c:catch>來代替JSP的錯誤處理機例程8-9是使用<c:catch>進(jìn)行異常捕獲處理的一個演示例子程序8-9<%@taglibprefix="c" /jsp/jstl/core"<%@pagecontentType="text/html;charset=gb2312"<c:catchinti=0;intj=out.println(j+"/"+i+"="+異常:<c:outvalue="${myex}"/><brmyex.getMessage:<c:outvalue="${myex.message}"/><brmyex.getCause:<c:outvalue="${myex.cause}"/><brmyex.getStackTrace:<c:outvalue="${myex.stackTrace}"在例程8-9中,<c:catch>內(nèi)嵌套的元素拋出了異常,<c:catchvar="myex">將捕獲到這個異常,調(diào)用<c:outvalue="${myex.message}"<%=myex.getMessage()%>。8-98.7所示。構(gòu)的條件表達(dá)式,如果條件表達(dá)式的結(jié)果為真就執(zhí)行體部分的內(nèi)容。<c:if>有兩種語法語法1,沒有體的情況<c:iftest="testCondition"var="varName"[scope="{page|request|session|application}"]語法2,有體的情況,在體中指定要執(zhí)行的內(nèi)容<c:iftest="testCondition"[var="varName"]body<c:if>的屬性說明如表8.5所示表 <c:if>的屬屬性是否支屬性類決定是否處理體中的內(nèi)容的條件表testWebtest對于語法2,如果指定了<c:if>的scope屬性,則必須指定var屬性。例程8-10是使用<c:if>的一個演示例子程序。 <%@taglibprefix="c" /jsp/jstl/core"<%@pagecontentType="text/html;charset=gb2312"<jsp:useBeanid="user"class="org.it315.UserBean"<c:setvalue="${param.count}"target="${user}"property="visitCount"<c:iftest="${user.visitCount==這是您第一次本,在瀏覽器地址欄輸入如下地址例程8-10:8-108.8<c:choose>用于指定多個條件選擇的組合邊界它必須與<c:when>和<c:otherwise>一起使用使用<c:choose><c:when>和<c:otherwise>三個可以構(gòu)造類似“ielseiels”的復(fù)雜條件判斷結(jié)構(gòu)。<c:choose>沒有屬性,在它的體內(nèi)只能嵌套一個或多個<c:when>和0個或一<c:otherwise>標(biāo)簽,并且同一個<c:choose>中的所有<c:when>子必須出現(xiàn)<c:otherwise>子之前如果<c:choose>內(nèi)嵌套一個<c:when>和<c:otherwise>,就相當(dāng)于“if-else”的條件判斷結(jié)構(gòu);如果<c:choose>內(nèi)嵌套多個<c:when>和一個<c:otherwise>,就相當(dāng)于“if-elseif-else”<c:when>只有一個test屬性,該屬性的值為類型。test屬性支持動態(tài)值,其值可體的內(nèi)容可以是任意的JSP代碼<c:otherwise>沒有屬性它必須作為<c:choose>當(dāng)JSP頁面中使用<c:choose>時,嵌套在<c:choose>內(nèi)的test條件成立的第一<c:when>的體內(nèi)容將被執(zhí)行和輸出且僅當(dāng)所有的<c:when>的test條件都不成時,才執(zhí)行和輸出<c:otherwise>的體內(nèi)容。如果所有的<c:when>的tst條件都成立,并且<c:choose>內(nèi)沒有嵌套<c:otherwise>則不執(zhí)行任何操作。例程8-11是使用<c:choose>、<c:when>、<c:otherwise>的一個演示例子程序8-11<%@taglibprefix="c" /jsp/jstl/core"<%@pagecontentType="text/html;charset=gb2312"<c:setvalue="${param.count}"var="count"<c:whentest="${count==符合您要求的記錄共有${count}在瀏覽器地址欄輸入如下地址例程8-10例程8-12是一個綜合使用<c:if>和<c:choose>等的例子程序,在這個例子程序中,首先使用<c:if>判斷表單提交的方式是否是POST,如果是,就再使用<c:choose>等根據(jù)8-12<%@taglibprefix="c" /jsp/jstl/core"<c:if<c:whentest="${param.favor=='computer'}">Yourfavouritecourseis<b>computer</b>.Yourfavouritecourseis<formmethod="POST">Whatisyourfavourite<inputtype="text"name="favor"<inputtype="submit"value="submit"在瀏覽器地址欄中直接c_customLogic.jsp的運行結(jié)果如圖8.11所示在文本框中輸入“computer”,submit8.12個集合對象中的元素進(jìn)行循環(huán)迭代操作,或者按指定的次數(shù)重復(fù)迭代執(zhí)行體中的內(nèi)容1,在集合對象中迭代:<c:forEachbody語法2,迭代固定的次數(shù)<c:forEachbody<c:forEach>的屬性說明如表8.6所示表8.6<c:forEach>的屬屬性是否支屬性類指定將當(dāng)前迭代到的元素保存到page這個如果指定items從集合中的第begin個元素開始進(jìn)行迭代,begin的索引0始編號沒有指定itemsbeginendbegin在使用<c:forEach>時,需要注意如下幾點說明<c:forEach>的items屬性的值支持下面的數(shù)據(jù)類型這些數(shù)據(jù)類型將在8.5節(jié)的數(shù)據(jù)庫中進(jìn)行介紹。對字符串的迭代操作通常使用<c:forTokens>或JSTL函數(shù),例如fn:split和fn:jion,JSTL函數(shù)將在8.7節(jié)進(jìn)行介紹迭代Collection類型的集合對例程8-13是使用<c:forEach>迭代Collection類型的集合對象的一個應(yīng)用舉例8-13<%@taglibprefix="c" /jsp/jstl/core"<%@pageimport="java.util.*,org.it315.UserBean"Collectionusers=newArrayList();for(inti=0;i<5;i++){UserBeanuser=newUserBean();user.setUserName("user"+i);user.setPassword("guess"+i);}session.setAttribute("users",<divstyle="text-align:center">User<table<tr><td>用戶名</td><td><c:forEachvar="user"Map對

使用<c:forEach>迭代Map類型的集合對象時,迭代出的每個元素的類型為Map.Entry,Map.Entry代表Map集合中的一個條目項其中的getKey()方法可獲得條目項的關(guān)鍵字getValue()EL中的requestScope隱含對象代表request作用域中的所有屬性的Map對象,所以我們可以使用<c:forEach>迭代輸出EL中的requestScope隱含對象中的所有元素,如例程8-14所8-14<%@taglibprefix="c" /jsp/jstl/core"<divstyle="text-<table<tr><td>Map的關(guān)鍵字</td><td>Map的對應(yīng)關(guān)鍵字的值<c:forEachvar="entry"8-148.14迭代指定的次

<c:forEach>可以按指定的次數(shù)重復(fù)迭代執(zhí)行體中的內(nèi)容使用這種方式迭代時可8-158-15<%@taglibprefix="c" /jsp/jstl/core"1116<c:forEachvar="i"begin="11"end="16"</c:forEach><br/><hr05<c:forEachvar="i"begin="0"指定迭代集合對象的范圍和步<c:forEach>迭代集合類對象時,也可以指定迭代的范圍和步長,如例程8-16所示8-16<%@taglibprefix="c" /jsp/jstl/core"<%@pagecontentType="text/html;charset=gb2312"<%@pageimport="java.util.*,org.it315.UserBean"Collectionusers=newArrayList();for(inti=0;i<6;i++){UserBeanuser=newUserBean();user.setUserName("user"+i);user.setPassword("guest"+i);}session.setAttribute("users",<divstyle="text-align:center">UserList<table<tr><td>用戶名</td><td><c:forEachvar="user"items="${users}"end="5"獲取迭代的狀態(tài)信

<c:forEach>可以將代表當(dāng)前迭代狀態(tài)信息的對象保存到page域,varStatus屬性指定這個對象保存在page域中的屬性名稱。代表當(dāng)前迭代狀態(tài)信息的對象的類型為javax.servlet.jsp.jst.coreLoopTagStatusJSTLpublicjava.lang.Integer返回為設(shè)置的begin屬性的值,如果沒有設(shè)置begin屬性則返回publicintpublicjava.lang.Objectpublicjava.lang.Integer返回為設(shè)置的end屬性的值,如果沒有設(shè)置end屬性則返回publicintpublicjava.lang.Integer返回為設(shè)置的step屬性的值,如果沒有設(shè)置step屬性則返回publicbooleanpublicboolean8-17<%@taglibprefix="c" /jsp/jstl/core"<%@pagecontentType="text/html;charset=gb2312"<%@pageimport="java.util.*,org.it315.UserBean"Collectionusers=newArrayList();for(inti=0;i<6;i++){UserBeanuser=newUserBean();user.setUserName("user"+i);user.setPassword("guest"+i);}session.setAttribute("users",<divstyle="text-align:center">User<table<tr><td>用戶名</td><td><c:forEachvar="user"items="${users}"varStatus="sta"begin="1"<divstyle="text-align:center"><table<c:forEachvar="i"varStatus="sta1"begin="101"與條件結(jié)合使

迭代可以與條件結(jié)合使用,對數(shù)據(jù)進(jìn)行有條件的迭代,應(yīng)用舉例如例程8-18所示。例程8-18 <%@taglibprefix="c" /jsp/jstl/core"<divstyle="text-<table<c:forEachvar="i"begin="11"end="13"<c:whentest="${status.count%2==<c:forTokens>專用于實現(xiàn)類似java.util.StringToknizer類的代功能但是單個字符作為分隔符同時可以指定多個字符作為多個并行的分隔符<c:forTokens>的語格式如下:<c:forTokensitems="stringOfTokens"delims="delimiters"[begin="begin"][end="end"][step="step"]>body<c:forTokens>的屬性說明如表8.7所示8.7是否支屬性類指定將當(dāng)前迭代出的子字符串保存到page這個pageWeb信息的對象的類型為00在使用<c:forTokens>時,需要注意如下幾點說明例程8-19是一個使用<c:forTokens>的例子程序。8-19<%@taglibprefix="c" /jsp/jstl/core"<%@pagecontentType="text/html;charset=gb2312"使用"|"作為分隔符<br<c:forTokensvar="token"items="spring,summer|autumn,winter"</c:forTokens><br使用"|"和","作為分隔符<br</c:forTokens><br使用"-"作為分隔符<br<c:forTokensvar="token"items="year--season--month-week"delims="-8-198.19URL相關(guān)的概JSTL庫中提供了如下一些與URL操作相關(guān)的在舉例講解上面的某些時,要另外一個JSP文件,這里先創(chuàng)建好這個JSP文件,如8-208-20<%@taglibprefix="fn" /jsp/jstl/functions"<%@pagecontentType="text/html;charset=gb2312"Stringname=name=newString(name.getBytes("iso-8859-1"),"gb2312");Stringcountry=country=newString(country.getBytes("iso-8859-1"),"gb2312");country=${country}<br/>在JSP頁面進(jìn)行URL的相關(guān)操作時經(jīng)常要在URL地址后面附加一些參數(shù)<c:param>可以嵌套在<c:import>、<c:url>或<c:redirect>內(nèi),為這些所使用的URL地址附加參數(shù)“%d6%d0%b9%faURL1,使用value性指定參數(shù)的值:<c:paramname="name"value="value"語法2,在體中指定參數(shù)的值<c:paramparameter<c:param>的屬性說明如表8.8所示表8.8<c:param>的屬<c:url>用于在JSP頁面中構(gòu)造一個URL地址,其主要目的是實現(xiàn)URL重寫。URL重寫就是將會話標(biāo)識號以參數(shù)形式附加在URL地址后詳細(xì)細(xì)節(jié)請參看筆者編著《深入體驗javaWeb開發(fā)——基礎(chǔ)》一第7.4.8的講解。<c:url>有兩種語法格式:語法1,沒有體的情況<c:url[scope="{page|request|session|application}"]語法2,有體的情況,在體中指定構(gòu)造的URL的參數(shù)<c:url<c:param<c:url>的屬性說明如表8.9所示表8.9<c:url>的屬屬性是否支屬性類指定將構(gòu)造出的URLWeb指定將構(gòu)造出的URLWeb的url屬性的細(xì)節(jié)相同。使用<c:url>構(gòu)造URL時,可以通過嵌套的<c:param>指例程8-21是一個使用<c:url>的例子程序8-21<%@taglibprefix="c" /jsp/jstl/core"<%@pagecontentType="text/html;charset=gb2312"<c:urlvalue=""<c:paramname="name"value=""<c:paramname="country"value="${param.country}"<ahref="${myUrl1}">Register1</a><hr<c:urlvalue="register.jsp?name=wangwu&country=France"var="myUrl2"<ahref="${myUrl2}">Register2</a><hr<c:urlvalue="/URL/register.jsp?name=zhaoliu&country=England"var="myUrl3"<a在瀏覽器地址欄輸入如下地址例程8-8-22c_url.jspegister1</a><hr<ahref="register.jsp?name=wangwu&country=France">Register2</a><hr<a<c:import>用于在JSP頁面中導(dǎo)入一個URL地址指向的資源內(nèi)容,其作用有點類<jsp:include>這個JSP標(biāo)準(zhǔn),但功能更強大。<c:import>有兩種語法格式語法1,將URL地址指向的資源內(nèi)容以字符串形式輸出或以字符串形式保存到一個變量<c:importoptionalbodycontentfor<c:param>2URL地址指向的資源內(nèi)容保存到一個Reader對象中<c:importbodycontentwherevarReaderisconsumedbyanother<c:import>的屬性說明如表8.10所示表 <c:import>的屬屬性是否支屬性類URLWEB,contextWebWeb指定將導(dǎo)入的資源內(nèi)容保存到page域中的一個java.io.Reader對象中,varReader屬ReaderpageWeb使用<c:import>導(dǎo)入其他資源文件時,如果被導(dǎo)入的資源文件中含有非ASCII碼字符,charEncoding變量中,varScopeWebvar屬性,導(dǎo)入的資源內(nèi)容將以字符串形式直接輸出。第1種語法格式的體內(nèi)中可以嵌套<c:param>來給導(dǎo)入的資源傳遞參數(shù)varReader屬性指定了該Reader對象在page這個Web域中的屬性名稱。因為<c:import>在結(jié)束時將關(guān)閉Reader對象對應(yīng)的輸入流,所以varReader屬性指定的變量只在內(nèi)有效。第2種語法格式的體內(nèi)中應(yīng)該且只能嵌套調(diào)用varReader屬性指定的reader對象的其他標(biāo)源傳遞參數(shù)則必須在url屬性值中設(shè)置好這些參數(shù)這時可以使用<c:url>來創(chuàng)建一個帶參數(shù)的URL地址,此時如果有必要,<c:import>將刪除導(dǎo)入資源中的所有URL重寫后產(chǎn)生的sessionid使用<c:import>導(dǎo)入外部資源文件時,url屬性可以設(shè)置為被導(dǎo)入資源的相對URL或絕URL。使用相對URL導(dǎo)入其他資源文JSPWEBJSP名開始。如果路徑以“/”字符開始,則被導(dǎo)入資源文件的路徑是相對于JSP頁面所在的WEB應(yīng)用JSPJSPWEB要使用相對路徑,路徑必須以“/”開始。此時,<c:import>的context屬性必須被設(shè)置為被導(dǎo)入的資源文件所在的WEB應(yīng)用程序的名稱。注意:使用相對路徑導(dǎo)入其它WEB應(yīng)用程序中的資序的<ContextcrossContexttrue,如下所示:<Contextpath="/JSTL"docBase="JSTL"使用絕對URL導(dǎo)入其他資JSPWEBJSPrequestsession下當(dāng)前JSP文件所屬的Web服務(wù)器充當(dāng)了一個Http客戶端程序去絕對路徑所指定的外部資源文件,然后將響應(yīng)結(jié)果的實體內(nèi)容加入到當(dāng)前JSP頁面中,此時,當(dāng)前JSP頁面的客戶端是瀏覽器而絕對路徑所指定的外部資源文件的客戶端是當(dāng)前JSP文件所屬的Web服務(wù)器,JSPrequestsession例程8-23是使用<c:import>的一個應(yīng)用舉例8-23<%@taglibprefix="c" /jsp/jstl/core"<%@pagecontentType="text/html;charset=gb2312"WEB:<br<c:import<c:paramname="name"value="zxx"</c:import><hrWEB:<br<c:importurl="/o.jsp"context="/EL"/><hr<c:importurl=""/><hr<c:importurl=""<c:paramname="name"value="${}"<c:paramname="country"value在瀏覽器地址欄輸入如下地址例程8-23,其運行結(jié)果如圖8.20所示一個<c:import>并沒有在目標(biāo)url后增加country參數(shù)但是在register.jsp頁面中獲得country<c:redirect>用于當(dāng)前的請求轉(zhuǎn)發(fā)或重定向到其他資源,它可以根據(jù)url屬性所指定的地址執(zhí)行類似<jspforward這個JSP準(zhǔn)的功能將請求轉(zhuǎn)發(fā)到其他資源執(zhí)行response.sendRediect)方法功能,將請求重定向到其他資源。<c:redirect>有兩種語法格式:語法1,沒有體的情況<c:redirecturl="value"[context="context"]語法2,有體的情況,在體中指定重定向時的參數(shù)<c:redirecturl="value"<c:redirect>的屬性說明如表8.11所示表8.11 的屬屬性是否支屬性類URL址<c:import>的url屬性相同。例程8-24是一個使用<c:redirect>的應(yīng)用例子8-24<%@taglibprefix="c" /jsp/jstl/core"<%@pagecontentType="text/html;charset=gb2312"<c:urlvalue=""<c:paramname="name"value=""<c:paramname="countryvalue=<c:redirecturl="${myUrl}"8-248.21 庫概。為了簡化WEB應(yīng)用的開發(fā)JSTL中提供了一個用于實現(xiàn)和格式化功能的庫,其簡稱為庫,JSP規(guī)范為庫建議的前綴名為fmt庫中包括了一組用于實現(xiàn)WEB功能的這組封裝了Java語言中java.util和java.text這兩個包中與相關(guān)的API類的功能。庫中提供了綁定資源包和從資源包中的本地資源文件內(nèi)文本內(nèi)容的,也提供了對數(shù)值和日期等本地敏感的數(shù)據(jù)按本地化信息進(jìn)行顯示和解析的,還提供了按本地特定的時區(qū)來調(diào)整時間的。。庫中的可以根據(jù)客戶端瀏覽器的信息來自動確定本地信息,也可以由JSP頁(中國在舉例講解庫中的時,通常要使用到包含有多個資源文件的資源包這資源包中的各個資源文件分別對應(yīng)幾個不同本地信息。這里先創(chuàng)建好一組資源包文件。首先按例程825826perties8-25org.it315.heading=ThefirstWEBe org.it315.okKey=Todayis{0,date,full},youhave{1,number,currency}8-26pertiesorg.it315.heading=WEBe=歡迎接著使用JDK中提供的native2ascii程序?qū)erties文件中的中文字符轉(zhuǎn)換成其Uperties文件所在的,執(zhí)行如下native2ascii-encodingGB2312perties上面令執(zhí)行后產(chǎn)生的greetings_perties文件內(nèi)容如例程8-27所示8-27 英文本地環(huán)境所對應(yīng)的資源文件只需perties文件,并改名為greetings_perties ,<fmt:setLocale>用于在JSP頁面中顯式地設(shè)置用戶的本地化信息并將設(shè)置的本地化信LocaleWebWeb“javax.servlet.jsp.jtl.fmt.locale,庫中的其他將使用該本地化信息,而忽略客戶端瀏覽器傳遞過來的本地信息<fmt:setLocale>的語法格式如下<fmt:setLocale[scope="{page|request|session|application}"]/><fmt:setLocale>的屬性說明如表8.12所示表8.12<fmt:setLocale>的屬屬性是否支屬性類 LocaleLocale器傳遞過來的本地信息。例程8-28是一個使用<fmt:setLocale>的例子程序。8-28<%@taglibprefix="fmt" /jsp/jstl/fmt"<%@pagecontentType="text/html;charset=gb2312"<fmt:setLocalevalue="${param.locale}"<fmt:setBundlebasename="org.it315.greetings"var="greetings"<title><fmt:messagebundle="${greetings}"key="org.it315.heading"<jsp:useBeanid="now"class="java.util.Date"session.setAttribute("number",new <fmt:messagebundle="${greetings}" e"/><br<fmt:messagebundle="${greetings}"<fmt:paramvalue="${now}"<fmt:paramvalue="${number}"例程8-28中的<fmt:setBundle>用于根據(jù)<fmt:setLocale>設(shè)置的本地化信息綁定一個資源包其細(xì)節(jié)請參看8.4.3節(jié);<fmt:message>用于從一個資源包中信息并進(jìn)行格<fmt:param>8.4.6在瀏覽器地址欄輸入如下地址fmt_setLocale.jsp頁面:8-288.22將上面的地址中的locale參數(shù)設(shè)置 后fmt_setLocale.jsp頁面例程8-<fmt:setBundle>用于根據(jù)<fmt:setLocale>設(shè)置的本地化信息創(chuàng)建一個資源<fmt:setBundle[scope="{page|request|session|application}"]/><fmt:setBundle>的屬性說明如表8.13所示表8.13<fmt:setBundle>的屬屬性是否支屬性類ResourceBundleWeb<fmt:setBundle>有如下一些特性<fmt:setBundle>保存到Web域中的屬性的值為null如果指定了var屬性,<fmt:setBundle>將把ResourceBundle實例對象以var屬Web如果沒有指定var屬性,<fmt:setBundle>將把ResourceBundle實例對象以域?qū)賘avax.servlet.jsp.jstl.fmt.localizationContextWeb<fmt:bundle>中且未指定bundle屬性的<fmt:formatDate>都將使用該創(chuàng)建的資源包。面的例程8-28中已經(jīng)使用了<fmt:setBundle>這里就不再對<fmt:setBundle><fmt:bundle>與<fmt:setBundle>的功能類似,但它創(chuàng)建的ResourceBundle實例對象只在其體內(nèi)有效。<fmt:bundle>的語法格式如下:body<fmt:bundle>的屬性說明如表8.14所示表8.14<fmt:bundle>的屬屬性是否支屬性類ResourceBundle指定追加到嵌套在<fmt:bundle>內(nèi)<fmt:message>的key屬性值前面的前如果設(shè)置了<fmt:bundle>的prefix屬性,則中嵌套的<fmt:message>的key屬prefix了一些簡便。例程8-29是一個使用<fmt:bundle>的例子程序,其中分別演示了設(shè)置和不設(shè)置8-29<%@taglibprefix="fmt" /jsp/jstl/fmt"<%@pagecontentType="text/html;charset=gb2312"prefix:<br<fmt:bundle<fmt:messagekey="org.it315.heading"/><br<fmt:message e"/><br/><hrprefix:<br<fmt:bundlebasename="org.it315.greetings"<fmt:messagekey="heading"/><br<fmt:message e"語法1,沒有體的情況<fmt:message[scope="{page|request|session|application}"]語法2,在體中指定格式化文本串中的占位符參數(shù)的情況<fmt:message語法3,在體中指定消息關(guān)鍵字和可選擇的占位符參數(shù)<fmt:messageoptional<fmt:message>的屬性說明如表8.15所示表8.15<fmt:message>的屬屬性是否支屬性類ResourceBundleWeb指定將格式化結(jié)果保存到哪個<fmt:message>有如下一些特性如果沒有指定var屬性,<fmt:message>將直接輸出格式化的結(jié)果;如果指定了var屬性則<fmt:message>將格式化的結(jié)果保存在scope屬性指定的Web域中保存在Web域中的屬性名稱為var屬性指定的值。如果指定了scope屬性,就必須指定var屬要輸出的消息的關(guān)鍵字可以使用key屬性指定,也可以在體中指定。如<fmt:message>嵌套在<fmt:bundle>內(nèi),并且<fmt:bundle>設(shè)置了屬性,則該屬性的值追加到<fmt:message>指定的關(guān)鍵字的前面例程8-30是一個使用<fmt:message>的例子程序8-30<%@taglibprefix="fmt" /jsp/jstl/fmt"<%@pagecontentType="text/html;charset=gb2312"<jsp:useBeanid="now"class="java.util.Date"session.setAttribute("number",new <fmt:setBundlebasename="org.it315.greetingsvar="greetings"<fmt:message>內(nèi)嵌套<fmt:param>的情況:<br<fmt:messagebundle="${greetings}"><fmt:paramvalue="${now}"<fmt:paramvalue="${number}"</fmt:message><br/><hr<fmt:message>內(nèi)沒有嵌套<fmt:param>的情況:<br<fmt:bundlebasename="org.it315.greetings"<fmt:messagekey="okKey"8-308.251value屬性指定參數(shù)值<fmt:paramvalue="messageParameter"語法2,在體中指定參數(shù)的值的情況body說明:<fmt:param>的value屬性的類型是java.lang.Object,它支持動態(tài)屬性值。在<fmt:requestEncoding>用于設(shè)置請求消息的字符集編碼,該內(nèi)部調(diào)用換成Unicode字符串返回。<fmt:requestEncoding>的語法格式如下:<fmt:requestEncoding[value="charsetName"為了夠正確請求參數(shù)值中的非ISO88591編碼字符,應(yīng)該調(diào)用這個來設(shè)(L行調(diào)用。,所以使用這個來設(shè)置請求消息的字符集編碼是很有必要的。<fmt:equestEncoding>的value屬性設(shè)置值通常為提交這次請求的頁面的字value<fmt:requestEncoding>的value屬性,<fmt:requestEncoding>首先采用請求消息的Content-TypeContent-TypeISO-8859-1例程8-31是一個使用<fmt:requestEncoding>的例子程序8-31<%@taglibprefix="fmt" /jsp/jstl/fmt"<%@pagecontentType="text/html;charset=gb2312"<fmt:requestEncodingvalue="gb2312"我最喜歡的科目是:${param.favourite}<br<form你最喜歡學(xué)習(xí)的是什么科目?<br<inputtype="text"name="favourite"<inputtype="submit"value="OK"例程8-31的運行結(jié)果如圖8.26所示,在文本框中輸入“英語單擊其中的OK按鈕后的運8.27<fmt:timeZone>用于設(shè)置時區(qū),但它的設(shè)置值只對其體部分有效。<fmt:timeZone><fmt:timeZonebodyvaluejava.util.TimeZone類的一個實例對象。如果value屬性的值為null或空字符串,體中的java.util.TimeZone.getTimeZone()java.util.TimeZone例程8-32是一個使用<fmt:timeZone>的例子程序8-32<%@taglibprefix="fmt" /jsp/jstl/fmt"<%@pagecontentType="text/html;charset=gb2312"<%@pageimport="java.util.TimeZone"<jsp:useBeanid="now"class="java.util.Date"使用“GMT+1:00”時區(qū):<br<fmt:timeZone</fmt:timeZone><br/><hrTimeZonetz=TimeZone.getDefault();pageContext.setAttribute("tz",tz);使用默認(rèn)的時區(qū),valuejava.util.TimeZonebr<fmt:timeZone</fmt:timeZone><br/><hr使用“America/Los_Angeles”時區(qū):<br<fmt:timeZone8-328.28<fmt:setTimeZone>用于在JSP頁面中顯示地設(shè)置時區(qū)并將設(shè)置的時區(qū)信息以TimeZoneWebWeb<fmt:setTimeZone[scope="{page|request|session|application}"]/><fmt:setTimeZone>的屬性說明如表8.16所示表8.16<fmt:setTimeZone>的屬屬性是否支屬性類 TimeZoneWebTimeZoneWebWebvarWebtimezone屬性的<fmt:formatDate>都將使用該域?qū)傩悦P(guān)聯(lián)的時區(qū)。例程8-33是一個使用<fmt:setTimeZone>的例子程序8-33<%@taglibprefix="fmt" /jsp/jstl/fmt"<%@pagecontentType="text/html;charset=gb2312"<jsp:useBeanid="now"class="java.util.Date"<fmt:setTimeZone“America/Los_Angeles”時區(qū)的現(xiàn)在時間是:<br<fmt:formatDatevalue="${now}"type="both"/><hr“GMT+1:00”時區(qū)的現(xiàn)在時間是:<br<fmt:timeZone<fmt:formatDatevalue="${now}"type="both"<fmt:formatDate>用于對日期和時間按本地化信息進(jìn)行格式化,或?qū)θ掌诤蜁r間按化JSP頁面作者自定義的格式進(jìn)行格式化。<fmt:formatDate>的語法格式如下<fmt:formatDate[scope="{page|request|session|application}"]/><fmt:formatDate>的屬性說明如表8.17所示表8.17<fmt:formatDate>的屬屬性是否支屬性類置值可以參照java.text.DateFormattypejava.text.DateFormattypetimeboth Web<fmt:formatDate>有如下一些特性如果沒有指定var屬性,<fmt:formatDate>將直接輸出格式化的結(jié)果;如果指定了var屬性則<fmt:formatDate>將格式化的結(jié)果保存在scope屬性指定的Web域中,WebvarscopevarscopeWebvartype、dateStyletimeStylepattern為java.util.Date類的一個實例對象再使用<fmt:formatDate>對這個Date實例對象進(jìn)行格式化。<fmt:parseDate>的介紹請參看8.4.11節(jié)。如果<fmt:formatDate>不能確定格式化的本地化信息,就使例程8-34是一個使用<fmt:formatDate>的例子程序8-34<%@taglibprefix="fmt" /jsp/jstl/fmt"<%@pagecontentType="text/html;charset=gb2312"<%@pageimport="java.util.TimeZone"<jsp:useBeanid="now"class="java.util.Date"<fmt:formatDatevalue="${now}"type="both"timeStyle="medium"session.setAttribute("tz",指定時區(qū)為<fmt:formatDatevalue="${now}"type="both"timeZone="${tz}"/><hr<fmt:formatDatevalue="${now}"pattern="MM.dd.yyyy"/><hr<fmt:parseDatevalue="7/31/05"pattern="MM/dd/yy"var="parsed"<fmt:formatDatevalue="${parsed}"8-348.30<fmt:parseDate>與<fmt:formatDate>的作用正好相反,它用于將一個表示日期和java.util.Date語法1,沒有體的情況<fmt:parseDate[scope="{page|request|session|application}"]/>語法2,有體的情況,在體中指定要被解析的日期和/或時間值<fmt:parseDatedatevaluetobe<fmt:parseDate>的屬性說明如表8.18所示表8.18<fmt:parseDate>的屬<fmt:parseDate>有如下一些特性value屬性的值必須是合法的日期/時間字符串,否則<fmt:parseDate>在解析時拋出異常如果value屬性的值為null或空字符刪除scope屬性指定的域范圍中的var根據(jù)type屬性的值,要解析日期字符串可以包含日期、時間或同時包含日期和時間,并如果指定pattern屬性,就忽略它的type、dateStyle和timeStyle屬性。這時,根據(jù)patternvaluepatternpatternjava.text.SimpleDateFormat如果不能確定解析的本地環(huán)境就拋出JspException異常異常信息中包含要解析面的例程8-34中已經(jīng)使用了<fmt:parseDate>這里就不再對<fmt:parseDate><fmt:formatNumber>用于將數(shù)值、貨幣或百分?jǐn)?shù)按本地化信息進(jìn)行格式化,或者按語法1,沒有體的情況:<fmt:formatNumber[scope="{page|request|session|application}"]/>語法2,有體的情況,在體中指定要被格式化的數(shù)值<fmt:formatNumber表8.19<fmt:formatNumber>的屬<fmt:formatNumber>有如下一些特性scopeWebvar的整數(shù)部分、小數(shù)部分的分隔符及組分隔符)LocalepatternnullcurrencyCodeISO4217java.text.NumberFormat幣符號。currencySymbolWEBJDK1.4或更高版本時,如果同時指定<fmt:formatNumber>的currencyCode和currencySymbolWEBJDK1.4本時,currencySymbolcurrencyCode如果<fmt:formatNumber>不能確定格式化的本地環(huán)境,就使用例程8-35是一個使用<fmt:formatNumber>的例子程序8-35<%@taglibprefix="fmt" /jsp/jstl/fmt"<%@pagecontentType="text/html;charset=gb2312"<%@page<fmt:formatNumber .21"type="currency"/><hr<fmt:formatNumbervalue="12.3"type="percent"/><hr<fmt:formatNumbervalue="12.3"pattern=".000"<fmt:formatNumbervalue="123456.7891"pattern="#,#00.0#"/><hrStringcode=Currency.getInstance(Locale.CHINA).getCurrencyCode();Stringsymbol=Currency.getInstance(Locale.US).getSymbol();session.setAttribute("code",code);session.setAttribute("symbol",<fmt:formatNumbervalue=" .11"type="currency"currencyCode="${code}"currencySymbol="${symbol}"/>8-358.31<fmt:parseDate>與<fmt:formatNumber>的作用正好相反,它用于將一個按本地化語法1,沒有體的情況<fmt:parseNumber[scope="{page|request|session|application}"]語法2,有體的情況,在體中指定要被解析的數(shù)值<fmt:parseNumbernumericvaluetobe<fmt:parseNumber>的屬性說明如表8.20所示表8.20<fmt:parseNumber>的屬<fmt:parseNumber>有如下一些特性valuepatternjava.text.DecimalFormatpatternvarWebrjav.lang.Number.toStringscopevar如果不能確定解析的本地環(huán)境就拋出JspException異異常信息中包含要解的字符串。例程8-36是一個使用<fmt:parseNumber>的例子程序8-36<%@taglibprefix="fmt" /jsp/jstl/fmt"<%@pagecontentType="text/html;charset=gb2312"<fmt:parseNumbervalue="$123,456,789.00"type="currency"解析整個數(shù)值字符串<fmt:parseNumbervalue="123,456,789%"type="percent"/><hr<fmt:parseNumbervalue="123,456,789%"type="percent"integerOnly="true"/><hrtypepattern<fmt:parseNumbervalue="12.3"type="currency"pattern=".000"8-368.32注意:在分層設(shè)計的軟件架構(gòu)中,JSP頁面通常僅用于實現(xiàn)系統(tǒng)的表示層,數(shù)據(jù)解析的任務(wù)不適合在表示層

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論