JSTL

简介

JSTL:JSP Standard Tag Library 标准标签库

JSTL 允许开人员可以像使用 HTML 标签那样在 JSP 中开发 Java 功能;

JSTL 库有 core,i18n,fmt,sql 等等;

i18n 和 sql 用的很少,core 和 fmt 在工作中会用到,所以我们主要是了解 core 和 fmt。

jar 包

为了能够在 JSP 中使用 JSTL,首先需要两个 jar 包,分别是 jstl.jar 和 standard.jar;

把这两个 jar 包放在 web/WEB-INF/lib 下。

标签

在页面中使用 JSTL 需要在 jsp 中通过指令进行设置
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

prefix="c" 表示后续的标签使用都会以 <c: 开头

后续示例代码都已省略:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
set out remove

set
<c:set var="name" value="${'gareen'}" scope="request" />
在作用域 request 中设置 name,相当于
<%request.setAttribute("name","gareen")%>

out
<c:out value="${name}" />
相当于
<%request.getAttribute("name")%>

remove
<c:remove var="name" scope="request" />
在作用域 request 中删掉 name,相当于
<%request.removeAttribute("name")%>

作用域可以是 pageContext,request,session,application

示例:

<c:set var="name" value="${'gareen'}" scope="request" />

通过标签获取name: <c:out value="${name}" /> <br>

<c:remove var="name" scope="request" /> <br>

通过标签获取name: <c:out value="${name}" /> <br>
if else

JSTL 通过 <c:if test=""> 进行条件判断;
但是 JSTL 没有 <c:else 所以常用的办法是在 <c:if 的条件里取反;

配合 if 使用的还有通过 empty 进行为空判断

empty 可以判断对象是否为 null,字符串长度是否为 0,集合长度是否为 0。

示例:

<c:set var="hp" value="${10}" scope="request" />

<c:if test="${hp<5}">
    <p>这个英雄要挂了</p>
</c:if>

<c:if test="${!(hp<5)}">
    <p>这个英雄觉得自己还可以再抢救抢救</p>
</c:if>

<%
    pageContext.setAttribute("weapon", null);
    pageContext.setAttribute("lastwords", "");
    pageContext.setAttribute("items", new ArrayList());
%>

<c:if test="${empty weapon}">
    <p>没有装备武器</p>
</c:if>
<c:if test="${empty lastwords}">
    <p>挂了也没有遗言</p>
</c:if>
<c:if test="${empty items}">
    <p>物品栏为空</p>
</c:if>
choose

虽然 JSTL 没有提供 else 标签,但是提供了一个 else 功能的标签

示例:

<c:choose>
    <c:when test="${hp<5}">
    </c:when>
    <c:otherwise>
    </c:otherwise>
</c:choose>
<c:set var="hp" value="${3}" scope="request" />

<c:choose>
    <c:when test="${hp<5}">
        <p>这个英雄要挂了</p>
    </c:when>
    <c:otherwise>
        <p>这个英雄觉得自己还可以再抢救抢救</p>
    </c:otherwise>
</c:choose>
forEach

可以在 JSP 中使用 for 循环,但是可读性很差;借助 JSTL 的 c:forEach 标签可以改善可读性:

<%@ ··· import="java.util.*"%>
··· 
<%
    List<String> heros = new ArrayList<String>();
    heros.add("塔姆");
    heros.add("艾克");
    heros.add("巴德");
    request.setAttribute("heros",heros);
%>

<!-- 使用 jsp 中的 for 循环来遍历 List -->
<table width="200px" align="center" border="1" cellspacing="0">
<tr>
    <td>编号</td>
    <td>英雄</td>
</tr>

<%
int i =0;
for (String hero : heros) {
    i++;
%>

<tr>
    <td><%=i%></td>
    <td><%=hero%></td>
</tr>

<%}%>

</table>

<br>

<!-- 使用 JSTL 中的 c:forEach 循环来遍历 List -->
<table width="200px" align="center" border="1" cellspacing="0">
<tr>
    <td>编号</td>
    <td>英雄</td>
</tr>

<c:forEach items="${heros}" var="hero" varStatus="st"  >
    <tr>
        <td><c:out value="${st.count}" /></td>
        <td><c:out value="${hero}" /></td>
    </tr>
</c:forEach>
</table>
forTokens

c:forTokens 专门用于字符串拆分,并且可以指定多个分隔符。

示例:

<c:set var="heros" value="塔姆,艾克;巴德|雷克赛!卡莉丝塔" />

<c:forTokens items="${heros}" delims=":;|!" var="hero">
    <c:out value="${hero}" /> <br>
</c:forTokens>
fmt:formatNumber

fmt 标签常用来进行格式化,其中 fmt:formatNumber 用于格式化数字,使用之前要加上:
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix='fmt' %>

<fmt:formatNumber type="number" value="${money}" minFractionDigits="2" />
minFractionDigits:小数点至少要有的位数;
maxFractionDigits:小数点最多能有的位数;

fmt:formatDate

fmt:formatDate 用于格式化日期
和 fmt:formatNumber 格式化数字一样,使用之前要加上

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix='fmt' %>

<fmt:formatDate value="${now}" pattern="G yyyy年MM月dd日 E" />
<fmt:formatDate value="${now}" pattern="a HH:mm:ss.S z"/>
<fmt:formatDate value="${now}" pattern="yyyy-MM-dd HH:mm:ss" />

yyyy 表示年份
MM 表示月份
dd 表示日期
E 表示星期几

a 表示是上午还是下午
HH 表示小时
mm 表示分钟
ss 表示秒
S 表示毫秒
z 表示时区

示例:

<%@ ··· import="java.util.*"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt"  prefix='fmt' %> 

<%
    Date now = new Date();
    pageContext.setAttribute("now",now);
%>

完整日期: <fmt:formatDate value="${now}" pattern="G yyyy年MM月dd日 E"/><br>
完整时间: <fmt:formatDate value="${now}" pattern="a HH:mm:ss.S z"/><br>
常见格式: <fmt:formatDate value="${now}" pattern="yyyy-MM-dd HH:mm:ss"/>

输出:
完整日期: AD 2018年05月20日 Sun
完整时间: AM 14:09:10.671 CST
常见格式: 2018-05-20 14:09:10

fn

fn 标签提供各种实用功能,首先使用之前加上:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

如:${fn:substring(name,0,5)}

fn标签

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值