首页 > 代码库 > JSTL 标签库 使用
JSTL 标签库 使用
标签库概要:
一、C标签库介绍
1.1、<c:> 核心标签库
JSTL 核心标签库(C标签)标签共有13个,功能上分为4类:
1.表达式控制标签:out、set、remove、catch
2.流程控制标签:if、choose、when、otherwise
3.循环标签:forEach、forTokens
4.URL操作标签:import、url、redirect
二、表达式控制标签
2.1、out标签
<c:out value="" escapeXml="" default=""></c:out>
功能: <c:out>主要用来显示数据的内容
共有3个属性value是显示的内容,escapXML是否要转义true/false,设置为true将按原来的内容输出,flase将由浏览器解析,default设置默认值
value属性是必添的,escapeXml属性是true时,不解析特殊字符,false时,解析特殊 字符
<c:out> 用来显示数据对象(字符串、表达式)的内容或结果:
<c:out value="http://www.mamicode.com/<这是超连接>" escapeXml="false" default="默认值"></c:out><br><c:out value="http://www.mamicode.com/<这是超连接>" escapeXml="true" default="默认值"></c:out>
2.2、set标签
用于将变量存取于 JSP 范围中或 JavaBean 属性中
功能: <c:set>主要用来将变量存储至JSP 范围中或是 JavaBean 的属性或Map 对象中。 属性列表:
用户类
package com.pb.entity;/** * 用户类 * * @author 森林森 * */public class User { // 用户名,密码和年龄 private String uname; private String pwd; // 封装 public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } }
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><<jsp:useBean id="news" class="com.pb.news.entity.News" scope="page"></jsp:useBean><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><c:out value="http://www.mamicode.com/<这是超连接>" escapeXml="false" default="默认值"></c:out><br><c:out value="http://www.mamicode.com/<这是超连接>" escapeXml="true" default="默认值"></c:out><br><c:set var="name1" value="http://www.mamicode.com/张三" scope="page"></c:set><c:set var="name2" scope="request">李四</c:set><c:set target="${news }" property="title" value="http://www.mamicode.com/下雪了"></c:set><c:set target="${news }" property="id" >32</c:set><ul><li>从page中重到的值${pageScope.name1 }</li><li>从page中重到的值${name2 }</li><li>从java中获取的值title:${news.title }</li><li>${news.id }</li></ul></body></html>
2.3、remove标签
主要用来从指定的 jsp 范围内移除指定的变量。功能:主要负责移除变量
<c:remove var="变量名" [scope="page|request|session|application"]></c:remove>
<c:remove var="username" scope="session"/>${sessionScope.username}—输不出结果
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><<jsp:useBean id="news" class="com.pb.news.entity.News" scope="page"></jsp:useBean><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><c:out value="http://www.mamicode.com/<这是超连接>" escapeXml="false" default="默认值"></c:out><br><c:out value="http://www.mamicode.com/<这是超连接>" escapeXml="true" default="默认值"></c:out><br><c:set var="name1" value="http://www.mamicode.com/张三" scope="page"></c:set><c:set var="name2" scope="request">李四</c:set><c:set target="${news }" property="title" value="http://www.mamicode.com/下雪了"></c:set><c:set target="${news }" property="id" >32</c:set><ul><li>从page中重到的值${pageScope.name1 }</li><li>从page中重到的值${name2 }</li><li>从java中获取的值title:${news.title }</li><li>${news.id }</li><c:remove var="name1" scope="page"/><c:remove var="name2" scope="request"/><li>从page中重到的值${pageScope.name1 }</li><li>从page中重到的值${name2 }</li></ul></body></html>
2.4、catch标签
<c:catch> 用来处理 JSP 页面中产生的异常,并存储异常信息
<c:catch var="name1">
容易产生异常的代码
</c:catch>
如果抛异常,则异常信息保存在变量 name1 中。
2.5、综合以上
package com.pb.entity;/** * 用户类 * * @author 森林森 * */public class User { // 用户名,密码和年龄 private String uname; private int pwd; // 封装 public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } public int getPwd() { return pwd; } public void setPwd(int pwd) { this.pwd = pwd; } }
jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><jsp:useBean id="user" class="com.pb.entity.User" scope="page"></jsp:useBean><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><!-- c:set标签普通使用 --><c:set var="name1" value="http://www.mamicode.com/张三" scope="request"></c:set><c:set var="name2" value="http://www.mamicode.com/李四" scope="page"></c:set><!-- c:set标签java Bean使用 --><c:set target="${user }" property="uname" value="http://www.mamicode.com/张三丰"></c:set><c:set target="${user }" property="pwd" value="http://www.mamicode.com/108101" ></c:set><!-- 输出里作用域可以 省略 -->name1的值:<c:out value="http://www.mamicode.com/${requestScope.name1 }"></c:out><br>name2的值:<c:out value="http://www.mamicode.com/${pageScope.name2 }"></c:out><br>javaBean引用uname的值:<c:out value="http://www.mamicode.com/${user.uname }"></c:out><br>javaBean引用pwd的值:<c:out value="http://www.mamicode.com/${user.pwd }"></c:out><br><!-- c:remove --><c:remove var="name1"/>name1的值:<c:out value="http://www.mamicode.com/${name1 }"></c:out><br><!-- 异常 --><!-- 以下如不加c:catch,页面将无法打开 --><c:catch var="c1"><c:set target="${user }" property="age" value="http://www.mamicode.com/18"></c:set>javaBean中没有age属性:<c:out value="http://www.mamicode.com/${user.age }"></c:out></c:catch><!-- 页面并没有显示 ,catch中的内容--><!-- 输出异常 --><c:out value="http://www.mamicode.com/${c1 }"></c:out></body></html>
三、流程控制标签
3.1、if标签
功能:主要用于进行if 判断,如果为true,则输出标签体中的内容
<!-- c:set标签普通使用 --><c:set var="name1" value="http://www.mamicode.com/张三" scope="request"></c:set><c:set var="name2" value="http://www.mamicode.com/李四" scope="page"></c:set><!-- c:set标签java Bean使用 --><c:set target="${user }" property="uname" value="http://www.mamicode.com/张三丰"></c:set><c:set target="${user }" property="pwd" value="http://www.mamicode.com/108101" ></c:set><!-- 输出里作用域可以 省略 --><c:if test="${name1==‘李四‘ }" var="q">name1的值为:${name1 }</c:if>q的值:<c:out value="http://www.mamicode.com/${q }"></c:out><br><c:if test="${name2==‘李四‘ }" var="flag">nam2的值:${name2 }</c:if>flag的值:<c:out value="http://www.mamicode.com/${flag }"></c:out><br><c:if test="${user.uname==‘张三丰‘ }" var="flag">javaBean中user.uname的值:${user.uname }</c:if>flag的值:<c:out value="http://www.mamicode.com/${flag }"></c:out><br><c:if test="${user.pwd eq 123}" var="flag">javaBean中user.pwd的值:${user.pwd }</c:if>flag的值:<c:out value="http://www.mamicode.com/${flag }"></c:out><br>
3.2、choose、when、otherwise
三个标签通常嵌套使用,第一个标签在最外层,最后一个标签在嵌套中只能使用一次
和java中switch 类似
switch--choose
case---when
default--otherwise
以上关系
也和多重if--else if--else if ---else功能类似
<c:choose>、<c:when>和<c:otherwise>标签的使用必须符合以下语法规则:
<c:when>和<c:otherwise>不能单独使用,它们必须位于<c:choose>父标签中。
在<c:choose>标签中可以包含一个或多个<c:when>标签。
在<c:choose>标签中可以不包含<c:otherwise>标签。
在<c:choose>标签中如果同时包含<c:when>和<c:otherwise>标签,那么<c:otherwise>必须位于<c:when>标签之后。
<%@page import="java.util.Random"%><%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><jsp:useBean id="user" class="com.pb.entity.User" scope="page"></jsp:useBean><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>choose、when和otherwise标签应用示例</title></head><body><%//随机产生100以内的随机整数 Random r=new Random(); int i=r.nextInt(100); //将结果放在请求中 request.setAttribute("i", i); %><c:choose><c:when test="${i>90 }">i的值大于90!</c:when><c:when test="${i>80 }">i的值大于80!</c:when><c:when test="${i>70 }">i的值大于70!</c:when><c:when test="${i>60 }">i的值大于60!</c:when><c:when test="${i>50 }">i的值大于50!</c:when><c:otherwise>i的值小于50,不算在内!</c:otherwise></c:choose></body></html>
多次刷新页面可以看到不同的结果
四、循环标签
4.1、forEach
功能: <c:forEach>为循环控制,它可以将数组,集合(Collection)中的成员循序浏览一 遍。 属性列表:
status.index 输出当前行的索引号
status.coun 输出已遍历的行数
status.first 输出当前行是否是第一行
status.last 输出当前行是否是最后一行
示例
<%@page import="java.util.HashMap"%><%@page import="java.util.Enumeration"%><%@page import="java.util.Vector"%><%@page import="java.util.ArrayList"%><%@page import="com.pb.entity.User"%><%@page import="java.util.List"%><%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><jsp:useBean id="user" class="com.pb.entity.User" scope="page"></jsp:useBean><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>forEach标签应用示例</title></head><body><% List<User>users= new ArrayList<User>(); for(int i=0;i<5;i++){ User u=new User(); u.setUname("T"+i); u.setPwd("00"+i); users.add(u); } request.setAttribute("users", users);%><table border="1" align="center"><tr> <th>用户名</th> <th>密码</th> <th>当前行的索引</th> <th>已遍历的行数</th><th>是否第一行</th> <th>是否最后一行</th> </tr><c:forEach var="user" items="${users }" varStatus="status"><tr> <td><c:out value="http://www.mamicode.com/${user.uname }"></c:out></td> <!-- 用户名 --><td><c:out value="http://www.mamicode.com/${user.pwd }"></c:out></td> <!-- 密码 --><td>${status.index }</td> <!--输出当前行的索引号--><td>${status.count }</td><!--输出已遍历的行--><td>${status.first }</td> <!--输出当前行是否是第一行--><td>${status.last }</td> <!--输出当前行是否是最后一行--></tr></c:forEach></table><br><table border="1" align="center"><tr> <th>用户名</th> <th>密码</th> <th>当前行的索引</th> <th>已遍历的行数</th><th>是否第一行</th> <th>是否最后一行</th> </tr><!-- 指定开始和结束位置 --><c:forEach var="user" items="${users }" varStatus="status" begin="0" end="2"><tr> <td><c:out value="http://www.mamicode.com/${user.uname }"></c:out></td> <!-- 用户名 --><td><c:out value="http://www.mamicode.com/${user.pwd }"></c:out></td> <!-- 密码 --><td>${status.index }</td> <!--输出当前行的索引号--><td>${status.count }</td><!--输出已遍历的行--><td>${status.first }</td> <!--输出当前行是否是第一行--><td>${status.last }</td> <!--输出当前行是否是最后一行--></tr></c:forEach></table><br><%--通过<c:forEach>输出从1到10的数据不设置步上,默认为1--%><c:forEach var="i" begin="1" end="10">${i }</c:forEach><br><%--通过<c:forEach>输出从1到10的数据--%><!--设置步长为2,只输出奇数 --><c:forEach var="i" begin="1" end="10" step="2">${i }</c:forEach><br><%--通过<c:forEach>输出从1到10的数据--%><!-- 能过c:if判断只输入偶数 --><c:forEach var="i" begin="1" end="10"><c:if test="${i%2==0 }">${i }</c:if></c:forEach><br></body></html>
<%@page import="java.util.HashMap"%><%@page import="java.util.Enumeration"%><%@page import="java.util.Vector"%><%@page import="java.util.ArrayList"%><%@page import="com.pb.entity.User"%><%@page import="java.util.List"%><%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><jsp:useBean id="user" class="com.pb.entity.User" scope="page"></jsp:useBean><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>forEach标签应用示例</title></head><body><% List<User>users= new ArrayList<User>(); for(int i=0;i<5;i++){ User u=new User(); u.setUname("T"+i); u.setPwd("00"+i); users.add(u); } request.setAttribute("users", users);%><table border="1" align="center"><tr> <th>用户名</th> <th>密码</th> <th>当前行的索引</th> <th>已遍历的行数</th><th>是否第一行</th> <th>是否最后一行</th> </tr><c:forEach var="user" items="${users }" varStatus="status"><tr> <td><c:out value="http://www.mamicode.com/${user.uname }"></c:out></td> <!-- 用户名 --><td><c:out value="http://www.mamicode.com/${user.pwd }"></c:out></td> <!-- 密码 --><td>${status.index }</td> <!--输出当前行的索引号--><td>${status.count }</td><!--输出已遍历的行--><td>${status.first }</td> <!--输出当前行是否是第一行--><td>${status.last }</td> <!--输出当前行是否是最后一行--></tr></c:forEach></table><br><table border="1" align="center"><tr> <th>用户名</th> <th>密码</th> <th>当前行的索引</th> <th>已遍历的行数</th><th>是否第一行</th> <th>是否最后一行</th> </tr><!-- 指定开始和结束位置 --><c:forEach var="user" items="${users }" varStatus="status" begin="0" end="2"><tr> <td><c:out value="http://www.mamicode.com/${user.uname }"></c:out></td> <!-- 用户名 --><td><c:out value="http://www.mamicode.com/${user.pwd }"></c:out></td> <!-- 密码 --><td>${status.index }</td> <!--输出当前行的索引号--><td>${status.count }</td><!--输出已遍历的行--><td>${status.first }</td> <!--输出当前行是否是第一行--><td>${status.last }</td> <!--输出当前行是否是最后一行--></tr></c:forEach></table><br><%--通过<c:forEach>输出从1到10的数据不设置步上,默认为1--%><c:forEach var="i" begin="1" end="10">${i }</c:forEach><br><%--通过<c:forEach>输出从1到10的数据--%><!--设置步长为2,只输出奇数 --><c:forEach var="i" begin="1" end="10" step="2">${i }</c:forEach><br><%--通过<c:forEach>输出从1到10的数据--%><!-- 能过c:if判断只输入偶数 --><c:forEach var="i" begin="1" end="10"><c:if test="${i%2==0 }">${i }</c:if></c:forEach><br><%--通过<c:forEach>遍历数组,枚举,集合等--%><%int[]intarr=new int[]{10,20,30,40,50}; String[]strarr=new String[]{"I","am","a","handsome","boy"}; Vector v=new Vector(); v.add("This");v.add("is"); v.add("a"); v.add("Enumeration");v.add("example"); Enumeration e=v.elements(); HashMap h=new HashMap(); h.put("hello","0"); h.put("hello1","1"); h.put("hello2","2"); h.put("hello3","3"); h.put("hello4","4"); request.setAttribute("intarr",intarr); request.setAttribute("strarr",strarr); request.setAttribute("e",e); request.setAttribute("h",h);%><h3>遍历整形数组</h3><%--遍历整形数组--%><c:forEach items="${intarr }" var="i"><c:out value="http://www.mamicode.com/${i }"></c:out></c:forEach><h3>--遍历字符串数组--</h3><c:forEach items="${strarr }" var="s"><c:out value="http://www.mamicode.com/${s }"></c:out></c:forEach><h3>--遍历枚举--</h3> <%--遍历枚举--%><c:forEach items="${e }" var="e"><c:out value="http://www.mamicode.com/${e }"></c:out></c:forEach><h3>--遍历HashMap--</h3> <%--遍历HashMap--%><c:forEach items="${h }" var="h"><c:out value="http://www.mamicode.com/${h.key }"></c:out>=<c:out value="http://www.mamicode.com/${h.value }"></c:out></c:forEach></body></html>
4.2、forTokens
需求,对带有相同符合格式内容进行分割输出,例如,varstr="1,2,3,4,5,6"
<%@ 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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>c:forTokens 标签实例</title></head><body><c:forTokens items="张三丰、张无忌、张翠册、殷素素" delims="、" var="item" varStatus="status"><h4>元素的值:<c:out value="http://www.mamicode.com/${item }"></c:out><br></h4>当前索引<c:out value="http://www.mamicode.com/${status.index }"></c:out><br>当前次数<c:out value="http://www.mamicode.com/${status.count }"></c:out><br>是否为第一个<c:out value="http://www.mamicode.com/${status.first }"></c:out><br>是否为最后一个<c:out value="http://www.mamicode.com/${status.last }"></c:out><br></c:forTokens></body></html>
五 、URL操作标签
5.1、import
<c:import>标签提供了所有<jsp:include>行为标签所具有的功能,同时也允许包含绝对URL。
使用<c:import>标签可以包含一个服务器中不同的网页内容。
功能: <c:import>可以把其他静态或动态文件包含至本身JSP 网页。
注意:<c:import>与<jsp:include>的区别
<jsp:include>只能包含和自己同一个Web 应用程序下的文件;
而<c:import>除了能 包含和自己同一个Web 应用程序的文件外,亦可以包含不同Web 应程序或者是其 它网站的文件
<h4 align="center">绝对路径引入</h4><c:import url="http://www.baidu.com" var="b"></c:import><c:out value="http://www.mamicode.com/${b }"></c:out>
换成EL表达输出则可以显示正确
<h4 align="center">绝对路径引入</h4><c:import url="http://www.baidu.com" var="b"></c:import>${b }
相对路径引入
<h2 align="center">同一目录相对路径引用</h2><!-- 同一文件下的引用 --><c:import url="./cfortaoken.jsp"></c:import><hr><h2 align="center">不同目录相对路径引用</h2><%--<c:import>标签+var属性+<c:param>标签 三者组合使用 --%><c:import url="/test/cif.jsp"></c:import><hr><c:import url="/jsp/test.jsp" ><c:param name="name" value="http://www.mamicode.com/张三丰"></c:param></c:import><h2>传参数</h2><c:import url="http://www.baidu.com/s"> <!--等于在baidu中搜索oracle--><c:param name="wd" value="http://www.mamicode.com/oracle"></c:param></c:import>
Url为本地的,并不是远程的
5.2<c:param> 标签
<c:param>标签用于在<c:import>和<c:url>标签中指定参数,而且与URL编码相关。
在<c:param>标签内,name属性表明参数的名称,value属性表明参数的值
属性 | 描述 | 是否必要 | 默认值 |
name | URL中要设置的参数的名称 | 是 | 无 |
value | 参数的值 | 否 | Body |
<c:import url="/jsp/test.jsp"><c:param name="uname1" value="http://www.mamicode.com/john"></c:param><c:param name="uname2" value="http://www.mamicode.com/Hello"></c:param></c:import><hr><c:url value="http://www.mamicode.com/jsp/test.jsp" var="pp"><c:param name="id" value="http://www.mamicode.com/123"></c:param><c:param name="name" value="http://www.mamicode.com/java"></c:param></c:url><hr><br>${pp }
5.3、url标签
功能: <c:url>主要用来产生一个URL
<h3>c url标签实例</h3><%--生成一个URL变量 --%><c:url value="http://www.baidu.com" var="conn" scope="page"></c:url><%--输出变量 --%><a href="http://www.mamicode.com/
5.4、redirect标签
<c:redirect>标签通过自动重写URL来将浏览器重定向至一个新的URL,它提供内容相关的URL,并且支持c:param标签。
该标签用来实现请求的重定向。例如,对用户输入的用户名和密码进行验证,不成功则重定向到登录页面。或者实现Web应用不同模块之间的衔接
c:redirect标签有如下属性:
属性 | 描述 | 是否必要 | 默认值 |
url | 目标URL | 是 | 无 |
context | 紧接着一个本地网络应用程序的名称 | 否 | Body |
<!--重定向外部URL--><c:redirect url="http://www.baidu.com/"></c:redirect><%--相对路径本地重定向并转参 --%><c:redirect url="/jsp/test.jsp"><c:param name="uname1" value="http://www.mamicode.com/张三丰"></c:param><c:param name="uname2" value="http://www.mamicode.com/张无忌"></c:param></c:redirect>
JSTL 标签库 使用