一、概述
JSTL是一组预定义标签,它是对EL的扩展。
类似于JSP动作标签,但由于不是JSP的内置标签,需要用户将包导入至WEB-INF\lib的目录下。
在JSP中使用标签时,需要使用taglib命令导入标签库。JSTL主要包含核心标签库、格式化标签库、SQL标签库、XML标签库和函数标签库。
导入JSTL标签库的taglib命令如下:
<!-- uri需要导入c.tld才能使用 --> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %> <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
二、使用
表达式控制标签。
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page isELIgnored="false" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <body> <!-- c:out --> <c:out value="Hello World!" escapeXml="true"/><br/> <!-- c:set --> <c:set var="Ex1" value="Hello World!" scope="session"/> <c:set var="Ex2" scope="session"> Hello World! </c:set> <jsp:useBean id="stu" class="bean.Student" scope="page"/> <c:set target="${pageScope.stu}" property="name" value="Yao"/> <c:set target="${pageScope.stu}" property="id"> 1600300530 </c:set> Ex1 = ${sessionScope.Ex1}<br/> Ex2 = ${sessionScope.Ex2}<br/> stu.name = <c:out value="${pageScope.stu.name}"/><br/> stu.id = <c:out value="${pageScope.stu.id}"/><br/> <!-- c:remove --> <c:remove var="Ex1" scope="session"/> <c:remove var="Ex2" scope="session"/> <c:remove var="stu" scope="page"/> Ex1 = <c:out value="${sessionScope.Ex1}" default="not found"/><br/> Ex2 = <c:out value="${sessionScope.Ex2}" default="not found"/><br/> stu.name = <c:out value="${pageScope.stu.name}" default="not found"/><br/> stu.id = <c:out value="${pageScope.stu.id}" default="not found"/><br/> <!-- c:catch --> <c:catch var="error"> <% int[] a = {0, 1, 2, 3}; for (int i = 1; i <= a.length; i++) { a[i] += a[i - 1]; } %> </c:catch> error = <c:out value="${error}"/><br/> </body> </html>
流程控制标签。
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page isELIgnored="false" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <body> <!-- c:if --> <c:set var="Ex3" value="Hello World!" scope="page"/> <c:if test="${Ex3.equals('Hello World!')}"> Ex3 = ${Ex3}<br/> </c:if> <!-- c:choose --> <!-- c:when --> <!-- c:otherwise --> <c:set var="Ex4" value="0" scope="page"/> <c:choose> <c:when test="${Ex4==1}">Ex4 = 1</c:when> <c:when test="${Ex4==2}">Ex4 = 2</c:when> <c:when test="${Ex4==3}">Ex4 = 3</c:when> <c:otherwise>Ex4 = 0</c:otherwise> </c:choose> <br/> <!-- c:forEach --> <% int[] array = {0, 1, 2, 3, 4, 5}; session.setAttribute("array", array); %> <c:forEach var="integer" items="${sessionScope.array}" begin="1" end="3"> <c:out value="${integer} "/> </c:forEach> <!-- c:forTokens--> <% String str = "Hello World!"; session.setAttribute("str", str); %> <c:forTokens var="substr" items="${sessionScope.str}" delims=" !"> <c:out value="${substr}"/><br/> </c:forTokens> </body> </html>
URL操作标签。
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page isELIgnored="false" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <body> <!-- c:import --> <c:import url="test.txt" var="test" charEncoding="UTF-8"/> <c:out value="${test}"/><br/> <!-- c:param --> <!-- c:url --> <c:url value="http://www.baidu.com" var="addr1" scope="session"/> <c:out value="${sessionScope.addr1}"/><br/> <c:url value="http://www.baidu.com" var="addr2" scope="session"> <c:param name="text" value="Hello World!"/> </c:url> <c:out value="${sessionScope.addr2}"/><br/> <a href="${sessionScope.addr1}">百度链接(无参数)</a> <a href="${sessionScope.addr2}">百度链接(带参数)</a> <!-- c:redirect --> <c:redirect url="http://www.baidu.com"/> <c:redirect url="http://www.baidu.com"> <c:param name="text" value="Hello World!"/> </c:redirect> </body> </html>
扫描二维码关注公众号,回复:
2469436 查看本文章
三、自定义标签
- 创建标签所对应的功能类
- 编写标签的描述文件tld并导入WEB-INF目录下
- 在JSP中使用taglib指令调用自定义标签
//DateGetter.java package tags; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.SimpleTagSupport; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; public class DateGetter extends SimpleTagSupport { @Override public void doTag() throws JspException, IOException { JspWriter out = getJspContext().getOut(); Date date = new Date(); SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); out.println(format.format(date)); } } //time.tld <?xml version="1.0" encoding="UTF-8" ?> <taglib xmlns="http://java.sun.com/xml/ns/j2ee" version="2.0"> <tlib-version>1.0</tlib-version> <short-name>time</short-name> <tag> <name>date</name> <tag-class>tags.DateGetter</tag-class> <body-content>empty</body-content> </tag> </taglib> //index.jsp <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="time" uri="WEB-INF/tld/time.tld" %> <html> <body> <time:date/> </body> </html>