[Java Web] JSTL

一、概述

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" %>
View Code

二、使用

表达式控制标签。

<%@ 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>
View Code

流程控制标签。

<%@ 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>
View Code

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>
View Code
扫描二维码关注公众号,回复: 2469436 查看本文章

三、自定义标签

  1. 创建标签所对应的功能类
  2. 编写标签的描述文件tld并导入WEB-INF目录下
  3. 在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>
View Code

猜你喜欢

转载自www.cnblogs.com/arseneyao/p/9386406.html
今日推荐