JSTL

一.简介

JSTL:JSP 标准标签函数库

JSTL所提供的标签函数库主要分为五大类:
(1)核心标签库 (Core tag library)                                             c               http://java.sun.com/jsp/jstl/core          eg.<c:out>
(2)I18N 格式标签库 (I18N-capable formatting tag library)         fmt             http://java.sun.com/jsp/jstl/fmt           eg.<fmt:formatDate>
(3)SQL 标签库 (SQL tag library)                                            sql              http://java.sun.com/jsp/jstl/sql            eg.<sql:query>
(4)XML 标签库 (XML tag library)                                            xml             http://java.sun.com/jsp/jstl/xml           eg.<x:forBach>
(5)函数标签库 (Functions tag library)                                      fn               http://java.sun.com/jsp/jstl/functions    定义了一些操作字符串的函数

二.使用JSTL

  (1)将 jstl.jar、standard.jar 复制到Tomcat的WEB-INFlib

  (2)在JSP 网页中声明

      eg.< %@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

      注:http://java.sun.com/jsp/jstl/core是JSTL1.1的默认uri,若想自定义taglib的uri 时,那就必须在web.xml 中加入设定值:

<web-app>
... ...
  <jsp-config>
    <taglib>
      <taglib-uri>http://www.milan.com.tw/jstl/core</taglib-uri>
      <taglib-location>/WEB-INF/tld/c.tld</taglib-location>
    </taglib>
  </jsp-config>
... ...
</web-app>

三.核心标签库介绍

