JSTL已经被继承到了javaEE的环境中,目前的版本是1.2;javaEE Libraries里的jstl-1.2.jar就是这个标签库的jar包!
核心标签库是JSTL是最重要的部分,也是在开发中最常使用到的部分,在核心标签库中主要完成的是流程控制,迭代输出等操作,主要的标签名称如下:
No | 功能分类 | 名称 | 描述 |
1 | <c:out> | 输出属性内容 | |
2 | <c:set> | 设置属性内容 | |
3 | <c:remove> | 删除指定属性 | |
4 | <c:catch> | 异常处理 | |
5 | 流程控制标签 | <c:if> | 条件判断 |
6 | <c:choose> | 多条件判断,可以设置<c:when>和<c:otherwise> | |
7 | 迭代标签 | <c:forEach> | 输出数组,集合 |
8 | <c:forTokens> | 字符串拆分及输出操作 | |
9 | 包含标签 | <c:import> | 将一个指定的路径包含到当前页进行显示 |
10 | 生成URL标签 | <c:url> | 根据路径和参数生成一个新的URL |
11 | 客户端跳转 | <c:redirect> | 客户端跳转 |
<c:out>标签:
? 用于输出内容,其语法如下:
<c:out value="hello JSTL" escapeXml="" default=""></c:out>
No | 属性名称 | EL支持 | 描述 |
1 | value | 支持 | 设置要显示的内容 |
2 | escapeXml | 支持 | 如果要显示的value内容为null,则显示default定义的内容 |
3 | default | 支持 | 是否转换字符串,例如将">"转换为">",默认为true |
测试例子:
<% pageContext.setAttribute("info","<study>"); %> 属性存在:<c:out value="${info}"></c:out><br /> 属性不存在:<c:out value="${date}" default="没有此属性内容"></c:out><br /> 属性不存在:<c:out value="${time}">没有此内容!</c:out> <br />
?<c:set>标签:
?? 主要用于将属性保存在4种属性范围内,其语法如下:
?
<c:set var="属性名称" value="属性内容" scope="[request],[response],[session],[application]" />
?本标签的属性如下:
No |
属性名称 |
支持EL |
描述 |
1 |
value |
支持 |
设置属性内容,如果为null则表示删除属性 |
2 |
var |
不支持 | 设置属性名称 |
3 |
scope |
不支持 | 设置属性的保存范围,默认保存在page范围中 |
4 |
target |
支持 | 存储的目标属性 |
测试例子:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <body> <c:set var="info" value="Hello JSTL" scope="request" /> <h3>属性内容:${info }</h3> </body>
?定义JavaBean:Info:
package com.keith.tag; public class Info { private String content; public String getContent() { System.out.println(content); return content; } public void setContent(String content) { this.content = content; } }
?jstltest.jsp:
<%@ page import="com.keith.tag.*" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <% Info info = new Info(); request.setAttribute("info",info); %> <c:set value="Hello JSTL" target="${info}" property="content" /> 属性内容:${info.content }
?刷新页面的时候,看下控制台;标签是通过反射从javaBean取值;所有在控制台可以看见输出!
<c:remove />标签:
? 其标签在程序中主要作用是删除指定范围中的属性,功能与removeAttribute()方法类似;
<c:remove var="属性名称" scope="[request],[response],[session],[application]"/>
?本标签的属性:
No | 属性名称 | 支持EL | 描述 |
1 | var | 不支持 | 要删除属性的名称,必须指定此名称 |
2 | scope | 不支持 | 删除属性的保存范围,默认保存在page范围中 |
测试页面:jstltest.jsp:
<% Info info = new Info(); request.setAttribute("info",info); %> <c:set value="Hello JSTL" target="${info}" property="content" /> 属性内容:${info.content }<br /> <c:remove var="info" scope="request"/> 属性内容:${info.content }
?<c:catch/>标签:
?? 用来处理程序中产生的异常,并进行相关的异常处理,语法:
<c:catch var="保存异常信息的属性名称"> 有可能发出异常的语句 </c:catch>
?属性:
No | 名称 | 支持EL | 描述 |
1 | var | 不支持 | 用来保存异常信息的属性名称 |
测试页面:
<c:catch var="errmsg"> <% int result=10/0; %> </c:catch> <h3>${errmsg }</h3>
?<c:if />标签:
?? 用来判断语句,与在程序中使用的if语法一样,语法如下:
<c:if test="条件" var="存储判断结果" scope="[request],[response],[session],[application]"></c:if>
?其属性:
No | 属性名称 | EL | 描述 |
1 | test | 支持 | 用于判断条件,如果条件为true,则执行标签体的内容 |
2 | var | 不支持 | 保存判断结果 |
3 | scope | 不支持 | 指定判断结果的保存范围,默认是page |
测试页面:
<c:if test="${param.name=='keith'}" var="name1" scope="page"> <h3>欢迎:${param.name } 光临!!!</h3> </c:if> <c:if test="${10<30}" var="name2"> <h3>10 小于 30</h3> </c:if>
?<c:choose/>,<c:when/>,<c:otherwise/>标签:
<c:if>:标签可以提供的功能只是针对一个条件的判断,如果现在要同时判断多个条件,可以使用<c:choose>,但<c:choose>标签只能作为<c:when>和<c:otherwise>的父标签出现;
语法:
<c:choose> 标签体内容 </c:choose>
?本标签中没有任何的属性,而且在此标签中只能有<c:when>,<c:otherwise>标签;
属性:
?No | 名称 | EL | 描述 |
1 | test | 支持 | 用于判断条件,如果条件为true,则执行标签体内容 |
测试页面:
<% pageContext.setAttribute("num",10); %> <c:choose> <c:when test="${num == 10}"> <h3>num属性的内容是10!!!</h3> </c:when> <c:when test="${num == 20}"> <h3>num的属性是20</h3> </c:when> <c:otherwise> <h3>没有一个条件满足的</h3> </c:otherwise> </c:choose>?
?