`
yde986
  • 浏览: 97783 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JSTL 常用标签属性

阅读更多

    JSTL 全名为Java Server Pages Standard Tag Library(JSP Standard Tag Library),它的中文名称为JSP 标准标签函数库。Web 程序开发人员能够利用JSTL和EL来开发Web 程序,取代传统直接在页面上嵌入Java程序(Scripting)的做法,以提高程序可读性、维护性和方便性。
    JSTL是一个标准的已制定好的标签库,可以应用于各种领域,如:基本输入输出、流程控制、循环、XML文件剖析、数据库查询及国际化和文字格式标准化的应用等。JSTL所提供的标签函数库主要分为五大类:
    (1)核心标签库 (Core tag library)
    (2)I18N 格式化标签库 (I18N-capable formatting tag library)
    (3)SQL 标签库 (SQL tag library)
    (4)XML 标签库 (XML tag library)
    (5)函数标签库 (Functions tag library)
    JSTL 前缀 URI
    核心标签库 c http://java.sun.com/jsp/jstl/core
    I18N格式化标签库 fmt http://java.sun.com/jsp/jstl/fmt
    SQL标签库 sql http://java.sun.com/jsp/jstl/sql
    XML标签库 xml http://java.sun.com/jsp/jstl/xml
    函数标签库 fn http://java.sun.com/jsp/jstl/functions
    若要在JSP 网页中使用JSTL,一定要先做下面这行声明:
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    核心标签库 (Core tag library)
    Core 标签库,又被称为核心标签库,该标签库的工作是对于 JSP 页面一般处理的封装。在该标签库中的标签一共有 14 个,被分为了四类,分别是:
  通用核心标签: <c:out> 、 <c:set> 、 <c:remove> 、 <c:catch> 。
  条件控制标签: <c:if> 、 <c:choose> 、 <c:when> 、 <c:otherwise> 。
  循环控制标签: <c:forEach> 、 <c:forTokens> 。
  URL 相关标签: <c:import> 、 <c:url> 、 <c:redirect> 、 <c:param> 。

一、通用核心标签:<c:out>, <c:set>, <c:remove>, <c:catch>
1.<c:out>
   <c:out>主要用来显示数据的内容,就像是 <%= scripting-language %> 一样,例如:Hello ! <c:out value="${username}" />。
   语法1:没有Body的情况
   <c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"]/>
   语法2:有Body的情况
   <c:out value="value" [excapeXml="{true|false}"]
       default value
   </c:out>
   属性名称      说明                                 EL类型      必须     默认值
   value      需要显示出来的值                       Y Object     是        无
   default    如果value的值为null则显示default的值   Y Object     否        无
   escapeXml  是否转换特殊字符,如:<转换成&lt;      Y boolean    否        true

   default Object 如果value是null,那么输出这个default值。
   注意:
   表格中的EL字段,表示此属性的值是否可以为EL表达式,例如:Y表示attribute="${表达式}"为符合语法的,N 则反之。
   Null 和错误处理:
   假若 value为null,会显示default 的值;假若没有设定default的值,则会显示一个空的字符串。
   说明:
   一般来说,<c:out>默认会将 <、>、’、” 和 & 转换为 &lt;、&gt;、&#039;、&#034; 和 &amp;。
   假若不想转换时,只需要设定<c:out>的escapeXml 属性为fasle 就可以了。
   范例1、<c:out value="Hello JSP 2.0 !! " />  在网页上显示 Hello JSP 2.0 !! ;
   范例2、<c:out value="${ 3 + 5 }" />  在网页上显示 8;
   范例3、<c:out value="${ param.data }" default="No Data" />  在网页上显示由窗体传送过来的data 参数之值,假若没有data 参数,或data 参数的值为null 时,则网页上会显示No Data;
   范例4、<c:out value="<p>有特殊字符</p>" />  在网页上显示“<p>有特殊字符</p>”;
   范例5、<c:out value="<p>有特殊字符</p>" escapeXml="false" />  在网页上显示“有特殊字符”。

2.<c:set>
   <c:set>主要用来将变量储存至JSP范围(Request, Session, Application等)中或是JavaBean的属性中(设置某个对象的属性)。
    语法1.使用value属性设置一个特定范围中的属性.
        <c:set value="value" var="varName" [scope="{page|request|session|application}"]/>
    语法2.使用value属性设置一个特定范围中的属性,并且带有一个Body.
        <c:set var="varName" [scope="{page|request|session|application}"]>
            body content
        </c:set>
    语法3.设置某个特定对象的一个属性.
        <c:set value="value" target="target" property="propertyName"/>
    语法4.设置某个特定对象的一个属性,并且带有一个Body
        <c:set target="target" property="propertyName"/>
            body content
        </c:set>
   属性名称      说明                                 EL类型      必须     默认值
   value        要被储存的值                         Y Object      否        无
   var          欲存入的变量名称                     N String      否        无
   scopevar     变量的JSP范围                        N String      否        page
   target       为一JavaBean或java.util.Map对象      Y Object      否        无
   property     指定target对象的属性                 Y String      否        无
   范例:
   范例1、<c:set var="number" scope="request" value="${1 + 1}" />  将2 存入Request 范围的number 变量中;
   范例2、<c:set var="number" scope="session" />
       ${3 + 5}
   </c:set>  将8 存入Session 范围的number 变量中;<c:set>是把本体(body)运算后的结果来当做value的值。
   范例3、<c:set var="number" scope="request" value="${ param.number }" />     假若 ${param.number}为null 时,则移除Request 范围的number 变量;若${param.number}不为null 时,则将 ${param.number}的值存入Request 范围的number 变量中;
   范例4、<c:set target="User" property="name" value="${ param.Username}" />   假若 ${param.Username}为null 时,则设定User(JavaBean)的name 属性为null;若不为
null 时,则将 ${param.Username}的值存入User(JavaBean)的name 属性(setter 机制)。
   注意:
   上述范例的3.中,假若 ${param.number}为null时,则表示移除Request范围的number变量。

3.<c:remove>
    <c:remove>主要用来移除变量。
    语法:
    <c:remove var="varname" [scope="{page|request|session|application}"]/>
   属性名称      说明                                 EL类型      必须     默认值
   var          欲移除的变量名称                     N String      是        无
   scope var    变量的JSP范围                        N String      否        page
   说明:
   <c:remove>必须要有var 属性,即要被移除的属性名称,scope 则可有可无,例如:
   <c:remove var="number" scope="session" />
   将number 变量从Session 范围中移除。若我们不设定scope,则<c:remove>将会从Page、Request、Session 及Application 中顺序寻找是否存在名称为number 的数据,若能找到时,则将它移除掉,反之则不会做任何的事情。

4.<c:catch>
    <c:catch>主要用来处理产生错误的异常状况,并且将错误信息储存起来。
    语法:
    <c:catch [var="varName"]>
        nested actions
    </c:catch>
   属性名称      说明                                 EL类型      必须     默认值
   var          用来储存错误信息的变量               N String      否        无
   说明:
   <c:catch>主要将可能发生错误的部分放在<c:catch>和</c:catch>之间。如果真的发生错误,可以将错误信息储存至varName 变量中,例如:
   <c:catch var="message">
    : //可能发生错误的部分
   </c:catch>
   另外,当错误发生在<c:catch>和</c:catch>之间时,则只有<c:catch>和</c:catch>之间的程序会被中止忽略,但整个网页不会被中止。

 

二、条件标签:<c:if>, <c:choose>, <c:when>, <c:otherwise>
1.<c:if>
   <c:if>的用途就和我们一般在程序中用的if 一样。
   语法1.
       <c:if test="testCondition" var="varName" [scope="{page|request|session|application}"]/>
   语法2.
       <c:if test="testCondition" [value="varName"] [scope="{page|request|session|application}"]>
           body content
       </c:if>

   属性说明:
   属性名称   说明                                   EL类型        必须         默认值
   Test     表达式结果为true,执行本体内容,false相反   Y  boolean   是             无
   var      用来储存test运算后的结果,即true或false   N String     否             无
   scope    var变量的JSP范围                          N String     否              page

 2.<c:choose>
   <c:choose>本身只当做 <c:when> 和 <c:otherwise> 的父标签。
   语法
   <c:choose>
        body content(<when> and <otherwise> subtags)
   </c:choose>
   注意,它的body content只能由以下的元素构成:
    (1) 空格
    (2) 0个或多个<when>,<when>必须在,<otherwise>之前出现
    (3) 0个或一个<otherise>
   说明:
   若使用<c:when>和<c:otherwise>来做流程控制时,两者都必须为<c:choose>的子标签.

3.<c:when>
   <c:when>的用途就和我们一般在程序中用的when 一样。
   语法:
    <c:when test="testCondition">
         body content
    </c:when>
   属性名称   说明                                        EL类型        必须        默认值
   Test      表达式结果为true,执行本体内容,false相反  Y boolean        是            无
   限制:
   a、 <c:when>必须在<c:choose>和</c:choose>之间
   b、 在同一个<c:choose>中时,<c:when>必须在<c:otherwise>之前
   说明
   <c:when>必须有test 属性,当test中的表达式结果为true时,则会执行本体内容;如果为false时,则不会执行
   有两个限制:
   (1)必须以<c:choose>作为它的父标签
   (2)必须在<c:otherwise>之前出现

4.<c:otherwise>
   在同一个 <c:choose> 中,当所有 <c:when> 的条件都没有成立时,则执行<c:otherwise> 的本体内容。
   语法:
   <c:otherwise>
        本体内容
   </c:otherwise>


三、迭代标签:<c:forEach>,<c:forTokens>
1.<c:forEach>
    <c:forEach> 为循环控制,它可以将集合(Collection)中的成员循序浏览一遍。运作方式为当条件符合时,就会持续重复执行<c:forEach>的本体内容。
    语法1:在Collection中迭代
    <c:forEach [var="varName"] items="collection"
    [varStatus="varStatusName"] [begin="begin"][end="end"][step="step"]>
        本体内容
    </c:forEach>
    语法2:迭代固定的次数
    <c:forEach [var="varName"] [varStatus="varStausName"]
    begin="begin" end="end" [step="step"]>
        本体内容
    </c:forEach>
    属性说明:
    var String 迭代参数的变量名
    items 支持的类型 将要迭代的集合
    varStatus String 表示迭代的状态,可以访问迭代自身的信息
    begin int 开始索引
    end int 结束索引
    step int 迭代的步长
    限制:
    a、假若有begin 属性时,begin 必须大于等于 0
    b、假若有end 属性时,必须大于begin
    c、假若有step 属性时,step 必须大于等于0
    Null 和错误处理:
    a、假若items 为null 时,则表示为一空的集合对象
    b、假若begin 大于或等于items 时,则迭代不运算
    如下示例:
    <%@ page contentType="text/html;charset=GB2312 " %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <html>
    <head>
    <title>CH7 - Core_forEach.jsp</title>
    </head>
    <body>
    <h2><c:out value="<c:forEach> 的用法" /></h2>
    <%
      String atts[] = new String [5];
      atts[0]="hello";
      atts[1]="this";
      atts[2]="is";
      atts[3]="a";
      atts[4]="pen";
      request.setAttribute("atts", atts);
    %>
    <c:forEach items="${atts}" var="item" >
       ${item}</br>
    </c:forEach>
    </body>
    </html>
    <c:forEach>除了支持数组之外,还有标准J2SE 的集合类型,例如:ArrayList、List、LinkedList、Vector、Stack和Set 等等;另外还包括java.util.Map 类的对象.
    <c:forEach>并不只是用来浏览集合对象而已,读者可以从语法2中发现,items并不存在,但是当没有使用items 属性时,就一定要使用begin 和end 这两个属性。
    <%@ page contentType="text/html;charset=GB2312" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <html>
    <head>
    <title>CH7 - Core_forEach2.jsp</title>
    </head>
    <body>
    <h2><c:out value="<c:forEach> 循环" /></h2>
    <c:forEach begin="1" end="10" var="item" >
        ${item}</br>
    </c:forEach>
    </body>
    </html>
    上述范例中,我们并没有执行浏览集合对象,只是设定begin 和end 属性的值,这样它就变成一个普通的循环。此范例是将循环设定为:从1 开始跑到10,总共会重复循环10 次,并且将数字放到item 的属性当中。
    另外,<c:forEach>还提供varStatus 属性,主要用来存放现在指到之成员的相关信息。例如: varStatus="s",那么将会把信息存放在名称为s的属性当中。varStatus属性还有另外四个属性:index、count、first 和last,它们各自代表的意义如表:
    属性       类型           意义
    index     number       现在指到成员的索引
    count     number       总共已经指到成员的总数
    first     boolean      现在指到的成员是否为第一个成员
    last      boolean      现在指到的成员是否为最后一个成员
    我们可以使用varStatus     属性取得循环正在浏览之成员的信息,下面为一个简单的范例:
    <%@ page contentType="text/html;charset=GB2312" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <html>
    <head>
    </head>
    <body>
    <h2><c:out value="<c:forEach> varStatus 的四种属性" /></h2>
    <%
       String atts[] = new String [5];
       atts[0]="hello";
       atts[1]="this";
       atts[2]="is";
       atts[3]="a";
       atts[4]="pen";
       request.setAttribute("atts", atts);
    %>
    <c:forEach items="${atts}" var="item"varStatus="s">
       <h2><c:out value="${item}"/>的四种属性:</h2>
       index:${s.index}</br>
       count:${s.count}</br>
       first:${s.first}</br>
       last:${s.last}</br>
    </c:forEach>
    </body>
    </html>

2.<c:forTokens>
    <c:forTokens> 用来浏览一字符串中所有的成员,其成员是由定义符号(delimiters)所分隔的。
    语法:
    <c:forTokens items="stringOfTokens" delims="delimiters"
    [var="varName"] [varStatus="varStatusName"]
    [begin="begin"] [end="end"] [step="step"]>
        body content
    </c:forTokens>
    属性说明:
    var String 迭代的参数名
    items String 将要迭代的String
    varStatus String 表示迭代的状态,可以访问迭代自身的信息
    delims String 分隔符
    begin int 开始索引
    end int 结束索引
    step int 迭代的步长
    说明:
    <c:forTokens>的begin、end、step、var 和varStatus 用法都和<c:forEach>一样,因此,笔者在这里就只介绍items 和delims 两个属性:items 的内容必须为字符串;而delims 是用来分割items 中定义的字符串之字符。
    范例:
    下面为一个典型的<c:forTokens>的范例:
    <c:forTokens items="A,B,C,D,E" delims="," var="item" >
        ${item}
    </c:forTokens>
    上面范例执行后,将会在网页中输出ABCDE。它会把符号“,”当做分割的标记,拆成5 个部分,也就是执行循环5 次,但是并没有将A,B,C,D,E 中的“,”显示出来。items 也可以放入EL 的表达式,如下:
    <%
      String phoneNumber = "123-456-7899";
      request.setAttribute("userPhone", phoneNumber);
    %>
    <c:forTokens items="${userPhone}" delims="-" var="item" >
        ${item}
    </c:forTokens>
    这个范例将会在网页上打印1234567899,也就是把123-456-7899以“-”当做分割标记,将字符串拆为3 份,每执行一次循环就将浏览的部分放到名称为item 的属性当中。delims 不只指定一种字符来分割字符串,它还可以一次设定多个分割字符串用的字符。如下面这个范例:
    <c:forTokens items="A,B;C-D,E" delims=",;-" var="item" >
      ${item}
    </c:forTokens>
    此范例会在网页输出ABCDE,也就是说,delims 可以一次设定所有想当做分割字符串用的字符。其实用    <c:forEach>也能做到分割字符串,写法如下:
    <c:forEach items="A,B,C,D,E" var="item" >
       ${item}
    </c:forEach>
    上述范例同样也会在网页输出ABCDE。<c:forEach>并没有delims这个属性,因此<c:forEach>无法设定分割字符串用的字符,而<c:forEach>分割字符串用的字符只有“,”,这和使用<c:forTokens>,delims 属性设为“,”的结果相同。所以如果使用<c:forTokens>来分割字符串,功能和弹性上会比使用<c:forEach>来得较大。

 

四、URL相关的标签<c:import>,<c:redirect>,<c:url>,<c:param>
1.<c:import>
    导入一个基于URL的资源。
    语法1:
    <c:import url="url" [context="context"] [var="varName"]
    [scope="{page|request|session|application}"]
    [charEncoding="charEncoding"]>
        optional body content for <c:param> subtags
    </c:import>
    语法2:
    <c:import="url" [context="context"] varReader="varReaderName"
    [charEncoding="charEncoding"]>
        body content where varReader is consumed by another action
    </c:import>
属性说明:
    url String 待导入资源的URL
    context String 当使用相对路径访问外部context资源时,context指定了这个资源的名字
    var String 参数的名称
    scope String var参数的作用范围
    charEncoding String 输入资源的字符编码
    varReader String 这个参数的类型是Reader,用于读取资源
2.<c:redirect>
    把客户的请求重定向到另一个资源。
    语法1.
    <c:redirect url="value" [context="context"]/>
    语法2.
    <c:redirect url="value" [context="context"]>
        <c:param>subtags
    </c:redirect>
    属性说明:
    url String 待定向资源的URL
    context String 当使用相对路径访问外部context资源时,context指定的这个资源的名字.
3.<c:url>
    用于构造URL,主要的用途是URL重写
    语法1.
    <c:url value="value" [context="context"]
    [var="varName"] [scope="{page|request|session|application}"]/>
    语法2.
    <c:url value="value" [context="context"]
    [var="varName"] [scope="{page|request|session|application}"]>
        <c:param>subtags
    </c:url> 
 4.<c:param>
    在<c:import>, <c:url>,<c:redirect>中添加请求的参数
    语法1.
    <c:param name="name" value="value"/>
    语法2.
    <c:param name="name">
        paramter value
    </c:param>

分享到:
评论

相关推荐

    JSTL标签使用手册-中文版.zip

    jstl使用手册-同韩顺平struts视频教学使用的资料 有常用几个标签,如set,out,forEach的详细属性介绍

    JSTL详解--Core 标签库介绍

    最后,您将了解 JSTL 经过简化的表达式语言,它允许在不必使用功能齐全的编程语言的情况下对 JSTL 操作指定动态属性值。 JavaServer Pages(JSP)是用于 J2EE 平台的标准表示层技术。JSP 技术提供了用于执行计算...

    JSP中常用的JSTL fmt(format格式化)标签用法整理

    主要介绍了JSP中常用的JSTL fmt(format格式化)标签用法整理,fmt的格式化处理遵循i18n国际化格式标准,需要的朋友可以参考下

    李兴华老师JAVAWEB习题答案及PPT

    MLDN 李新华 老师 Java Web基础篇课后习题答案,Java Web高级案例篇全部源码。 这套源码从最基本的JSP页面到Model 1到Model 2,文件上传,EL,JSTL,Ajax,Structs,一点一点的修改...第十六章.Structs常用标签:1题

    Java Web开发实战经典-基础篇课后习题答案及高级篇源码

    MLDN 李兴华 老师 Java Web基础篇课后习题答案,Java Web高级案例篇全部源码。 此源码从最基本的JSP页面到Model 1到Model 2,文件上传,EL,JSTL,Ajax,Structs,一点一点的修改讲解...第十六章.Structs常用标签:1题

    java web 视频、电子书、源码(李兴华老师出版)

    0416_Struts常用标签库 0417_Struts高级开发 0500_第五部分:附录 0518_附录A:实用工具 0519_附录B:MyEclipse开发工具 电子书目录: MLDN 李兴华 Java Web 开发实战经典.pdf (高清版) 第1章 JAVA WEB开发...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 上

    第16章 Struts常用标签库 16.1、Struts标签库简介 16.2、Bean标签 16.2.1、标签 16.2.2、标签 16.2.3、资源访问标签 16.2.4、标签 16.2.5、标签 16.2.6、标签 16.2.7、国际化与标签 16.3、Logic标签 ...

    MLDN+李兴华+Java+Web开发实战经典.part3.rar )

    第16章 Struts常用标签库 16.1、Struts标签库简介 16.2、Bean标签 16.2.1、标签 16.2.2、标签 16.2.3、资源访问标签 16.2.4、标签 16.2.5、标签 16.2.6、标签 16.2.7、国际化与标签 16.3、Logic...

    李兴华 java_web开发实战经典 源码 完整版收集共享

    第16章 Struts常用标签库 16.1、Struts标签库简介 16.2、Bean标签 16.2.1、标签 16.2.2、标签 16.2.3、资源访问标签 16.2.4、标签 16.2.5、标签 16.2.6、标签 16.2.7、国际化与标签 16.3、Logic标签 ...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 下

    第16章 Struts常用标签库 16.1、Struts标签库简介 16.2、Bean标签 16.2.1、标签 16.2.2、标签 16.2.3、资源访问标签 16.2.4、标签 16.2.5、标签 16.2.6、标签 16.2.7、国际化与标签 16.3、Logic标签 ...

    李兴华Java Web开发实战经典.pdf (高清版) Part1

    第16章 Struts常用标签库 16.1、Struts标签库简介 16.2、Bean标签 16.2.1、标签 16.2.2、标签 16.2.3、资源访问标签 16.2.4、标签 16.2.5、标签 16.2.6、标签 16.2.7、国际化与标签 16.3、Logic...

    李兴华 Java Web 开发实战经典 高清扫描版Part3

    第16章 Struts常用标签库 16.1、Struts标签库简介 16.2、Bean标签 16.2.1、标签 16.2.2、标签 16.2.3、资源访问标签 16.2.4、标签 16.2.5、标签 16.2.6、标签 16.2.7、国际化与标签 16.3、Logic标签 ...

    李兴华Java Web开发实战经典(高清版) Part2

    第16章 Struts常用标签库 16.1、Struts标签库简介 16.2、Bean标签 16.2.1、标签 16.2.2、标签 16.2.3、资源访问标签 16.2.4、标签 16.2.5、标签 16.2.6、标签 16.2.7、国际化与标签 16.3、Logic...

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    全书分4篇,共24章,其中,第1篇为技能学习篇,主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e...

    Struts2 in action中文版

    6.2.2 使用OGNL设置标签属性 115 6.3 数据标签 117 6.3.1 property标签 117 6.3.2 set标签 118 6.3.3 push标签 119 6.3.4 bean标签 120 6.3.5 action标签 122 6.4 控制标签 124 6.4.1 iterator标签 124 6.4.2 if和...

    EL表达式 (详解)

    JSTL并没有提供设定cookie的动作, 例:要取得cookie中有一个设定名称为userCountry的值,可以使用${cookie.userCountry} 来 取得它。 2)header和headerValues header 储存用户浏览器和服务端用来沟通的数据 ...

    java web技术开发大全(最全最新)

    5.7 JSP的标准标签库(JSTL) 5.7.1 如何使用JSTL 5.7.2 条件标签 5.7.3 循环标签 5.8 小结 第6章 用Servlet和JSP实现注册登录系统 第2篇 Struts 2篇 第7章 编写Struts 2的第一个程序 第8章 Struts 2进阶 ...

    java web开发技术大全

    5.7 JSP的标准标签库(JSTL) 5.7.1 如何使用JSTL 5.7.2 条件标签 5.7.3 循环标签 5.8 小结 第6章 用Servlet和JSP实现注册登录系统 第2篇 Struts 2篇 第7章 编写Struts 2的第一个程序 第8章 Struts...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    第17章 jsp标准标签库(jstl) 490 17.1 jstl简介 490 17.2 配置jstl 491 17.3 core标签库 491 17.3.1 一般用途的标签 492 17.3.2 条件标签 496 17.3.3 迭代标签 498 17.3.4 url相关的标签 501 17.4 i18n...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    第17章 jsp标准标签库(jstl) 490 17.1 jstl简介 490 17.2 配置jstl 491 17.3 core标签库 491 17.3.1 一般用途的标签 492 17.3.2 条件标签 496 17.3.3 迭代标签 498 17.3.4 url相关的标签 501 17.4 i18n...

Global site tag (gtag.js) - Google Analytics