一、JSTL简介
JSTL(JSP Standard Tag Library)是JSP的标准标签库,JSTL为我们提供了一些常用的标签(if 、 if…else 、遍历 、 日期格式化等),供我们开发使用。JSTL这个标准由sun公司定义,是由Apache来实现的,使用JSTL需要导入两个jar包:
taglibs-standard-impl-1.2.1.jar
taglibs-standard-spec-1.2.1.jar
二、JSTL中的标签库
1、core:核心标签库,核心标签库是JSTL最常用的标签库,里边定义一些最常用的标签。核心标签库的名字叫core,一般使用c作为前缀,所以核心标签库我们也习惯称为c标签
2、fn:函数标签库,函数标签库需要结合EL表达式来使用,里面定义了一些字符串的操作方法。
3、fmt:格式化标签库,格式化标签库定义了一组日期、时间、数字、国际化相关的标签
4、sql:数据库标签库,定义在JSP中操作数据库的标签,已淘汰
5、xml:xml标签库,定义在JSP中解析XML文档,已淘汰
三、标签库的使用:
1、常用核心库标签
在页面中导入核心标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
a、out:向页面中输出一个对象
属性:
value:要输出到页面中的对象,可以是一个EL表达式
default:指定默认值,如果value属性为空,则显示默认值
escapeXml:是否自动转义特殊字符,默认值为true,自动转义,如果是js代码,转义后js代码将不会被执行,避免恶意代码入侵,若想让js代码执行,将该值设置为false即可
例子:
<c:out value="${code}" escapeXml="true"></c:out>
<c:out value="${username}" default="菩提老祖"></c:out>
b、set:向域中设置一个属性
属性:
var:向域中设置的属性的名字
value:向域中设置的属性的值
scope:指定要放入属性的域,可选值page、request、session、application,默认值page
例子:
<c:set var="hello" value="world" scope="request"></c:set>
c、remove:从指定域中移除一个指定属性
属性:
var:要移除的属性的名字
scope:要移除的属性所在的域,可选值 page、request、session、application,如果不指定,则会移除所有域中的该名称的属性
例子:
<c:remove var="hello" scope="request"/>
d、if:作用和Java中的if类似
属性:
test:接收一个boolean值,如果该值为true,则标签体执行,否则不执行
例子:
<c:if test="${empty param.username}">
<h3>你怎么不输入用户名!请输入username属性!</h3>
</c:if>
e、choose when otherwise:和java中 if … else类似
choose标签作为when和otherwise的父标签出现,when和otherwise不能单独使用
when
属性:
test:接收一个boolean值,如果该值为true,则标签体执行,否则不执行
otherwise:如果choose标签中的所有when标签都没有执行,则会执行otherwise中的标签体
choose标签中可以有多个when标签,但是只能有一个otherwise,多个标签(when和otherwise)中只会有一个标签执行
例子:
<c:choose>
<c:when test="${param.score==100 }">
<h3>恭喜您!考了100分!</h3>
</c:when>
<c:when test="${param.score>=90 }">
<h3>您的成绩为A级!</h3>
</c:when>
<c:otherwise>
<h3>你不及格!</h3>
</c:otherwise>
</c:choose>
f、forEach:和Java中的for循环类似,可以遍历一个组数,也可以遍历一个集合
属性:
begin :指定遍历开始的位置,begin值不能小于0
end :指定遍历结束的位置
step : 指定遍历的步长
var :指定属性名
例子1:遍历数字
注意
:forEach中定义的变量默认在pageContext域中,无论放在哪个域中只要出了该标签就无效
例子2:遍历集合
属性:
items:指定要遍历的集合
var : 指定属性名
varStatus :指定遍历状态的属性名???
current 返回一个Object代表当前遍历的对象
index 获取当前的索引
count 用来记录当前遍历的数量
first和last用来判断当前对象是否为第一个或最后一个
遍历List:
<c:forEach items="${list}" var="hero">
${hero } <br />
</c:forEach>
遍历Map:
<c:forEach items="${map}" var="user">
${user.key } -- ${user.value } <br />
</c:forEach>
g、url:创建一个完整的路径,可以自动为绝对路径加上项目名
属性:
value:要设置的路径
var:将路径保存到域中的属性名,如果不设置该属性,则地址会直接输出
例子: 获取标签中的url:${pageScope.url}
<c:url value="/index.jsp" var="url" scope="page">
<c:param name="username" value="sunwukong"></c:param>
</c:url>
h、redirect:发起请求的重定向
属性:
url :指定重定向的目标地址,标签会自动加上项目名
例子:
<c:redirect url="/index.jsp" var="url">
<c:param name="username" value="孙悟空"></c:param>
<c:param name="age" value="18"></c:param>
</c:redirect>
i、param:在url和redirect标签中为路径设置请求参数
属性:
name :请求参数的名字
value :请求参数的值
例子:
<c:param name="age" value="18"></c:param>
2、函数标签库
在页面中导入函数标签库
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
函数标签库需要结合EL表达式来使用,里面定义了一些字符串的操作方法:${fn:方法}
例子:
<!-- 判断前一个字符串是否包含后一个 -->
fn:contains : ${fn:contains('hello','He') } <br />
<!-- 判断前一个字符串是否包含后一个忽略大小写 -->
fn:containsIgnoreCase : ${fn:containsIgnoreCase('hello','He') }<br />
<!-- 判断前一个字符串是否以后一个结尾 -->
fn:endsWith : ${fn:endsWith("hello","lo") }<br />
<!-- 自动转义特殊字符 -->
fn:escapeXml : ${fn:escapeXml("<script>") }<br />
<!-- 将数组中的元素以指定的字符串连接 -->
fn:join : ${fn:join(strs,"-") }<br />
<!-- 以指定字符串将一个字符串拆分为一个String数组 -->
fn:split : ${fn:split("a-b-c-e-f","-")[2]}<br />//将字符串以-拆开,并取其中的第三个字符