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" 表示后续的标签使用都会以 开头

后续示例代码都已省略:

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

在作用域 request 中设置 name,相当于
<%request.setAttribute("name","gareen")%>

out

相当于
<%request.getAttribute("name")%>

remove

在作用域 request 中删掉 name,相当于
<%request.removeAttribute("name")%>

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

示例:

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

通过标签获取name: out value="${name}" /> 
var="name" scope="request" />
通过标签获取name: out value="${name}" />

if else

JSTL 通过 进行条件判断;
但是 JSTL 没有 所以常用的办法是在 的条件里取反;

配合 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);
%>


<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>


<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 专门用于字符串拆分,并且可以指定多个分隔符。

示例:

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

"${heros}" delims=":;|!" var="hero">
    out value="${hero}" /> 

fmt:formatNumber

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


minFractionDigits:小数点至少要有的位数;
maxFractionDigits:小数点最多能有的位数;

fmt:formatDate

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

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

"${now}" pattern="G yyyy年MM月dd日 E" />
"${now}" pattern="a HH:mm:ss.S z"/>
"${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)}

你可能感兴趣的:(Java)