JSTL标签库,在javaee4.0需要导入JSTL相关的jar包,在javaee5.0开始,默认已经包含了此jar包。还要需要用<%@ taglib%>指令引入标签库
3.1 介绍
JavaServer Pages Standard Tag Library
由JCP(Java Community Process)指定标准
提供给 Java Web 开发人员一个标准通用的标签函数库
和 EL 配合来取代传统直接在页面上嵌入 Java 程序(Scripting)的做法,以提高程序可读性、维护性和方便性
一般我们使用JSTL1.1以上的版本,应为从这个版本开始支持EL表达式
JSTL1.0默认不支持el表达式,不建议使用
3.2 JSTL标签库
****核心标签库 (core) --- c
国际化标签 fmt
数据库标签 sql --Servlet
XML标签 xml
JSTL函数(EL函数) el
3.3 JSTL核心标签库
<c:out> 标签用于输出一段文本内容到pageContext对象当前保存的“out”对象中。
1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 3 <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> 4 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 5 <html> 6 <head> 7 </head> 8 <body> 9 <h1>HTML转义输出</h1><hr> 10 <a href="#">xxx</a> 11 <c:out value="<a href='#'>xxx</a>" ></c:out> 12 ${fn:escapeXml('<a href="#">xxx</a>') } 13 14 <h1>输出默认值</h1><hr> 15 <% 16 String addr = "西二旗"; 17 //pageContext.setAttribute("addr",addr); 18 %> 19 <c:out value="${addr}" default="北京"></c:out> 20 ${addr == null?"北京" : addr } 21 22 <h1>输出变量</h1><hr> 23 <% 24 String name = "无双"; 25 pageContext.setAttribute("name",name); 26 %> 27 <c:out value="${name}"></c:out> 28 ${name } 29 <h1>输出常量</h1><hr> 30 <c:out value="阿斯蒂芬"></c:out> 31 ${"啦啦啦啦" } 32 </body> 33 </html>
<c:set>标签用于把某一个对象存在指定的域范围内,或者设置Web域中的java.util.Map类型的属性对象或JavaBean类型的属性对象的 属性。
1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2 <%@page import="com.itheima.domain.Person"%> 3 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 4 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 5 <html> 6 <head> 7 </head> 8 <body> 9 <h1>修改域中的JavaBean的属性的值</h1><hr> 10 <% 11 Person p = new Person(); 12 pageContext.setAttribute("p",p); 13 %> 14 <c:set target="${p}" property="name" value="克林顿"></c:set> 15 ${p.name } 16 17 18 <h1>设置或修改域中的Map的值</h1><hr> 19 <% 20 Map map = new HashMap(); 21 pageContext.setAttribute("map",map); 22 %> 23 <c:set target="${map}" property="cellphone" value="10010"></c:set> 24 <c:set target="${map}" property="cellphone" value="10086"></c:set> 25 ${map.cellphone } 26 27 <h1>设置或修改域中的属性值</h1><hr> 28 <c:set var="name" value="韦小宝"></c:set> 29 <c:set var="name" value="阿珂"></c:set> 30 ${name } 31 </body> 32 </html>
<c:remove>标签用于删除各种Web域中的属性
1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 4 <html> 5 <head> 6 </head> 7 <body> 8 <% 9 pageContext.setAttribute("name","蓝精灵"); 10 request.setAttribute("name","伏地魔"); 11 session.setAttribute("name","机器猫"); 12 application.setAttribute("name","蜡笔小新"); 13 %> 14 <c:remove var="name"/> 15 ${name } 16 </body> 17 </html>
<c:catch>标签用于捕获嵌套在标签体中的内容抛出的异常,其语法格式如下:<c:catch [var="varName"]>nested actions</c:catch>
1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 4 <html> 5 <head> 6 </head> 7 <body> 8 <c:catch var="e"> 9 <% 10 int i = 1/0; 11 %> 12 </c:catch> 13 14 ${e.message } 15 16 </body> 17 </html>
<c:if test=“”>标签可以构造简单的“if-then”结构的条件表达式
1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 4 <html> 5 <head> 6 </head> 7 <body> 8 <c:if test="${2>1}"> 9 确实是这样的.... 10 </c:if> 11 <c:if test="${2<=1}"> 12 你确定吗? 13 </c:if> 14 </body> 15 </html>
<c:choose>标签用于指定多个条件选择的组合边界,它必须与<c:when>和<c:otherwise>标签一起使用。使用<c:choose>,<c:when>和<c:otherwise>三个标签,可以构造类似 “if-else if-else” 的复杂条件判断结构。
1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 4 <html> 5 <head> 6 </head> 7 <body> 8 <% 9 int day = 7; 10 pageContext.setAttribute("day",day); 11 %> 12 <c:choose> 13 <c:when test="${day == 1}"> 14 星期一 15 </c:when> 16 <c:when test="${day == 2}"> 17 星期二 18 </c:when> 19 <c:when test="${day == 3}"> 20 星期三 21 </c:when> 22 <c:when test="${day == 4}"> 23 星期四 24 </c:when> 25 <c:when test="${day == 5}"> 26 星期五 27 </c:when> 28 <c:otherwise> 29 休息日! 30 </c:otherwise> 31 </c:choose> 32 </body> 33 </html>
<c:forEach>标签用于对一个集合对象中的元素进行循环迭代操作,或者按指定的次数重复迭代执行标签体中的内容。
1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 4 <html> 5 <head> 6 </head> 7 <body> 8 <h1>实验:遍历10到100的偶数,如果数字所在的位置是3的倍数,显示成红色</h1><hr> 9 <c:forEach begin="10" end="100" step="2" var="i" varStatus="stat"> 10 <c:if test="${stat.count % 3 == 0}"> 11 <font color="red"> 12 ${i } 13 </font> 14 </c:if> 15 <c:if test="${stat.count % 3 != 0}"> 16 <font color="blue"> 17 ${i } 18 </font> 19 </c:if> 20 </c:forEach> 21 22 <h1>循环执行指定的内容若干次</h1><hr> 23 <c:forEach begin="0" end="10" step="2" var="i" > 24 ${i }, 25 </c:forEach> 26 <h1>遍历Map中的数据</h1><hr> 27 <% 28 Map map = new LinkedHashMap(); 29 map.put("name","曹操"); 30 map.put("age","59"); 31 map.put("wife","小乔"); 32 map.put("gender","男"); 33 pageContext.setAttribute("map",map); 34 %> 35 <c:forEach items="${map}" var="entry" > 36 ${entry.key }:${entry.value }<br> 37 </c:forEach> 38 39 <h1>遍历集合中的数据</h1><hr> 40 <% 41 List list = new ArrayList(); 42 list.add("美国"); 43 list.add("中国"); 44 list.add("俄罗斯"); 45 list.add("印度"); 46 list.add("巴西"); 47 pageContext.setAttribute("list",list); 48 %> 49 <c:forEach items="${list}" var="c"> 50 ${c }<br> 51 </c:forEach> 52 53 <h1>遍历数组中的数据</h1><hr> 54 <% 55 String [] city = {"北京","上海","广州","铁岭","葫芦岛"}; 56 pageContext.setAttribute("city",city); 57 %> 58 <c:forEach items="${city}" var="c"> 59 ${c }<br> 60 </c:forEach> 61 </body> 62 </html>
<c:forTokens>用来浏览一字符串中所有的成员,其成员是由定义符号所分隔的,用来切割字符串
1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 4 <html> 5 <head> 6 </head> 7 <body> 8 <c:forTokens items="www.itheima.com" delims="." var="str"> 9 ${str }<br> 10 </c:forTokens> 11 </body> 12 </html>
<c:param>标签 在JSP页面进行URL的相关操作时,经常要在URL地址后面附加一些参数。<c:param>标签可以嵌套在<c:import>、<c:url>或<c:redirect>标签内,为这些标签所使用的URL地址附加参数。
<c:import> 标签,实现include操作
<c:url>标签用于在JSP页面中构造一个URL地址,其主要目的是实现URL重写。URL重写就是将会话标识号以参数形式附加在URL地址后面
<c:redirect>标签用于实现请求重定向