一、JSTL简介

JSTL的全称:JSP Standard Tag Libary,JSP的标准标签库

JSTL的作用:

提供给Java web开发人员一个标准通用的标签函数库。

和EL来取来传统直接在页面上嵌入Java程序的做法,以提供程序可读性、维护性和方便性。

JSTL的版本:

JSTTL的主要版本是1.0、1.1和1.2。

1.0版本EL表达式还没有纳入官方规范。

1.0和1.2版本EL表达式已经纳入官方规范。


二、<c:out>标签

输出常量和域范围中的变量(value属性,使用EL表达式)。

输出默认值(default属性)。

默认HTML标签不转义(escapeXML)。

属性名是否支持EL属性类型属性描述value√Object指定要输出的内容escapeXML√Boolean指定是否将>、<等特殊字符进行HTML编码转换后再进行输出,默认值是true。default√Object指定如果value属性的值为null时所输出的默认值


示例:输出常量

<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><title>JSTL标签库</title></head><body><c:outvalue="Hello"></c:out></body></html>


示例:输出域中的变量

<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><title>JSTL标签库</title></head><body><!--输出域中的变量--><%request.setAttribute("name","你好,世界");%><c:outvalue="${name}"></c:out></body></html>


示例:输出默认值

<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><title>JSTL标签库</title></head><body><!--输出默认值--><c:outvalue="${haha}"default="你好Java"></c:out></body></html>


示例:输出HTML标签

<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><title>JSTL标签库</title></head><body><c:outvalue="<ahref='#'>超链接</a>"></c:out></body></html>

默认情况下,输出的是字符串,所以要加上escapeXml="false"属性。

<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><title>JSTL标签库</title></head><body><c:outvalue="<ahref='#'>超链接</a>"escapeXml="false"></c:out></body></html>


三、<c:set>标签

向4个域中存入值(var value scope属性)。

设置web域中java.util.Map类型的属性对象或Javabean类型的属性对象的属性(target prperty value属性)。

属性名是否支持EL属性类型属性描述value√Object用于指定属性值var×String用于指定要设置的web域属性的名称scope×String用于指定属性所在的web域target√Object用于指定要设置属性的对象,这个对象必须是Javabean对象或java.utl.Map对象property√String用于指定当前要为对象设置的属性名称


示例:向4个web域对象存入值

<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><title>JSTL标签库</title></head><body><c:setvar="i"value="哈哈"scope="request"></c:set><c:outvalue="${i}"></c:out></body></html>

<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><title>JSTL标签库</title></head><body><!--传统方式--><%request.setAttribute("name","呵呵");%><c:outvalue="${name}"></c:out><!--jstl方式--><c:setvar="i"value="哈哈"scope="request"></c:set><c:outvalue="${i}"></c:out></body></html>


示例:修改Javabean对象存入值

<%@pageimport="cn.vo.User"%><%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><title>JSTL标签库</title></head><body><%request.setAttribute("user",newUser("你好","世界"));%><c:settarget="${user}"property="username"value="哈哈"></c:set>${user.username}</body></html>


四、<c:remove>标签

<c:remove>标签用于删除各种web域中的值。

其语法格式如下:

<c:removevar="varName"[scope={page|request|session|application}]></c:remove>

<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><title>JSTL标签库</title></head><body><!--删除属性之前--><c:setvar="i"value="哈哈"scope="page"></c:set>${i}<!--删除属性之后--><c:removevar="i"scope="page"/>${i}</body></html>


五、<c:catch>标签

<c:catch>标签用于捕获嵌套在标签体中的内容抛出的异常,其语法格式如下:

<c:catch[var='varName']></c:catch>

var属性用于标识<c:catch>标签捕获的异常对象,它将保存在page这个web域中。

<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><title>JSTL标签库</title></head><body><c:catchvar="e"><%inti=10/0;%></c:catch>${e.message}</body></html>


六、<c:if>标签

<c:if test="">标签可以构造简单的"if-then"结构的条件表达式。

属性名是否支持EL属性类型属性描述test√boolean决定是否处理标签体中的内容的条件表达式var×String用于指定将test属性的之后定结果保存到某个web域中的某个属性的名称scope×String指定将test属性的执行结果保存到那个web域中

<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><title>JSTL标签库</title></head><body><c:setvar="i"value="10"scope="page"></c:set><c:iftest="${i==10}">正确</c:if></body></html>

<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><title>JSTL标签库</title></head><body><c:setvar="i"value="10"scope="page"></c:set><!--var表示判断的结果--><c:iftest="${i==10}"var="x"scope="page">正确</c:if>${x}</body></html>


六、<c:choose>标签

<c:choose>标签用于指定多个条件选择的组合边界,它必须和<c:when>和<c:otherwise>标签一起使用。使用<c:choose>标签、<c:when>和<c:otherwise>这三个标签,可以构造类似“if-else”的复杂条件判断结构

<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><title>JSTL标签库</title></head><body><c:setvar="i"value="10"scope="page"></c:set><c:choose><c:whentest="${i==10}">i的值是10</c:when><c:otherwise>i的值不等于10</c:otherwise></c:choose></body></html>


七、<c:foreach>标签

<c:foreach>标签用于对一个集合对象中的元素进行循环迭代操作,或者按照指定的次数重复迭代标签体中的内容。

