JSP标准标签库(JSTL)
Java Standard Tag Library是apache的一个开源标签组件。http://tomcat.apache.org/taglibs/standard/
JSTL主要标签分类
JSTL | 标签名称 | 标签配置文件 | 描述 |
---|---|---|---|
核心标签库 | c | c.tld | 定义了属性管理、迭代、判断、输出 |
SQL标签库 | sql | sql.tld | 定义了数据库查询操作 |
XML标签库 | xml | x.tld | 定义了操作XML数据 |
函数标签库 | fn | fn.tld | 提供了一些常用的操作函数,例如:字符串函数 |
I18N格式标签库 | fmt | fmt.tld | 格式化数据 |
标签的开发需要*.tld
文件和所有的标签支持类,这些tld文件可以直接从jar
包中拷贝出来,存放到项目的WEB-INF目录。
<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="c" uri="/WEB-INF/c.tld"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>hello_jstl.jsp</title>
</head>
<body>
<!-- 此标签就是一个输出,等同于out.print()操作 -->
<c:out value="这是第一个JSTL"></c:out>
</body>
</html>
如果觉得直接在jsp页面中使用标签的绝对路径不太方便,我们也可以在web.xml
中进行以下的配置:
<!-- 配置好标签库,在jsp页面中可以直接使用映射路径完成 -->
<jsp-config>
<taglib>
<taglib-uri>http://127.0.0.1/javaweb/jstl/core</taglib-uri>
<taglib-location>/WEB-INF/c.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://127.0.0.1/javaweb/jstl/fmt</taglib-uri>
<taglib-location>/WEB-INF/fmt.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://127.0.0.1/javaweb/jstl/fn</taglib-uri>
<taglib-location>/WEB-INF/fn.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://127.0.0.1/javaweb/jstl/sql</taglib-uri>
<taglib-location>/WEB-INF/sql.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://127.0.0.1/javaweb/jstl/x</taglib-uri>
<taglib-location>/WEB-INF/x.tld</taglib-location>
</taglib>
</jsp-config>
在jsp页面中通过映射的uri进行使用:
<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>
<%--@ taglib prefix="c" uri="/WEB-INF/c.tld"--%>
<!-- 使用web.xml中的映射路径 -->
<%@ taglib prefix="c" uri="http://127.0.0.1/javaweb/jstl/core" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>hello_jstl.jsp</title>
</head>
<body>
<!-- 此标签就是一个输出,等同于out.print()操作 -->
<c:out value="这是第一个JSTL"></c:out>
</body>
</html>
核心标签库
c:out
该标签主要用于输出内容。语法:
<!-- 是否转换字符串(默认值是true),例如将>转换为> -->
<c:out value="要打印的内容" [escapeXml="[true|false]"] [default="默认值"]></c:out>
<c:out value="要打印的内容" [escapeXml="[true|false]"]>默认值</c:out>
例如:
<%@ taglib prefix="c" uri="http://127.0.0.1/javaweb/jstl/core" %>
<%
pageContext.setAttribute("info", "<a href='http://www.imooc.com'>慕课网</a>");
%>
属性存在,默认进行了转义:<c:out value="${info }"></c:out><br />
属性存在,设置转义为false:<c:out value="${info }" escapeXml="false"></c:out><br />
属性不存在,默认值:<c:out value="${ref }" default="属性不存在,这是默认值"></c:out><br />
属性不存在,默认值:<c:out value="${ref }">属性不存在,这是默认值,通过标签体给出</c:out><br />
c:set
将属性保存在4种属性范围之内。语法:
<!-- 设置属性 -->
<c:set var="属性名称" value="属性内容" [scope="[page|request|session|application]"]/>
<c:set var="属性名称" [scope="[page|request|session|application]"]>属性内容</c:set>
<!-- 设置对象 -->
<c:set value="属性内容" target="属性名称" property="属性名称" />
<c:set target="属性名称" property="属性名称" >属性内容</c:set>
例:
<%@ taglib prefix="c" uri="http://127.0.0.1/javaweb/jstl/core" %>
<!-- 设置简单属性 -->
<c:set var="info" value="Hello World!" scope="request"></c:set><br />
通过c:set设置内容,通过c:out输出内容:<c:out value="${info }"></c:out>
<!-- 操作简单的javabean,实际上javabean属性的设置应该交给Servlet完成,JSTL仅仅是完成简单的输出 -->
<%
SimpleBean bean = new SimpleBean();
request.setAttribute("simple", bean);
%>
<!-- 注意:target的EL表达式的空格问题 -->
<c:set value="怒发冲冠凭栏" target="${simple }" property="content"></c:set>
javabean的属性:${simple.content }
c:remove
删除指定范围之内的属性,功能与removeAttribute()
方法类似,语法:
<c:remove var="属性名" [scope="[page|request|session|application]"]/>
例:
<%@ taglib prefix="c" uri="http://127.0.0.1/javaweb/jstl/core" %>
<!-- 使用jstl设置属性 -->
<c:set var="info" value="hello world!" scope="request"></c:set>
属性内容:${info }<br />
<!-- 使用jstl删除属性 -->
<c:remove var="info" scope="request"/>
属性删除后:${info }<br />
c:catch
处理异常,语法:
<c:catch [var="保存异常信息的属性名称"]>
有可能发生异常的语句
</c:catch>
例:
<%@ taglib prefix="c" uri="http://127.0.0.1/javaweb/jstl/core" %>
<c:catch var="errmsg">
<%
int result = 10 / 0;
%>
</c:catch>
<h2>异常信息:${errmsg }</h2>
c:if
主要在程序中进行判断,功能和if语句类似。语法:
<c:if test="判断条件" var="存储判断结果" [scope="[page|request|session|application]"] />
<c:if test="判断条件" var="存储判断结果" [scope="[page|request|session|application]"] >
满足条件时执行的语句
</c:if>
例:
<%@ taglib prefix="c" uri="http://127.0.0.1/javaweb/jstl/core" %>
<c:if test="${param.ref=='admin' }" scope="page" var="res1">
欢迎${param.ref }光临<br />
</c:if>
<c:if test="${10<30 }" scope="page" var="res2">
10比30小<br />
</c:if>
第一个c:if的判断结果:${res1 }<br />
第二个c:if的判断结果:${res2 }
多条件判断(c:choose、c:when、c:otherwise)
注意:c:choose
标签只能作为c:when
和c:otherwise
的父标签出现。语法:
<!-- c:choose -->
<c:choose>
标签体内容(<c:when>、<c:otherwise>)
</c:choose>
<!-- c:when -->
<c:when test="判断条件">
满足条件时执行的语句
</c:when>
<!-- c:otherwise -->
<c:otherwise>
当所有<c:when>不满足时执行本标签体的内容
</c:otherwise>
例:
<%@ taglib prefix="c" uri="http://127.0.0.1/javaweb/jstl/core" %>
<!-- 设置属性 -->
<c:set var="num" value="10"></c:set>
<!-- 判断属性并输出 -->
<c:choose>
<c:when test="${num==0 }">
<c:out value="num等于0"></c:out>
</c:when>
<c:when test="${num>0 }">
<c:out value="num是正数"></c:out>
</c:when>
<c:otherwise>
<c:out value="num是负数"></c:out>
</c:otherwise>
</c:choose>
c:forEach
循环控制,主要用于迭代输出,和Iterator接口类似,语法:
<c:forEach [var="每一个对象的属性名称"] items="集合" [varStatus="保存相关成员信息"] [begin="集合的开始输出位置"] [end="集合的结束输出位置"] [step=""每次增长的步进值]>
具体的操作代码
</c:forEach>
例:
<%@ taglib prefix="c" uri="http://127.0.0.1/javaweb/jstl/core" %>
<%
String[] info = {
"Think in java","Head First Java","java7高级编程","Git权威指南"};
pageContext.setAttribute("ref", info);
List all = new ArrayList();
all.add("诛仙");
all.add("轩辕剑");
all.add("魔剑");
all.add("赤霄剑"