本章目标
掌握核心标签库提供的主要标签;
可以完成输出、判断、迭代等常见操作;
核心标签库
核心标签库是JSTL中最重要的部分,也是在开发中最常使用到的部分,在核心标签库里主要完成的就是流程控制、迭代输出等操作
<c:out>标签
<c:out>标签主要用于输出内容,这一点与表达式语言或表达式输出的scriptlet是一样的,此标签的语法如下:
<c:out value="打印的内容" [escapeXml="[true | false]"] [default="默认值"]/>
<c:out value="打印的内容" [escapeXml="[true | false]"]>
默认值
</c:out>
使用<c:out输出>
<%@ page language="java" contentType="text/html" pageEncoding="utf-8" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <html> <head> <title>使用 c:out 输出</title> </head> <body> <% pageContext.setAttribute("info", "<www.baidu.com>"); %> <h3>属性存在:<c:out value="${info}"></c:out></h3> <h3>属性不存在:<c:out value="${ref}" default="没有此内容"></c:out></h3> <h3>属性不存在:<c:out value="${ref}">没有此内容</c:out></h3> </body> </html>
<c:set>标签
<c:set>标签主要用来将属性保存在四种属性范围之中,语法如下:
设置属性
<c:set var="属性名称" value="属性内容" [scope="[page | request | session | application]"]/>
<c:set var="属性名称" [scope="[page | request | session | application]"]>
属性内容
</c:set>
设置对象
<c:set value="属性内容" target="属性名称" property="属性名称"/>
<c:set target="属性名称" property="属性名称">
属性内容
</c:set>
<%@ page language="java" contentType="text/html" pageEncoding="utf-8" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <html> <head> <title>通过 c:set 设置属性</title> </head> <body> <c:set var="info" value="hello chaoyi!!!" scope="request" /> <h3>属性内容:${info}</h3> </body> </html>
定义JavaBean
package cn.demo.vo; public class SimpleInfo { private String Content; public String getContent() { return Content; } public void setContent(String content) { Content = content; } }
设置属性
<%@ page language="java" contentType="text/html" pageEncoding="utf-8" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ page import="cn.demo.vo.*" %> <html> <head> <title>设置属性</title> </head> <body> <%//定义一个JavaBean SimpleInfo sim= new SimpleInfo();//实例化 SimpleInfo 对象 request.setAttribute("SimCon", sim);//设置属性 %> <!-- 将 value 的内容设置到 SimCon 对象的 content 属性中 --> <c:set value="hello chaoyi!!!" target="${SimCon}" property="content"></c:set> <h3>属性内容:${SimCon.content}</h3> </body> </html>
<c:remove>标签
<c:remove>标签在程序中的主要作用是用来删除指定范围中的属性,功能与removeAttribute()方法类似,语法如下:<c:remove var="属性名称" [scope="[page | request | session | application]"]/>
<%@ page language="java" contentType="text/html" pageEncoding="utf-8" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <html> <head> <title>删除属性</title> </head> <body> <c:set var="info" value="Hello word!!!" scope="request"></c:set> <c:remove var="info" scope="request"/> <h3>属性内容:${info}</h3> </body> </html>
<c:catch>标签
<c:catch>标签主要用来处理程序中产生的异常,并进行相关的异常处理,语法如下:
<c:catch [var="保存异常信息的属性名称"]>
有可能发生异常的语句
</c:catch>
使用JSTL进行异常处理
<%@ page language="java" contentType="text/html" pageEncoding="utf-8" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <html> <head> <title>使用 JSTL 进行异常处理</title> </head> <body> <c:catch var="errNum"> <%//在此处产生异常 int result=10/0;//被除数为0产生异常 %> </c:catch> <h3>异常信息:${errNum}</h3> </body> </html>
<c:if>标签
<c:if>标签主要是进行判断语句的使用,功能与在程序中使用的if语法是一样的,语法如下:
<c:if test="判断条件" var="储存判断结果" [scope="[page | request | session | application]"]/>
<c:if test="判断条件" var="储存判断结果" [scope="[page | request | session | application]"]>
满足条件时执行的语句
</c:if>
判断操作
<%@ page language="java" contentType="text/html" pageEncoding="utf-8" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <html> <head> <title>判断操作</title> </head> <body> <% pageContext.setAttribute("ref", "chaoyi"); %> <c:if test="${ref=='chaoyi'}" var="res1" scope="page"> <h3>欢迎 ${ref} 光临!</h3> </c:if> <c:if test="${10<30}" var="res2"> <h3>10比30小</h3> </c:if> <h3>输出判断结果一:${res1}</h3> <h3>输出判断结果二:${res2}</h3> </body> </html>
效果图:
<c:choose>、<c:when>、<c:otherwise>标签
<c:if>标签可以提供的功能只是针对于一个条件的判断,如果现在要同时判断多个条件,可以使用:<c:choose>,但是<c:choose>标签只能作为<c:when>和<c:otherwise>的父标签出现。
<c:choose>条件选择
<c:choose>
标签体内容(<c:when>、<c:otherwise>)
</c:choose>
<c:when>条件判断
<c:when test="判断条件">
满足条件时执行的语句
</c:when>
<c:otherwise>
<c:otherwise>
当所有<c:when>不满足时,执行本标签体内容
</c:otherwise>
多条件判断
<%@ page language="java" contentType="text/html" pageEncoding="utf-8" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <html> <head> <title>多条件判断</title> </head> <body> <% pageContext.setAttribute("num", 12); %> <c:choose> <c:when test="${num==10}"> <h3>num1属性的内容是10!</h3> </c:when> <c:when test="${num==20}"> <h3>num1属性的内容是20!</h3> </c:when> <c:otherwise> <h3>没有一个满足条件的!</h3> </c:otherwise> </c:choose> </body> </html>
<c:forEach>标签
<c:forEach>标签的主要功能为循环控制,可以将集合中的成员进行迭代输出,功能与Iterator接口类似,语法如下:
<c:forEach [var="每一个对象的属性名称"] items="集合" [varStatus="保存相关成员信息"] [begin="集合的开始输出位置"] [end="集合的结束输出位置"] [step="每次增长的步长"]>
具体的操作代码
</forEach>
输出数组
<%@ page language="java" contentType="text/html" pageEncoding="utf-8" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <html> <head> <title>输出数组</title> </head> <body> <%//定义数组 String info[]={"iteye","chaoyi","www.baidu.com"}; pageContext.setAttribute("ref", info);//将数组保存在 page 范围之中 %> <h3>输出全部: <c:forEach items="${ref}" var="mem"> ${mem}、 </c:forEach> </h3> <h3>输出全部(间隔为2): <c:forEach items="${ref}" var="mem" step="2"> ${mem}、 </c:forEach> </h3> <h3>输出前两个: <c:forEach items="${ref}" var="mem" begin="0" end="1"> ${mem}、 </c:forEach> </h3> </body> </html>
<%@page import="java.util.ArrayList"%> <%@page import="java.util.List"%> <%@ page language="java" contentType="text/html" pageEncoding="utf-8" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <html> <head> <title>输出集合</title> </head> <body> <% List all=new ArrayList();//实例化集合对象 all.add("iteye");//向集合中加入内容 all.add("chaoyi");//向集合中加入内容 all.add("www.baidu.com");//向集合中加入内容 pageContext.setAttribute("ref", all);//将数组保存在 page 范围中 %> <h3>输出全部: <c:forEach items="${ref}" var="mem"> ${mem}、 </c:forEach> </h3> </body> </html>
<%@page import="java.util.HashMap"%> <%@page import="java.util.Map"%> <%@ page language="java" contentType="text/html" pageEncoding="utf-8" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <html> <head> <title>输出Map集合</title> </head> <body> <% Map map=new HashMap();//实例化集合对象 map.put("it", "iteye");//向集合中加入内容 map.put("cy", "chaoyi");//向集合中加入内容 map.put("baidu", "www.baidu.com");//向集合中加入内容 pageContext.setAttribute("ref", map);//将数组保存在 page 范围中 %> <c:forEach items="${ref}" var="mem"> <h3>${mem.key} --> ${mem.value}</h3> </c:forEach> </body> </html>
<c:forTokens>标签
<c:forTokens>标签也是用于输出操作的,它更像是String类中的split()方法和循环输出的一种集合,标签的语法如下:
<c:forTokens items="输出的字符串" delims="字符串分割符" [var="存放每一个字符串变量"][varStatus="存放当前对象的相关信息"] [begin="输出位置"] [end="结束位置"] [step="输出间隔"]>
标签体内容
</c:forTokens>
使用<c:forTokens>进行输出
<%@ page language="java" contentType="text/html" pageEncoding="utf-8" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <html> <head> <title>使用 c:forTokens 进行输出</title> </head> <body> <% String info="www.baidu.com";//定义字符串,按照“.”拆分 pageContext.setAttribute("ref", info);//保证在 page 范围中 %> <h3>拆分的结果是: <c:forTokens items="${ref}" delims="." var="con"> ${con}、 </c:forTokens> </h3> <h3>拆分的结果是: <c:forTokens items="I:am:Chaoyi" delims=":" var="con"> ${con}、 </c:forTokens> </h3> </body> </html>
效果图:
<c:import>标签
<c:import>标签可以将其他页面的内容包含进来一起显示,这一点与<jsp:include>标签的功能类似,但是与<jsp:include>标签不同的是,<c:import>可以包含外部的页面,本标签语法如下:
<c:import url=“包含地址的URL” [context=“上下文路径”] [var=“保存内容的属性名称”] [scope=“[page | request | session | application]”] [charEncoding=“字符编码”] [varReader=“以Reader方式读取内容”]> 标签体内容
[<c:param name="参数名称" value="参数内容"/>]
</c:import>
导入 http://www.csszengarden.com/ 站点
<%@ page language="java" contentType="text/html" pageEncoding="utf-8" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <html> <head> <title>导入 http://www.csszengarden.com/ 站点</title> </head> <body> <c:import url="http://www.csszengarden.com/" charEncoding="utf-8"></c:import> </body> </html>
接收参数
<%@ page language="java" contentType="text/html" pageEncoding="utf-8" %> <h3>name 参数:${param.name}</h3> <h3>url 参数:${param.url}</h3>
传递参数
<%@ page language="java" contentType="text/html" pageEncoding="utf-8" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <html> <head> <title>传递参数</title> </head> <body> <c:import url="demo13Post.jsp" charEncoding="utf-8"> <c:param name="name" value="chaoyi"></c:param> <c:param name="url" value="www.baidu.com"></c:param> </c:import> </body> </html>
<c:url>标签
<c:url>标签可以直接在产生一个URL地址,语法如下:
<c:url value="操作的url" [context="上下文路径"] [var="保存的属性名称"] [scope="[page | request | session | application]"]/>
<c:url value="操作的url" [context="上下文路径"] [var="保存的属性名称"] [scope="[page | request | session | application]"]>
<c:param name="参数名称" value="参数内容"/>
</c:url>
产生URL地址
<%@ page language="java" contentType="text/html" pageEncoding="utf-8" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <html> <head> <title>产生 URL 地址</title> </head> <body> <c:url value="http://www.csszengarden.com/" var="urlinfo"> <c:param name="author" value="chaoyi"></c:param> <c:param name="logo" value="yike"></c:param> </c:url> <a href="${urlinfo}">新的地址</a> </body> </html>
<c:redirect>标签
在学习JSP内置对象的时候讲解过可以通过response.sendRedirect()操作进行客户端跳转,在JSTL中提供了一个与之类似的标签<c:redirect>,语法如下:
<c:redirect url="跳转的地址" context="上下文路径"/>
<c:redirect url="跳转的地址" context="上下文路径">
<c:param name="参数名称" value="参数内容"/>
</c:redirect>
<c:redirect>标签的属性
客户端跳转到param.jsp文件之中
<%@ page language="java" contentType="text/html" pageEncoding="utf-8" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <html> <head> <title>客户端跳转到 demo13Post.jsp 文件中</title> </head> <body> <c:redirect url="demo13Post.jsp"> <c:param name="name" value="chaoyi"></c:param> <c:param name="url" value="www.baidu.com"></c:param> </c:redirect> </body> </html>
小结
核心标签库完成了一些基本的操作功能,可以定义属性、输出、判断、迭代操作
从开发上来讲,判断、迭代操作使用较多。