zoukankan      html  css  js  c++  java
  • JavaWeb总结(七)—JSTL标签库

    一、JSTL标签库介绍

         JSTL标签库的使用时为了弥补HTML标签的不足,规范自定义标签的使用而诞生的。使用JSTL标签的目的是不希望在JSP中出现Java逻辑代码。

    二、JSTL标签库的分类

         1.核心标签(用的最多)

         2.国际化标签(I18N格式化标签)

         3.数据库标签(SQL标签,不用)

         4.XML标签(不用)

         5.JSTL函数(EL函数)

    三、核心标签库的使用

         JSTL的核心标签一个有13个,使用这些标签能够完成JSP页面的基本功能,减少编码的工作。

         从功能上可以分为4类: 表达式控制标签、流程控制标签、循环标签、URL标签。

        表达式控制标签: out标签、set标签、remove标签、catch标签。

           流程控制标签: if标签、choose标签、when标签、otherwise标签。

                循环标签: forEach标签、forTokens标签。

                URL标签: import标签、url标签、redirect标签、param标签。

         在JSP引入核心标签库代码如下。

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

    1.<c:out>标签

    (1)功能

         <c:out>标签主要是用来输出数据对象(字符串、表达式)的内容或结果。
         在使用Java脚本输出时常使用的方式为: <% out.println(“字符串”)%> 或者 <%=表达式%> ,在web开发中,为了避免暴露逻辑代码会尽量减少页面中的Java脚本,使用<c:out>标签就可以实现以上功能。

    (2)语法

    <c:out value="要显示的数据对象" [escapeXml="true|false"] [default="默认值"]/>

         image

         一般来说,<c:out>默认会将 <、>、 ’ 、 ” 和 & 转换为 &lt;、&gt;、&#039;、&#034; 和 &amp;。
    假若不想转换时,只需要设定<c:out>的 escapeXml 属性为 fasle 就可以了

         image

    (3)使用

    	<c:out value="Hello JSP 2.0 !! " /> <br>
    	<c:out value="${ 3 + 5 }" /> <br>
    	<c:out value="${ param.data }" default="No Data" /> <br>
    	<c:out value="<h1>有特殊字符</h1>" /> <br>
    	<c:out value="<h1>有特殊字符</h1>" escapeXml="false" /> <br>

    结果:

    image

    2.<c:set>标签

    (1)功能

        <c:set>标签用于把某一个对象存在指定的域范围内,或者将某一个对象存储到Map或者JavaBean对象中。

    (2)语法

        A:<c:set value="value1" var="name1" [scope="page|request|session|application"]/>

         解释: 把一个变量名为name1,值为“value1”的变量存储在指定的scope范围内。

         B: <c:set value="value1" target="JavaBean对象" property="属性名"/>

         解释: 把一个值为“value1”赋值给指定的JavaBean的属性名。相当与setter()方法。

         image

    假若 value 为 null 时,将由储存变量改为移除变量。
    对于A: 由 var 和 scope 所定义的变量,将被移除。
         若 scope 已指定时,则 PageContext.removeAttribute(varName, scope)
         若scope 未指定时,则 PageContext.removeAttribute(varName)
    对于B
         假若 target 为 Map 时,则Map.remove(property)。
         假若 target 为 JavaBean 时,property 指定的属性为null。

    (3)使用

    	<c:set var="number" scope="request" value="${1 + 1}" />
    	<c:set var="number" scope="session" > ${3 + 5} </c:set>
    	<c:set var="number" scope="request" value="${ param.number }" />
    	<c:set target="User" property="name" value="${ param.Username}" />

    1.将 2 存入 Request 范围的 number 变量中。
    2.将 8 存入 Session 范围的 number 变量中。
    3.假若 ${param.number}为 null 时, 则移除 Request 范围的 number 变量; 若${param.number}不为 null 时,则将 ${param.number}的值存入 Request 范围的 number 变量中。
    4.假若 ${param.Username}为 null 时,则设定 User(JavaBean)的 name 属性为 null;若不为null 时,则将 ${param.Username}的值存入 User(JavaBean)的 name 属性(setter 机制)。

    3.<c:remove>标签

    (1)功能

        <c:remove>标签用来移除变量。

    (2)语法

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

         image

    <c:remove var="number" scope="session" />

         将 number 变量从 Session 范围中移除。若我们不设定 scope,则<c:remove>将会从 Page、Request、Session 及 Application 中顺序寻找是否存在名称为 number 的数据,若能找到时,则将它移除掉,反之则不会做任何的事情。

    (3)使用

    %@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    
    <title>My JSP 'index.jsp' starting page</title>
    </head>
    
    <body>
    
    	<c:set scope="page" var="num" value="${ 1 + 1}"/>
    	<c:set scope="request" var="num" value="3"/>
    	<c:set scope="session" var="num" value="4"/>
    	
    	初始设置
    	<table border="1" width="40%">
    	
    	<tr>
    		<th>pageScope.num</th>
    		<td> <c:out value="${pageScope.num } " default="NoData"/> </td>
    	</tr>
    	<tr>
    		<th>requestScope.num</th>
    		<td> <c:out value="${requestScope.num } " default="NoData"/> </td>
    	</tr>
    	<tr>
    		<th>sessionScope.num</th>
    		<td> <c:out value="${sessionScope.num } " default="NoData"/> </td>
    	</tr>
    	
    	</table>
    	<br><br>
    	
    	<c:out value="<c:remove var='num' scope='page' />之后"/>
    	<c:remove var="num" scope="page"/>
    	
    	<br><br>
    	<table border="1" width="40%">
    	
    	<tr>
    		<th>pageScope.num</th>
    		<td> <c:out value="${pageScope.num } " default="NoData"/> </td>
    	</tr>
    	<tr>
    		<th>requestScope.num</th>
    		<td> <c:out value="${requestScope.num } " default="NoData"/> </td>
    	</tr>
    	<tr>
    		<th>sessionScope.num</th>
    		<td> <c:out value="${sessionScope.num } " default="NoData"/> </td>
    	</tr>
    	
    	</table>
    	<br><br>
    	
    	<c:out value="<c:remove var='num'/>之后"/>
    	<c:remove var="num"/>
    	
    	<br><br>
    	<table border="1" width="40%">
    	
    	<tr>
    		<th>pageScope.num</th>
    		<td> <c:out value="${pageScope.num } " default="NoData"/> </td>
    	</tr>
    	<tr>
    		<th>requestScope.num</th>
    		<td> <c:out value="${requestScope.num } " default="NoData"/> </td>
    	</tr>
    	<tr>
    		<th>sessionScope.num</th>
    		<td> <c:out value="${sessionScope.num } " default="NoData"/> </td>
    	</tr>
    	
    	</table>
    	<br><br>
    		
    </body>
    </html>

         开始各在 Page、Request 和 Session 三个属性范围中储存名称为 num的变量。然后先使用<c:remove var="num" scope="page" />把 Page 中的 num变量移除,最后再使用<c:remove var="num" />把所有属性范围中num的变量移除。

    结果:

         image

    4.<c:catch>标签

    (1)功能

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

    (2)语法

         <c:catch [var="varName"]>容易产生异常的代码</c:catch>

         image

         <c:catch>主要将可能发生错误的部分放在<c:catch>和</c:catch>之间。如果真的发生错误,可以将错误信息储存至 varName 变量中。当错误发生在<c:catch>和</c:catch>之间时,则只有<c:catch>和</c:catch>之间的程序会被中止忽略,但整个网页不会被中止。

    (3)使用

    <body>
    
    	<c:catch var="errMsg">
    	
    	<%
    		String str = "haha";
    		int i = Integer.parseInt(str);
    	%>
    	
    	</c:catch>
    	
    	${ errMsg }
    		
    </body>

    结果:

    image

    5.<c:if>标签

    (1)功能

        和我们在程序使用的if一样。

    (2)语法

        A: 没有Body

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

         B:有Body

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

         image

         <c:if> 标签必须要有 test 属性,当 test 中的表达式结果为 true 时,则会执行本体内容;如果为 false,则不会执行。例如:${param.username = = 'admin'},如果 param.username 等于 admin时,结果为 true;若它的内容不等于 admin 时,则为 false。

    (3)使用

    <body>
    
    	<c:if test="${ param.username == 'Tom' }" var="condition" scope="page">
    		
    		您好,Tom先生。
    		
    	</c:if>
    	<br>
    	执行结果为: ${condition}
    </body>

    结果:

    image

    6.<c:choose>、<c:when>、<c:otherwise>标签

    (1)功能

         <c:choose>、<c:when> 和<c:otherwise>这3个标签通常情况下是一起使用的,<c:choose>标签作为<c:when> 和<c:otherwise>标签的父标签来使用。使用<c:choose>,<c:when>和<c:otherwise>三个标签,可以构造类似 “if-else if-else” 的复杂条件判断结构。

    (2)语法

     <c:choose>
             <c:when test="条件1">
           //业务逻辑1
             </c:when>
    
          <c:when test="条件2">
           //业务逻辑2
             </c:when>
    
          <c:when test="条件n">
           //业务逻辑n
             </c:when>
             
             <c:otherwise>
           //业务逻辑
          </c:otherwise>
     </c:choose>

    (3)使用

    <body>
    
    	<c:set scope="page" var="grade" value="99"/>
    	
    	<c:choose>
    	
    		<c:when test="${grade >= 90}">
    		优秀
    		</c:when>
    		
    		<c:when test="${ grade >= 80 && grade< 90}">
    		良好
    		</c:when>
    		
    		<c:when test="${ grade >= 70 && grade< 80}">
    		中等
    		</c:when>
    		
    		<c:when test="${ grade >= 60 && grade< 70}">
    		及格
    		</c:when>
    		
    		<c:otherwise>
    		不及格
    		</c:otherwise>
    		
    	</c:choose>
    
    </body>

    7.<c:forEach>标签

    (1)功能

        该标签根据循环条件遍历集合(Collection)中的元素。

    (2)语法

    <c:forEach
         var="name"
         items="Collection"
         varStatus="StatusName"
         begin="begin"
         end="end"
         step="step">
        本体内容
    </c:forEach>

         image

    (3)使用

    <body>
    
    	<%
    		List<String> list = new ArrayList<String>();
    		list.add("aaa");
    		list.add("bbb");
    		list.add("ccc");
    		list.add("ddd");
    		request.setAttribute("list",list);
    	%>
    	
    	<c:forEach var="item" items="${ list }">
    		<c:out value="${ item }"/>
    	</c:forEach>
    	
    </body>

    结果:

    aaa bbb ccc ddd

    8.<c:forTokens>标签

    (1)功能

        该标签用于浏览字符串,并根据指定的字符将字符串截取。

    (2)语法

    <c:forTokens items="strigOfTokens"
                delims="delimiters"
                [var="name"
                begin="begin" 
                end="end"
                step="len" 
                varStatus="statusName"] >
        本体内容
    </c:forTokens>

    (3)使用

    <body>
    
    	<c:forTokens var="str" items="北、京、欢、迎、您" delims="、">
             <c:out value="${str}"></c:out><br/>
        </c:forTokens>
    	
    </body>

    结果:

          北
          京
          欢
          迎
          您

  • 相关阅读:
    T4 (Text Template Transformation Toolkit)
    GUI Design Studio
    51劳有所获 54务实青年
    [书目20110502]把时间当作朋友
    Rdlc子报表的动态添加
    [转]更新Android SDK到3.0版本时,遇到Failed to rename directory E:\android\tools to E:\android\temp\ToolPackage.old01问题
    JSON
    javascript 特征侦测技术
    IE的setAttribute bug
    将"类数组对象"转换成数组对象
  • 原文地址:https://www.cnblogs.com/yangang2013/p/5395829.html
Copyright © 2011-2022 走看看