• Java Servlet(十):JSTL核心标签库


    JSTL全名称:JaveServer Pages Standard Tag Library.JSTL是由JCP(Java Community Process)所定制的标准规范,它主要提供给Java Web开发人员一个标准通用的函数库。

    Java Web程序员能利用JSTL和EL来开发Web程序,取代传统直接在页面上嵌入JAVA程序(Scripting)的做法,以提高的阅读性、维护性和方便性。

    • 安装

    要想使用使用jstl标签库,首先要引入jstl标签库包:jstl.jar,standard.jar

    官网下载地址:http://tomcat.apache.org/taglibs/standard/

    这里选择的是下载jstl标签库是1.1版本(http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/jakarta-taglibs-standard-1.1.2.zip),目前最新版本是1.2。

    下载好后,解压目录下:lib下,可以发现这两个包。

    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 <c:out>
    I18N格式标签库
    fmt http://java.sun.com/jsp/jstl/xml <fmt:formatDate>
    SQL标签库 sql http://java.sun.com/jsp/jstl/sql <sql:query>
    XML标签库 xml http://java.sun.com/jsp/jstl/fmt <x:forBach>
    函数标签库 fn http://java.sun.com/jsp/jstl/functions <fn:split>
    • 核心标签库(Core tag library)

    新建一个Dynamic Web Project,命名为:MyJSTL001工程。

    在default.jsp页面中头部引入核心标签库:

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
     4 <%@ page import="com.dx.work.Customer" %>
     5 <%@ page import="java.util.*" %>
     6 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     7 <html>
     8 <head>
     9 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    10 <title>Insert title here</title>
    11 </head>
    12 <body>    
    • 表达式操作

    表达式操作分类中包含四个标签:<c:out>、<c:set>、<c:remove>和<c:catch>。

    1. <c:out>主要用来显示数据的内容,就像是 <%= scripting-language %> 一样

    语法1:没有本体(body)内容
    <c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"] />
    语法2:有本体内容
    <c:out value="value" [escapeXml="{true|false}"]>
    default value
    </c:out>

    用法示例:

        <h4>c:out 可以对特殊字符进行转换</h4>
        <%
            request.setAttribute("BookName", "<<jsp2.0技术手册>>");
        %>
        BookName:${requestScope.BookName}
        <br/>
        <br/>
        BookName:<c:out value="${requestScope.BookName}"/>
        <br/>
        BookName(escapeXml="false"是,将取消对特殊字符进行转换操作):<c:out value="${requestScope.BookName}" escapeXml="false"/>
        <br/>
        

    浏览效果:

    1. <c:set>主要用来将变量储存至JSP范围中或是JavaBean的属性中。

    语法1:将value的值储存至范围为scope的 varName 变量之中
    <c:set value="value" var="varName" [scope="{ page|request|session|application }"]/>
    语法2:将本体内容的数据储存至范围为scope的 varName 变量之中
    <c:set var="varName" [scope="{ page|request|session|application }"]>
    … 本体内容
    </c:set>
    语法3:将 value的值储存至 target 对象的属性中
    <c:set value="value" target="target" property="propertyName" />
    语法4:将本体内容的数据储存至target 对象的属性中
    <c:set target="target" property="propertyName">
    … 本体内容
    </c:set>

    用法示例:

     1     <h4>c:set 可以对域对象进行赋值,为域对象里边的某一个javabean属性赋值。</h4>
     2     <c:set var="Title" value="dkkkd" scope="request" /><br/>
     3     title:${requestScope.Title}<br/>
     4     title:<c:out value="${requestScope.Title}"  /><br/>
     5     <%
     6         Customer cust=new Customer();
     7         cust.setId(1);
     8         cust.setName("number one");
     9         
    10         request.setAttribute("cust", cust);
    11     %>    
    12     <br/>    
    13     id:${requestScope.cust.id}<br/>    
    14     <c:set target="${requestScope.cust}" property="id" value="1001" /><br/>    
    15     id:${requestScope.cust.id}<br/>

    浏览效果:

    1. c:remove 用来移除变量。

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

    用法示例:

    1     <h4>c:remove 用来移除变量。</h4>
    2     <c:set var="waitRemoveObject" value="abcde" scope="request" />
    3     waitRemoveObject:<c:out value="${waitRemoveObject }" /><br/>    
    4     <c:remove var="waitRemoveObject" scope="request"/>
    5     从requestScope中移除waitRemoveObject:<c:out value="${waitRemoveObject }"/><br/>
    6     

    浏览效果:

    1. c:catch 用来扑捉异常,并把异常信息存储到某个指定的变量中。

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

    用法示例:

    1     <h4>c:catch 用来扑捉异常,并把异常信息存储到某个指定的变量中。</h4><br/>
    2     <c:catch var="errorParseMessage">
    3     <%
    4     String intStr="111Acx";
    5     int intVal= Integer.parseInt(intStr);
    6     %>
    7     </c:catch><br/>
    8     <c:out value="${errorParseMessage}"/><br/>

    浏览效果:

    • 流程控制

    流程控制分类中包含四个标签:<c:if>、<c:choose>、<c:when>和<c:otherwise>

    1. <c:if>

    语法1:没有本体内容(body)
    <c:if test="testCondition" var="varName" [scope="{page|request|session|application}"]/>
    语法2:有本体内容
    <c:if test="testCondition" [var="varName"] [scope="{page|request|session|application}"]>
    本体内容
    </c:if>

    用法示例:

    1     <h4>c:if 用来判定条件是否满足。不能实现if ... else if ... else ... ;也不能实现 if ... else ...</h4>
    2     <c:set var="currentUser" value="administrator" scope="session" />
    3     <c:if var="ifConditionResult" test="${sessionScope.currentUser=='administrator'}" scope="request">
    4         <c:out value="当前用户是:admin"/><br/>
    5     </c:if>
    6     <br/>
    7     result:<c:out value="${requestScope.ifConditionResult }"/><br/>

    效果:

    1. c:choose,c:when,c:otherwise。可以实现if ... else if ... else ... ;也能实现 if ... else ...语句。

    <c:choose>
    本体内容( <when> 和 <otherwise> )
    </c:choose>

    用法示例:

     1     <h4>c:choose,c:when,c:otherwise。可以实现if ... else if ... else ... ;也能实现 if ... else ...语句。<br/>
     2     其中:c:choose以c:when,c:otherwise的父标签出现;
     3     c:when,c:otherwise不能脱离c:choose单独使用;
     4     c:otherwise 必须在c:when之后使用。    
     5     </h4>    
     6 
     7     <c:set var="age" value="20" scope="request" />
     8     the age is:<c:out value="${age}"/>
     9     <br/>    
    10     <c:choose>
    11         <c:when test="${requestScope.age>=65}">
    12             老年。
    13         </c:when>
    14         <c:when test="${requestScope.age>=40}">
    15             中年
    16         </c:when>
    17         <c:when test="${requestScope.age>=18}">
    18             青年
    19         </c:when>
    20         <c:when test="${requestScope.age>=12}">
    21             成年
    22         </c:when>
    23         <c:when test="${requestScope.age>=3}">
    24             少年
    25         </c:when>
    26         <c:otherwise>
    27             儿童
    28         </c:otherwise>
    29     </c:choose>
    30     
    31     

    浏览效果:

    • 迭代操作

    迭代(Iterate)操作主要包含两个标签:<c:forEach>和<c:forTokens>

    1. <c:forEach>

    <c:forEach> 为循环控制,它可以将集合(Collection)中的成员循序浏览一遍。运作方式为当条件符合时,就会持续重复执行<c:forEach>的本体内容。

    语法1:迭代一集合对象之所有成员
    <c:forEach [var="varName"] items="collection" [varStatus="varStatusName"]
    [begin="begin"] [end="end"] [step="step"]>
    本体内容
    </c:forEach>
    语法2:迭代指定的次数
    <c:forEach [var="varName"] [varStatus="varStatusName"] begin="begin" end="end" [step="step"]>
    本体内容
    </c:forEach>

    使用示例:

     1     <h4>迭代操作:</h4>
     2     <c:forEach begin="0" end="2" step="1" var="item">
     3     <c:out value="${item}"/><br/>
     4     </c:forEach>
     5     item:<c:out value="${item}"/><br/>
     6     
     7     <%
     8         List<Customer> custs=new ArrayList<Customer>();
     9         custs.add(new Customer(1,"first member"));
    10         custs.add(new Customer(2,"first member"));
    11         custs.add(new Customer(3,"first member"));
    12         custs.add(new Customer(4,"first member"));
    13         
    14         request.setAttribute("custs", custs);
    15     %>    
    16     <c:forEach items="${requestScope.custs }" var="item" varStatus="status">    
    17     first:${status.first}-index:${status.index}-count:${status.count}-last:${status.last}-${item.id}-${item.name}<br/>
    18     </c:forEach>

    浏览效果:

    1. <c:forTokens>

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

    <c:forTokens items="stringOfTokens" delims="delimiters" [var="varName"] [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]>
    本体内容
    </c:forTokens>

    用法示例:

    1     <h4>字符分割:用来浏览一字符串中所有的成员,其成员是由定义符号(delimiters)所分隔的。</h4>
    2     <c:set var="delimsOriginal" value="a,b,c,1;2;3;-xx-yy-zz" scope="request" />
    3     <c:forTokens items="${requestScope.delimsOriginal}" delims=",;-" var="item">
    4         <c:out value="${item}"/><br/>
    5     </c:forTokens>

    浏览效果:

    • URL操作

    JSTL包含三个与URL操作有关的标签,它们分别为:<c:import>、<c:redirect>和<c:url>。它们主要的功能是:用来将其他文件的内容包含起来、网页的导向,还有url的产生。

    参考书籍:

    《JSP2.0 技术手册》

  • 相关阅读:
    WCF、Net remoting、Web service概念及区别
    新浪微博技术架构分析
    谈SOA和云的分层架构
    开发人员眼中最好的代码编辑器是什么?
    调试脚本,远离alert
    struts2与cookie实现自动登录和验证码验证
    把旧的项目改变名称重新部署到tomcat下发现项目名称还是原来的项目名称,解决方案
    myeclipse2014 安装maven3.3.9和mave配置本地仓库
    mysql在表的某一位置增加一列、删除一列、修改列名
    Java实现对cookie的增删改查
  • 原文地址:https://www.cnblogs.com/yy3b2007com/p/5493426.html
Copyright © 2020-2023  润新知