JSTL 叫做 JSP 标准标签库,来控制 JSP 页面的输出,可以替代页面中用于控制输出的 Java 脚本(<% ...; %>)
- 1.. 导入jstl
导包jstl.jar、standard.jar
使用 taglib 指令导入标签库:
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
prefix="c"
:指定标签库的前缀,这个前缀可以随便给值,但大家都会在使用 core 标签库时指定前缀为 c;
uri="http://java.sun.com/jstl/core"
:指定标签库的 uri,它不一定是真实存在的网址,但它可以让 JSP 找到标签库的描述文件;
2.. core 标签
1) out
<c:out>
标签主要是用来输出数据对象(字符串、表达式)的内容或结果。
<c:out value=” 数据对象” [default=” 默认值”]/>
<c:out value=” 数据对象” > 默认值 </c:out>
2) set
<c:set>
标签用于把某一个对象存在指定的域范围内,或者将某一个对象存储到 Map 或者 JavaBean 对象中。
a)
<c:set value=” 值 1” var=”name1” [scope=”…”]/>
含义:把一个变量名为 name1 值为 “值 1” 的变量存储在指定的 scope 范围内。
b)
<c:set var=”name2” [scope=”page|request|session|application”]>
值 2
</c:set>
含义:把一个变量名为 name2,值为值 2 的变量存储在指定的 scope 范围内。
c)
<c:set value=” 值 3” target=”对象” property=”属性名”/>
含义:把一个值为 “值 3” 赋值给指定的 JavaBean 的属性名。相当与 setter() 方法。
d)
<c:set target=”JavaBean 对象” property=” 属性名”>
值 4
</c:set>
含义:把一个值 4 赋值给指定的 JavaBean 的属性名。
从功能上abcd的效果是一样的,只是把 value 值放置的位置不同。
ab是向 scope 范围内存储一个值,cd是给指定的 JavaBean 赋值
3) remove
<c:remove>
标签主要用来从指定的 JSP 范围内移除指定的变量
<c:remove var=” 变量名” [scope=”page|request|session|application”]/>
4) if
if
标签的 test 属性必须是一个 boolean 类型的值,如果 test 的值为 true,那么执行 if 标签的内容,否则不执行。
<c:set var="a" value="hello"/>
<c:if test="${not empty a}">
<c:out value="${a}"/>
</c:if>
5) choose
choose
标签对应 Java 中的 if/else if/else 结构。when 标签的 test 为 true 时,会执行这个 when 的内容。当所有 when 标签的 test 都为 false 时,才会执行 otherwise 标签的内容。
<c:set var="score" value="${param.score}"/>
<c:choose>
<c:when test="${score> 100 || score < 0}"> 错误分数:${score}</c:when>
<c:when test="${score>= 90 }">A 级 </c:when>
<c:when test="${score>= 80 }">B 级 </c:when>
<c:otherwise>C 级 </c:otherwise>
</c:choose>
6) forEach
forEach
标签有多种两种使用方式:
使用循环变量,指定开始和结束值,类似 for(int i = 1; i <= 10; i++) {};
循环遍历集合,类似 for(Object o : 集合);
循环变量:
<c:set var="sum" value="0" />
<c:forEach var="i" begin="1" end="10">
<c:set var="sum" value="${sum + i}" />
</c:forEach>
<c:out value="sum = ${sum}"/>
<c:set var="sum" value="0" />
<c:forEach var="i" begin="1" end="10" step ="2">
<c:set var="sum" value="${sum + i}" />
</c:forEach>
<c:out value="sum = ${sum}"/>
遍历集合或数组方式:
<%
String[] names = {"zhangSan", "liSi", "wangWu", "zhaoLiu"};
pageContext.setAttribute("ns", names);
%>
<c:forEach var="item" items="${ns}">
<c:out value="name: ${item}"/><br/>
</c:forEach>
遍历 List:
<%
List<String> names = new ArrayList<String>();
names.add("zhangSan");
names.add("liSi");
names.add("wangWu");
names.add("zhaoLiu");
pageContext.setAttribute("ns", names);
%>
<c:forEach var="item" items="${ns}">
<c:out value="name: ${item}"/><br/>
</c:forEach>
遍历 Map:
<%
Map<String,String> stu = new LinkedHashMap<String,String>();
stu.put("number", "N_1001");
stu.put("name", "zhangSan");
stu.put("age", "23");
stu.put("sex", "male");
pageContext.setAttribute("stu", stu);
%>
<c:forEach var="item" items="${stu}">
<c:out value="${item.key}: ${item.value }"/><br/>
</c:forEach>
varStatus
属性:
这个属性用来指定接收 “循环状态” 的变量名,例如:<forEach varStatus=”vs” …/>
,这时就可以使用 vs 这个变量来获取循环的状态了。
• count:int 类型,当前以遍历元素的个数;
• index:int 类型,当前元素的下标;
• first:boolean 类型,是否为第一个元素;
• last:boolean 类型,是否为最后一个元素;
• current:Object 类型,表示当前项目。
<c:forEach var="item" items="${ns}" varStatus="vs">
<c:if test="${vs.first}"> 第一行:</c:if>
<c:if test="${vs.last}"> 最后一行:</c:if>
<c:out value="第 ${vs.count} 行:"/>
<c:out value="[${vs.index}]:"/>
<c:out value="name: ${vs.current}"/><br/>
</c:forEach>
7) URL
a)
<c:import>
标签
可以把其他静态或动态文件包含到本 JSP 页面,与<jsp:include>
的区别为:<jsp:include >
只能包含同一个 web 应用中的文件。而< c:import >
可以包含其他 web 应用中的文件,网络上的资源。
<c:import
url=”url”
[context=”context”]
[value=”value”]
[scope=”page|request|session|application”]
[charEncoding=”encoding”]/>
<c:import url="http://localhost:8080/day07/one">
<c:param name="school" value="testschool"></c:param>
</c:import>
- b)
<c:url> 、<c:redirect>
标签
两者类似,实现 URL 重写、重定向
<c:url value="http://www.baidu.com" var="paramUrl">
<c:param name="userName" value="root"/>
<c:param name="pwd">123456</c:param>
</c:url>
c)
<c:param>
标签
在 JSP 页面进行 URL 的相关操作时,经常要在 URL 地址后面附加一些参数。<c:param>
标签可以嵌套在< c:import>、<c:url > 或 < c:redirect >
标签内,为这些标签所使用的 URL 地址附加参数8) 其它
- a)
catch
<c:catch>
标签用于捕获嵌套在标签体中的内容抛出的异常。
- a)
<c:catch [var="varName"]> 容易产生异常的代码 </c:catch>
var 为捕获的异常对象,保存在 page 域
fmt 常用标签
fmt 标签库是用来格式化输出的,通常需要格式化的有时间和数字。格式化时间
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
......
<%
Date date = new Date();
pageContext.setAttribute("d", date);
%>
<fmt:formatDate value="${d}" pattern="yyyy-MM-dd HH:mm:ss"/>
2) 格式化数字
<%
double d1 = 3.5;
double d2 = 4.4;
pageContext.setAttribute("d1", d1);
pageContext.setAttribute("d2", d2);
%>
<fmt:formatNumber value="${d1}" pattern="0.00"/><br/>
<fmt:formatNumber value="${d2}" pattern="#.##"/>
4.. function
- 1) 函数
函数 描述
2) 语法
<c:set var="str" value="stringStRiNg"/>
<c:set var="t" value="tr"/>
<c:out value="${str} = ${fn:length(str)}"/>
<c:out value="${fn:toLowerCase(str)}"/>
<c:out value="${fn:toUpperCase(' ')}"/>
<c:out value="${fn:substring('asdfefg',0,3)}"/><br>
<c:out value="${fn:trim(' sd dew e ')}"/><Br>
<c:out value="d sd dew e"/><Br>
<c:out value="${fn:replace(str,'ing','IN')}"/><Br>