常用标签按功能分类如下:

    (1)表达式操作

        a.<c:out>  显示数据

           语法:<c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"] />

                   或<c:out value="value" [escapeXml="{true|false}"]>default value</c:out>

           分析:value:显示的数据

                   default:value=null时,显示该默认值,若不设置,当value=null时,显示空字符串

                   escapeXml:是否转换特殊字符,<c:out>默认会将 <、>、’、” 和 & 转换为 &lt;、&gt等,可以设置false,不转换

                                    所以<c:out value="<p>测试</p>"/>若不设置escapeXml=false,则输出 <p>测试</p>

      b.<c:set>  将变量储存至JSP 范围中或是JavaBean 的属性中

            语法:<c:set value="value" var="varName" [scope="{ page|request|session|application }"]/>

                    或<c:set var="varName" [scope="{ page|request|session|application }"]>内容</c:set>

                      表示将value存到scope指定范围的varName变量中,scope默认为page

                      注:若value=null,若scope确定,则PageContext.removeAttribute(varName, scope),若scope不确定,PageContext.removeAttribute(varName)

                  < c:set value="value" target="target" property="propertyName" />

                 或<c:set target="target" property="propertyName">内容</c:set>

                     表示将value 的值储存至 target 对象的propertyName属性中

                   注:target为map或javabean,否则抛异常,target=null也会抛异常

                        value=null时,若target=map,则target.remove(propertyName);若target=javabean则target.propertyName=null

        c.<c:remove>移除变量

              语法:<c:remove var="varName" [scope="{ page|request|session|application }"] />

                      若不设定scope,则<c:remove>将会从Page、Request、Session 及Application 中顺序寻找变量,若能找到时,则将它移除掉,反之则不做任何的事情

       d.<c:catch>处理产生错误的异常状况,并且将错误信息储存起来

             语法:<c:catch [var="varName"] >欲抓取错误的部分</c:catch>

             注:当错误发生在<c:catch>和</c:catch>之间时,则只有<c:catch>和</c:catch>之间的程序会被中止忽略,但整个网页不会被中止

  (2)流程控制

       a.<c:if>

            语法:       <c:if test="testCondition" [var="varName"] [scope="{page|request|session|application}"]/>

                         或<c:if test="testCondition" [var="varName"] [scope="{page|request|session|application}"]>内容</c:if>

            说明:test:表达式值为true时执行,false不执行

                     var:存储test结果true|false

      b.<c:choose>、<c:when> 和 <c:otherwise>

         语法:

      <c:choose>

          <c:when test="testCondition" >            

             内容          

          </c:when>

          ... ...

          <c:otherwise>           

             内容         

         </c:otherwise>       

      </c:choose>

         说明:当test=true时,执行<c:when>中内容,若同一个<c:choose>中所有<c:when>的test都为false才执行<c:otherwise>中内容

         注意:<c:when> 和 <c:otherwise>一定被<c:choose>包围;

                 在同一个 <c:choose> 中时,<c:when>必须在<c:otherwise>之前,<c:otherwise> 必须为最后一个标签;

                 在同一个<c:choose>下,当有好几个<c:when>都符合条件时,只能有一个<c:when>成立

   (3)迭代操作

      a.<c:forEach>重复执行本体内容,遍历

         语法: <!-- 遍历array,list,map等 -->

         <c:forEach [var="varName"] items="collection" [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]>       

            本体内容    

        < /c:forEach> 

       <!-- 遍历指定次数-->

        <c:forEach [var="varName"] [varStatus="varStatusName"] begin="begin" end="end" [step="step"]>   

            本体内容

        </c:forEach>

        说明:var:存放到指定变量

              varStatus:存放现在指到的相关成员信息,它有index(现在指到的成员的索引)、count(指到的成员总数)、

                               first(是否为第一个) 和last(是否为最后一个)四个属性

              step:迭代间隔数

              items:items被迭代的集合对象,若不设置items属性,那么begin和end一定要有

   b.<c:forTokens>  浏览一字符串中所有的成员,其成员是由定义符号(delimiters)所分隔

         语法:

            <c:forTokens items="stringOfTokens" delims="delimiters" [var="varName"] [varStatus="varStatusName"]         

        [begin="begin"] [end="end"] [step="step"]>        

       本体内容     

    </c:forTokens>

  (4)URL 操作

      a.<c:import> 把其他静态或动态文件包含至本身JSP 网页

          语法:

               <c:import url="url" [context="context"] [var="varName"] [scope="{page|request|session|application}"] [charEncoding="charEncoding"]>

         本体内容

     </c:import>

     或<c:import url="url" [context="context"] varReader="varReaderName" [charEncoding="charEncoding"]> 本体内容 </c:import>

         说明:var:储存被包含的文件的内容(以String类型存入)

                  scope:var变量的JSP 范围

                  varReader:储存被包含的文件的内容(以Reader类型存入)

                  content:引入同一服务器下不同站点的jsp时,要设置该值,为"/站点名"

        注意:url=null,抛异常,url="绝对地址|相对地址"

                    绝对地址:eg <c:import url="http://www.baidu.com"/>

                    相对地址:eg <c:import url="hello.jsp"/>, 表示引入文件在同一个webapps的文件夹下的hello.jsp,若用/表示站点根目录下的hello.jsp

                <c:import>的本体内容中使用<c:param name="paramName" value="paramValue"/>传参给被包含文件

        与<jsp:include page=""/>的区别:<jsp:include>只能包含和自己同一个web application下的文件,而<c:import>可包含不同web application下的文件

                                                      和其他网站的文件

    

   b.<c:url> 生成url

         语法: 

       <c:url value="value" [context="context"] [var="varName"] [scope="{page|request|session|application}"] />

                 或<c:url value="value" [context="context"] [var="varName"] [scope="{page|request|session|application}"] >

           <c:param> 标签传参

       </c:url>

        说明:content:同一服务器下不同站点时,要设置该值,为"/站点名"

   c.<c:redirect> 将客户端的请求从一个JSP 网页重定向到指定url

       语法:<c:redirect url="url" [context="context"] />

     或 <c:redirect url="url" [context="context"] > <c:param> </c:redirect >

原文地址:https://www.cnblogs.com/javamilan/p/4262046.html