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>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值