JSP-JSTL(Java Standard Tag Library即java标准标签库)

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 下
  • set out remove

    在页面中使用JSTL需要在jsp中 通过指令进行设置
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    prefix="c" 表示后续的标签使用都会以<c: 开头

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

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

    作用域可以是pageContext, request, session, application
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
     
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
     
    <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=""> 进行条件判断
    但是JSTP没有<c:else,所以常用的办法是在<c:if的条件里取反

    配合if使用的还有通过empty进行为空判断
    empty可以判断对象是否为null,字符串长度是否为0,集合长度是否为0
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8" import="java.util.*"%>
     
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
     
    <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:if test="!" 来表示else
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8" import="java.util.*"%>
     
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
     
    <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标签,可以改善可读性
    在本例中,分别使用for循环和<c:forEach标签来演示遍历一个List的区别
    <c:forEach items="${heros}" var="hero" varStatus="st"  >
    items="${heros}" 表示遍历的集合
    var="hero" 表示把每一个集合中的元素放在hero上
    varStatus="st" 表示遍历的状态
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8" import="java.util.*"%>
     
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
     
    <%
        List<String> heros = new ArrayList<String>();
        heros.add("塔姆");
        heros.add("艾克");
        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专门用于字符串拆分,并且可以指定多个分隔符
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8" import="java.util.*"%>
      
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
      
    <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"/>
    <fmt:formatNumber 表示格式化数字
    minFractionDigits 小数点至少要有的位数
    maxFractionDigits 小数点最多能有的位数

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8" 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' %> 
     
    <c:set var="money" value="888.8" />
    <c:set var="pi" value="3.1415926" />
    最少两个小数点:
    <fmt:formatNumber type="number" value="${money}" minFractionDigits="2"/>
    <br>
    最多两个小数点:
    <fmt:formatNumber type="number" value="${pi}" maxFractionDigits="2" />
  • fmt:formatDate 格式化日期

    fmt 标签常用来进行格式化,其中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"/>
    <fmt:formatDate 表示格式化日期
    yyyy 表示年份
    MM 表示月份
    dd 表示日期
    E 表示星期几

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

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8" 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"/>
  • fn:

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

    用法举例:
     ${fn:substring(name, 0, 5)}
    获取name的前5位

    函数描述

    fn:contains(string, substring)

    如果参数string中包含参数substring,返回true

    fn:containsIgnoreCase(string, substring)

    如果参数string中包含参数substring(忽略大小写),返回true

    fn:endsWith(string, suffix)

    如果参数 string 以参数suffix结尾,返回true

    fn:escapeXml(string)

    将有特殊意义的XML (和HTML)转换为对应的XML character entity code,并返回

    fn:indexOf(string, substring)

    返回参数substring在参数string中第一次出现的位置

    fn:join(array, separator)

    将一个给定的数组array用给定的间隔符separator串在一起,组成一个新的字符串并返回。

    fn:length(item)

    返回参数item中包含元素的数量。参数Item类型是数组、collection或者String。如果是String类型,返回值是String中的字符数。

    fn:replace(string, before, after)

    返回一个String对象。用参数after字符串替换参数string中所有出现参数before字符串的地方,并返回替换后的结果

    fn:split(string, separator)

    返回一个数组,以参数separator 为分割符分割参数string,分割后的每一部分就是数组的一个元素

    fn:startsWith(string, prefix)

    如果参数string以参数prefix开头,返回true

    fn:substring(string, begin, end)

    返回参数string部分字符串, 从参数begin开始到参数end位置,包括end位置的字符

    fn:substringAfter(string, substring)

    返回参数substring在参数string中后面的那一部分字符串

    fn:substringBefore(string, substring)

    返回参数substring在参数string中前面的那一部分字符串

    fn:toLowerCase(string)

    将参数string所有的字符变为小写,并将其返回

    fn:toUpperCase(string)

    将参数string所有的字符变为大写,并将其返回

    fn:trim(string)

    去除参数string 首尾的空格,并将其返回



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值