本章目标
掌握核心标签库提供的主要标签;
可以完成输出、判断、迭代等常见操作;

 

核心标签库

核心标签库是JSTL中最重要的部分,也是在开发中最常使用到的部分,在核心标签库里主要完成的就是流程控制、迭代输出等操作

核心标签库_数组

 

<c:out>标签 
<c:out>标签主要用于输出内容,这一点与表达式语言或表达式输出的scriptlet是一样的,此标签的语法如下:
<c:out value="打印的内容" [escapeXml="[true | false]"] [default="默认值"]/>
<c:out value="打印的内容" [escapeXml="[true | false]"]>
  默认值
</c:out> 
<c:out>标签的属性


核心标签库_数组_02

使用<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>

效果图:

核心标签库_html_03

 

<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> 
<c:set>标签的属性


核心标签库_html_04


 

通过<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>

 效果图:

核心标签库_java_05


  

定义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>

效果图:

核心标签库_java_06


  

<c:remove>标签 
<c:remove>标签在程序中的主要作用是用来删除指定范围中的属性,功能与removeAttribute()方法类似,语法如下:<c:remove var="属性名称" [scope="[page | request | session | application]"]/>

 

<c:remove>标签的属性

核心标签库_html_07


 

删除属性

<%@ 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>

效果图:

核心标签库_html_08


  

<c:catch>标签
<c:catch>标签主要用来处理程序中产生的异常,并进行相关的异常处理,语法如下:
<c:catch [var="保存异常信息的属性名称"]>
  有可能发生异常的语句
</c:catch>

 

<c:catch>标签的属性

核心标签库_数组_09


 

使用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>

效果图:

核心标签库_html_10


  

<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>

 

<c:if>标签的属性

核心标签库_html_11

 

判断操作

<%@ 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>

 效果图:

核心标签库_数组_12


 

 <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>

 效果图:

核心标签库_java_13


 

<c:forEach>标签 
<c:forEach>标签的主要功能为循环控制,可以将集合中的成员进行迭代输出,功能与Iterator接口类似,语法如下:
<c:forEach [var="每一个对象的属性名称"] items="集合" [varStatus="保存相关成员信息"] [begin="集合的开始输出位置"] [end="集合的结束输出位置"] [step="每次增长的步长"]>
  具体的操作代码
  </forEach>

 

<c:forEach>标签的属性

核心标签库_数组_14


 

输出数组

<%@ 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>

效果图:

核心标签库_数组_15


 

输出集合

<%@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>

效果图:

核心标签库_java_16


  

输出Map集合 

<%@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>

效果图:

核心标签库_java_17


  

<c:forTokens>标签 
<c:forTokens>标签也是用于输出操作的,它更像是String类中的split()方法和循环输出的一种集合,标签的语法如下:
<c:forTokens items="输出的字符串" delims="字符串分割符" [var="存放每一个字符串变量"][varStatus="存放当前对象的相关信息"] [begin="输出位置"] [end="结束位置"] [step="输出间隔"]>
  标签体内容
  </c:forTokens>

 

<c:forTokens>标签的属性

核心标签库_java_18


 

使用<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>

 效果图:

核心标签库_html_19


 

<c:import>标签 
<c:import>标签可以将其他页面的内容包含进来一起显示,这一点与<jsp:include>标签的功能类似,但是与<jsp:include>标签不同的是,<c:import>可以包含外部的页面,本标签语法如下:
<c:import url=“包含地址的URL” [cnotallow=“上下文路径”] [var=“保存内容的属性名称”]  [scope=“[page | request | session | application]”] [charEncoding=“字符编码”]  [varReader=“以Reader方式读取内容”]>  标签体内容
     [<c:param name="参数名称" value="参数内容"/>]
  </c:import>

 

<c:import>标签的属性

核心标签库_数组_20

 

导入 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>

效果图:

核心标签库_数组_21


  

接收参数

<%@ 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>

 效果图:

核心标签库_java_22


 

<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>

<c:url>标签的属性

核心标签库_html_23

 

产生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>

效果图:

核心标签库_数组_24


 

<c:redirect>标签 
在学习JSP内置对象的时候讲解过可以通过response.sendRedirect()操作进行客户端跳转,在JSTL中提供了一个与之类似的标签<c:redirect>,语法如下:
<c:redirect url="跳转的地址" context="上下文路径"/>
<c:redirect url="跳转的地址" context="上下文路径">
  <c:param name="参数名称" value="参数内容"/>
  </c:redirect>

 

<c:redirect>标签的属性

核心标签库_java_25


 

 客户端跳转到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>

 效果图:

核心标签库_html_26


 

小结
核心标签库完成了一些基本的操作功能,可以定义属性、输出、判断、迭代操作
从开发上来讲,判断、迭代操作使用较多。