属性名是否支持EL属性类型属性描述var×String指定将当前迭代到的元素保存到page这个web域中的属性名称varstatus×String记住用于保存迭代信息的对象items√任何支持的类型将要迭代的集合对象begin√int如果指定items属性,就从集合中的第begin个元素开始进行迭代,begin的索引值从0开始编码;如果没有指定items属性,就从begin指定的值开始迭代,直到end值结束迭代end√int参看begin属性的描述step√int指定迭代的步长


示例:遍历数组

<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><title>JSTL标签库</title></head><body><!--for(Strings:str[]){}--><%String[]str={"哈哈","呵呵"};request.setAttribute("str",str);%><c:forEachvar="s"items="${str}">${s}</c:forEach></body></html>

示例:遍历List集合

<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><title>JSTL标签库</title></head><body><!--for(Strings:str[]){}--><%List<String>list=newArrayList<String>();list.add("哈哈");list.add("呵呵");list.add("嘻嘻");request.setAttribute("list",list);%><c:forEachvar="i"items="${list}">${i}</c:forEach></body></html>


示例:遍历Map集合

<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><title>JSTL标签库</title></head><body><!--for(Strings:str[]){}--><%Map<String,String>map=newHashMap<String,String>();map.put("a","aa");map.put("b","bb");request.setAttribute("map",map);%><c:forEachvar="entry"items="${map}">${entry.key}${entry.value}</c:forEach></body></html>


示例:从1到10遍历

<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><title>JSTL标签库</title></head><body><c:forEachvar="i"begin="1"end="10"step="1">${i}</c:forEach></body></html>


示例:计算从1加到100的和

<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><title>JSTL标签库</title></head><body><c:setvar="sum"value="0"scope="page"></c:set><c:forEachvar="i"begin="1"end="100"step="1"><c:setvar="sum"value="${sum+i}"scope="page"></c:set></c:forEach>${sum}</body></html>


varStatus属性

记录迭代相关的信息

属性类型意义indexnumber现在指到成员的索引countnumber总共指到成员的总数firstboolean现在指到的成员是否为第一个成员lastboolean现在指到的成员是否为最后一个成员

示例:遍历10到100的偶数,每到第三个数,显示为红色

<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><title>JSTL标签库</title></head><body><c:forEachvar="i"begin="10"end="100"step="2"varStatus="status"><c:choose><c:whentest="${status.count%3==0}"><fontcolor="red">${i}</font></c:when><c:otherwise>${i}</c:otherwise></c:choose></c:forEach></body></html>


八、<c:param>标签

在jsp页面进行URL的相关操作时,经常需要在URL地址后面附加一些参数。<c:param>标签可以嵌套在<c:import>和<c:url>以及<c:redirect>标签内,为这些标签所使用的URL地址附加参数。

<c:param>标签在为一个URL地址附加参数的时候,会自动对参数值进行URL编码。

<c:paramname=""value=""></c:param>


九、<c:import>标签

名称说明EL类型必须默认值url一文件被包含的地址√String是无context虚拟路径√String否无var存储被包含文件的内容(以String类型存入)×String否无scopevar变量的jsp范围×String否pagecharEncoding被包含文件之内容的编码格式√String否无varReader存储被包含文件的内容(以Reader类型存入)×String否无

haha.jsp

<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><title>MyJSP'haha.jsp'startingpage</title><metahttp-equiv="pragma"content="no-cache"><metahttp-equiv="cache-control"content="no-cache"><metahttp-equiv="expires"content="0"><metahttp-equiv="keywords"content="keyword1,keyword2,keyword3"><metahttp-equiv="description"content="Thisismypage"><!--<linkrel="stylesheet"type="text/css"href="styles.css">--></head><body>哈哈</body></html>

index.jsp

<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><title>JSTL标签库</title></head><body><!--起到包含的效果--><c:importurl="/haha.jsp"></c:import></body></html>


将页面包含在变量之中

<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><title>JSTL标签库</title></head><body><!--起到包含的效果--><c:importurl="/haha.jsp"var="i"scope="page"></c:import><!--将页面保存在变量i之中-->${i}</body></html>


传递参数

<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><title>MyJSP'haha.jsp'startingpage</title><metahttp-equiv="pragma"content="no-cache"><metahttp-equiv="cache-control"content="no-cache"><metahttp-equiv="expires"content="0"><metahttp-equiv="keywords"content="keyword1,keyword2,keyword3"><metahttp-equiv="description"content="Thisismypage"><!--<linkrel="stylesheet"type="text/css"href="styles.css">--></head><body>${param.haha}哈哈</body></html>

<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><title>JSTL标签库</title></head><body><!--起到包含的效果--><c:importurl="/haha.jsp"var="i"scope="page"><c:paramname="haha"value="haha"></c:param></c:import><!--将页面保存在变量i之中-->${i}</body></html>


十、<c:url>标签

<c:url>标签用于在jsp页面中构造一个URL地址,其主要目的在于实现URL重写。URL重写就是将会话标识号以参数形式附加到URL地址的后面。


其实,就是进行session的追踪。

<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><title>JSTL标签库</title></head><body><c:urlvar="i"value="/haha.jsp"></c:url><ahref="${i}">haha.jsp</a></body></html>


十一、<c:redirect>标签

用于实现请求重定向。

属性名是否支持EL属性类型属性描述url√String指定要转发或重定向到的目标资源的URL地址context√String当要使用相对路径重定向到哦同一个服务器下的其他web应用程序中的资源的时候,context属性指定其他web应用程序的名称