JSP——JSTL语法总结
一、JSTL概述:
1、什么是JSTL?
- JSTL 全名为 JavaServer Pages Standard Tag Library, 它主要提供给开发人员一个标准通用的标签函数库。
2、JSTL的作用:
- Web程序开发人员能够利用JSTL和EL来开发Web程序,取代传统直接在页面上嵌入Java程序的做法,以提高程序可读性、维护性和方便性。
3、JSTL所提供的标签函数库主要分为五大类:
- 核心标签库 (Core tag library)
- SQL 标签库 (SQL tag library)
- I18N 格式标签库 (internationalization )
- XML 标签库 (XML tag library)
- 函数标签库 (Functions tag library)
其中核心标签库是最常用的,这里只总结下核心标签库。
4、使用标签的方法:
 <%@taglib tagdir/uri="标签位置" prefix="缩略名"%>
| JSTL | 前缀 | URI | 范例 | 
|---|---|---|---|
| 核心标签库 | c | http://java.sun.com/jsp/jstl/core | <c:out> | 
| SQL标签库 | sql | http://java.sun.com/jsp/jstl/sql | <sql:query> | 
| I18N 标签库 | fmt | http://java.sun.com/jsp/jstl/fmt | <fmt:formatDate> | 
| XML标签库 | xml | http://java.sun.com/jsp/jstl/xml | <x:forBach> | 
| 函数标签库 | fn | http://java.sun.com/jsp/jstl/functions | <fn:split> | 
例 (使用核心标签库):
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
二、JSTL核心标签库:
JSTL的核心标签库(Core)主要操作有:表达式操作、流程控制和迭代操作。
 
1、表达式操作:
表达式操作主要有四种:<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=“默认值"] />
2:有本体内容
   <c:out value="value" [escapeXml="{true|false}"]>
    默认值
    </c:out> 
其中
 
 2. <c:set>
- <c:set>用来将变量储存至 JSP 范围中或 JavaBean 的属性中。
语法:
 1:将value的值存至范围为scope的varName变量之中
<c:set value="value" var="varName" 
           [scope="{ page|request|session|application }"]/>
若value为null时:将由储存变量改为移除变量
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" />
若value为null时,则property 指定的属性为null
4:将本体内容的数据储存至 target 对象的属性中
<c:set target="target" property="propertyName">
本体内容
</c:set>
target常见为JavaBeans类型
 target为null或不是JavaBean类型,将产生异常。
其中
 
 3. <c:remove>
 <c:remove>主要用来移除变量
语法:
<c:remove var="varName" 
         [scope="{ page|request|session|application }"] />

 若不设定 scope,则<c:remove>将会从 Page、 Request、Session 及 Application 中顺序寻找是否存在名称为 var值 的数据,若能找到时, 则将它移除掉,反之则不会做任何的事情。
4、<c:catch>
 <c:catch>主要用来处理产生错误的异常状况,并且将错误信息储存起来。
语法:
<c:catch [var="varName"] >
欲抓取错误的部分
</c:catch>
<c:catch>将可能发生错误的部分放在<c:catch>和</c:catch>之间。如果真的发生错误,可以将错误信息储存至varName变量中,例如:
<c:catch var="message">
可能发生错误的部分
</c:catch>
当错误发生在<c:catch>和</c:catch>之间时,只有<c:catch>和</c:catch>之间的程序会被中止忽略,但整个网页不会被中止。
2、程序流程控制:
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>
属性:
 
 2. <c:choose>
- <c:choose>本身只当做- <c:when>和- <c:otherwise>的父标签。
语法:
<c:choose>
本体内容( <when> 和 <otherwise> )
</c:choose>
<c:choose>的本体内容只能有:
- 空白
- 1 或多个 <c:when>
- 0 或1个 <c:otherwise>
说明:
 使用<c:when>和<c:otherwise>做流程控制时,两者都必须为<c:choose>的子标签。
 即:
