JSTL
全称:JSP Standard Tag Library jsp标准标签库
作用:简化jsp的代码编写。 替换 <%%> 写法。 一般与EL表达式配合
如何使用:
- 导入jar文件到工程的WebContent/Web-Inf/lib jstl.jar standard.jar
- 在jsp页面上,使用taglib 指令,来引入标签库
- 注意: 如果想支持 EL表达式,那么引入的标签库必须选择1.1的版本,1.0的版本不支持EL表达式。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
常用标签:
- c:set
var
属性指定了限制了作用域的变量的名称,scope
属性表明了该变量驻留在哪个作用域中,value
属性指定了分配给该变量的值。如果指定变量已经存在,则简单地将所指明的值赋给它。如果不存在,则创建新的限制了作用域的变量,并用该值初始化这个变量。
<!-- 声明一个对象name, 对象的值 zhangsan , 存储到了page(默认) , 指定是session -->
<c:set var="name" value="zhangsan" scope="session"></c:set>
${sessionScope.name }
- c:remove
<c:remove var="name" scope="session"></c:remove>
- c:out
<c:out value="expression" default="expression" escapeXml="boolean"/>
escapeXml
属性也是可选的。它控制当用<c:out>
标记输出诸如“<”、“>”和“&”之类的字符(在 HTML 和 XML 中具有特殊意义)时是否应该进行转义。如果将escapeXml
设置为 true,则会自动将这些字符转换成相应的 XML 实体(此处提到的字符分别转换成<
、>
和&
)
- c:if
判断test里面的表达式是否满足,如果满足,就执行c:if标签中的输出 , c:if 是没有else的。
<c:set var="age" value="18" ></c:set>
<c:if test="${ age > 26 }">
年龄大于了26岁...
</c:if>
<c:if test="${ age <= 26 }">
年龄小于了26岁...
</c:if>
- c:forEach
从1 开始遍历到10 ,得到的结果 ,赋值给 i ,并且会存储到page域中, step , 增幅为2,
<c:forEach begin="1" end="10" var="i" step="2">
${i }
</c:forEach>
<!-- items : 表示遍历哪一个对象,注意,这里必须写EL表达式。
var: 遍历出来的每一个元素用user 去接收。 -->
<c:forEach var="user" items="${list }">
${user.name } ----${user.age }
</c:forEach>
c:forEach标记的item属性所支持的集合:
注:除 <c:forEach> 以外, core 库还提供了另一个迭代标记: <c:forTokens> 。JSTL 的这个定制操作与 Java 语言的 StringTokenizer 类的作用相似。<c:forTokens> 标记除了比 <c:forEach> 的面向集合版本多一个属性之外,其它属性都相同。对于 <c:forTokens> 而言,通过 items 属性指定要标记化的字符串,而通过 delims 属性提供用于生成标记的一组定界符。和 <c:forEach> 的情形一样,可以使用 begin 、 end 和 step 属性将要处理的标记限定为那些与相应索引值相匹配的标记。
- c:choose
<c:choose>
<c:when test="expression">
body content
</c:when>
...
<c:otherwise>
body content
</c:otherwise>
</c:choose>
每个要测试的条件都由相应的 <c:when> 标记来表示,至少要有一个 <c:when> 标记。只会处理第一个其 test 值为 true 的 <c:when> 标记体内的内容。如果没有一个 <c:when> 测试返回 true ,那么会处理 <c:otherwise> 标记的主体内容。注:尽管如此, <c:otherwise> 标记却是可选的; <c:choose> 标记至多可有一个嵌套的 <c:otherwise> 标记。如果所有 <c:when> 测试都为 false ,而且又没有给出 <c:otherwise> 操作,那么不会处理任何 <c:choose> 标记的主体内容。
<c:choose>
<c:when test="${pageContext.request.scheme eq 'http'}">
This is an insecure Web session.
</c:when>
<c:when test="${pageContext.request.scheme eq 'https'}">
This is a secure Web session.
</c:when>
<c:otherwise>
You are using an unrecognized Web protocol. How did this happen?!
</c:otherwise>
</c:choose>
- c:catch
它允许在 JSP 页面内进行初级的异常处理。更确切地说,在该标记的主体内容中产生的任何异常都会被捕获并被忽略(即,不会调用标准的 JSP 错误处理机制)。然而,如果产生了一个异常并且已经指定了 <c:catch> 标记的可选属性 var ,那么会将异常赋给(具有页面作用域的)指定的变量,这使得能够在页面自身内部进行定制错误处理。
<c:catch var="name">
body content
</c:catch>