<c:choose>
     <c:when>   …   </c:when>
     <c:otherwise>   …  </c:otherwise>
</c:choose>
3. <c:when>
- <c:when> 表示当满足某一条件时执行本体内容。
语法:
<c:when test="testCondition" >
本体内容
</c:when> 
限制:
- <c:when>必须在- <c:choose>和- </c:choose>之间。
- 在同一个<c:choose>中,<c:when>必须在<c:otherwise>之前。
说明:
- <c:when>必须有 test 属性,当 test 中的表达式结果为 true 时,则会执行本体内容;如果为false 时,则不会执行。
3. <c:otherwise>
- 在同一个 <c:choose> 中,当所有 <c:when> 的条件都没有成立时,则执行 <c:otherwise> 的本体内容 。
语法:
<c:otherwise>
本体内容
</c:otherwise>
限制:
- <c:otherwise>必须在- <c:choose>和- </c:choose>之间
- 在同一个 <c:choose>中时,<c:otherwise>必须为最后标签
说明:
- 在同一个 <c:choose>中,假若所有<c:when>的 test 属性都不为 true 时,则执行<c:otherwise>的本体内容
3、迭代操作:
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> 
其中
 
 限制:
- 假若有 begin 属性时,begin 必须大于等于 0。
- 假若有 end 属性时,必须大于 begin。
- 假若有 step 属性时,step 必须大于等于 0。
Null 和 错误处理:
- 假若items为null时,则表示为一空的集合对象。
- 假若begin大于或等于items大小时,则迭代不运算。
说明:
- 如果要循序浏览一个集合对象,并将它的内容显示出来,就必须有 items 属性。
2. <c:forTokens>:
- <c:forTokens> 用来浏览一字符串中所有的成员,其成员是由定义符号(delimiters)所分隔的。
语法:
<c:forTokens items="stringOfTokens"  
       delims="delimiters" [var="varName"]
       [varStatus="varStatusName"] [begin="begin"]   
       [end="end"] [step="step"] >
  本体内容
</c:forTokens>  
其中:
 
 限制:
- 假若有begin属性时,begin 必须大于等于 0。
- 假若有end属性时,必须大于 begin。
- 假若有step属性时,step 必须大于等于 0。
Null 和 错误处理:
- 若items为null时,则表示为一空的集合对象。
- 若begin大于或等于items的大小时,则迭代不运算。
说明:
- items的内容必须为字符串;而 delims 是用来分割items中定义的字符串之字符。
  
例子:
 1、使用核心标签库输入输出方法:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>   //插入使用通用标签的指令
<body>
<c:set var= "example" value="${100+1}" scope="session"  />   //set 标签用于给变量设置值和作用域
<c:out value="${example}"/>  //out 标签显示值的结果 
<c:remove var= "example" scope="session"/> //remove 标签用于删除具有作用域的变量
</body>	
2、使用核心标签库访问JavaBean
- 创建JavaBean类Student,包含属性name和age。创建JSP页面,在其中访问JavaBean,且使用核心标签库设置属性值和读取属性值。
<%@page import="cn.javabean.Student"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL</title>
</head>
<body>
	<jsp:useBean id="stu" class="cn.javabean.Student" scope="page"></jsp:useBean>
	<c:set value="赵五" target="${stu}" property="name"></c:set>
	<c:set target="${stu}" property="age">19</c:set>
	<c:set value="张三" var="name1" scope="session"></c:set>
	<c:set var="name2" scope="session">李四</c:set>
	从Bean中获取对象person的name值:
	<c:out value="${stu.name}"></c:out>
	<br /> 从Bean中获取对象person的age值:
	<c:out value="${stu.age}"></c:out>
	<hr />
	从session中得到的值:${sessionScope.name1}
	<br /> 从session中得到的值:${sessionScope.name2}
</body>
</html>
🆗,JSTL的语法知识大致就这么多。
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号