zoukankan      html  css  js  c++  java
  • JAVA 之 JSTL

    一、什么是JSTL


    JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。

    JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。

    根据JSTL标签所提供的功能,可以将其分为5个类别。

    • 核心标签
    • 格式化标签
    • SQL 标签
    • XML 标签
    • JSTL 函数

    二、JSTL的安装


    从Apache的标准标签库中下载的二进包(jakarta-taglibs-standard-current.zip)

    官方下载地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/

    下载 jakarta-taglibs-standard-1.1.2.zip 包并解压,将 jakarta-taglibs-standard-1.1.2/lib/ 下的两个 jar 文件:standard.jar 和 jstl.jar 文件拷贝到 /WEB-INF/lib/ 下。

    将 tld 下的需要引入的 tld 文件复制到 WEB-INF 目录下。


    三、核心标签库


    引用核心标签库语法

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

    1、<c:out>标签

    <c:out>标签用来显示一个表达式的结果,与<%= %>作用相似。

    语法格式

    <c:out value="<string>" default="<string>" escapeXml="<true|false>"/>

    value:要输出的值    default:默认值  escapeXml:是否忽略xml特殊字符

    <%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <html>
    <head>
        <meta charset="utf-8">
        <title>JSTL</title>
    </head>
    <body>
    <c:out value="<h1>要显示的数据对象</h1>" escapeXml="true" default="默认值"></c:out><br/>
    <c:out value="<h1>要显示的数据对象</h1>" escapeXml="false" default="默认值"></c:out><br/>
    <c:out value="${null}" default="默认值" escapeXml="false"></c:out><br/>
    </body>
    </html>

     2、<c:set>标签

    <c:set>标签用于设置变量值和对象属性。

    语法格式:

    <c:set var="<string>" value="<string>"   target="<string>"  property="<string>"   scope="<string>"/>

    var:存储信息的变量   value:要存储的值  target:要修改属性所属对象  property:要修改的属性  scope:var属性的作用域 默认page

    <%@ page import="cn.xy.model.User" %>
    <%@ page import="java.util.Map" %>
    <%@ page import="java.util.HashMap" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <html>
    <head>
        <meta charset="utf-8">
        <title>JSTL</title>
    </head>
    <body>
    <%-- <c:set>给bean赋值--%>
    <%
        User user  = new User();
        pageContext.setAttribute("user",user);
    %>
    <c:set property="name" value="zero" target="${pageScope.user}"></c:set>
        name=${user.name}<br>
    <%--<c:set>给map赋值 --%>
    <%
        Map<String,String> map=new HashMap();
        pageContext.setAttribute("map", map);
    %>
    <c:set property="name" value="zero" target="${map}"></c:set>
    <c:set property="age" value="20" target="${map}"></c:set>
    map=${map }<br>
    name=${map.name }<br>
    age=${map.age }<br>
    <c:set var="num" value="200*4" ></c:set>
    num=${num}
    </body> </html>

     3、<c:remove>标签

    <c:remove>标签用于移除一个变量,可以指定这个变量的作用域,若未指定,则默认为变量第一次出现的作用域。

    语法格式:

    <c:remove var="<string>" scope="<string>"/>

    var:要移除的变量名  scope:变量所属的作用域

    <%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <html>
    <head>
        <meta charset="utf-8">
        <title>JSTL</title>
    </head>
    <body>
    <c:set var="name" value="req zero" scope="request"></c:set>
    <c:set var="name" value="page zero" scope="page"></c:set>
    <c:set var="name" value="session zero" scope="session"></c:set>
    <c:set var="name" value="application zero" scope="application"></c:set>
    
    删除指定域空间中的指定变量<br>
    <c:remove var="name" scope="request"/>
    
    name_request=${requestScope.name }<br>
    name_page=${pageScope.name }<br>
    name_session=${sessionScope.name }<br>
    name_application=${applicationScope.name }<br>
    
    
    <br>
    -----------------------------
    <br>
    删除所有域中的属性值<br>
    <c:remove var="name"/>
    
    name_request=${requestScope.name}<br>
    name_page=${pageScope.name }<br>
    name_session=${sessionScope.name }<br>
    name_application=${applicationScope.name }<br>
    
    </body>
    </html>

     4、<c:catch>标签

    <c:catch> 标签主要用来处理产生错误的异常状况,并且将错误信息储存起来。

    语法格式:

    <c:catch var="<string>">
    ...
    </c:catch>

    var:用来存储错误信息的变量

    <%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <html>
    <head>
        <meta charset="utf-8">
        <title>JSTL</title>
    </head>
    <body>
    <c:catch var ="catchException">
        <% int x = 5/0; %>
    </c:catch>
    
    <c:if test = "${catchException != null}">
        <p>异常为 : ${catchException} <br />
            发生了异常: ${catchException.message}</p>
    </c:if>
    
    </body>
    </html>

     5、<c:if>标签

    <c:if>标签判断表达式的值,如果表达式的值为 true 则执行其主体内容。

    语法格式:

    <c:if test="<boolean>" var="<string>" scope="<string>">
       ...
    </c:if>

    test:条件  var:存储结果的变量  scope:var的作用域

    <%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <html>
    <head>
        <meta charset="utf-8">
        <title>JSTL</title>
    </head>
    <body>
    <c:set var="salary" scope="session" value="${2000*2}"/>
    <c:if test="${salary > 2000}">
    <p>我的工资为: <c:out value="${salary}"/><p></c:if>
    </body>
    </html>

     6、<c:choose>, <c:when>, <c:otherwise> 标签

    <c:choose>标签与Java switch语句的功能一样,用于在众多选项中做出选择。

    switch语句中有case,而<c:choose>标签中对应有<c:when>,switch语句中有default,而<c:choose>标签中有<c:otherwise>。

    语法格式:

    <c:choose>
        <c:when test="<boolean>">
            ...
        </c:when>
        <c:when test="<boolean>">
            ...
        </c:when>
        ...
        ...
        <c:otherwise>
            ...
        </c:otherwise>
    </c:choose>

    test:条件

    <%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <html>
    <head>
        <meta charset="utf-8">
        <title>JSTL</title>
    </head>
    <body>
    <c:set var="salary" scope="session" value="${2000*2}"/>
    <c:choose>
        <c:when test="${salary}<=1000">
            难搞哦
        </c:when>
        <c:when test="${salary}>1000 && ${salary}<=3500">
            勉强能过
        </c:when>
        <c:otherwise>
            还行
        </c:otherwise>
    </c:choose>
    </body>
    </html>

     7、<c:forEach> 标签

    <c:forEach>标签是更加通用的标签,因为它迭代一个集合中的对象。

    语法格式:

    <c:forEach
        items="<object>"
        begin="<int>"
        end="<int>"
        step="<int>"
        var="<string>"
        varStatus="<string>">
    
        ...
    </c:forEach>

    items:要循环的信息  begin:开始的元素  end:最后一个元素  step:每次迭代的步长  var:代表当前条目的变量名称  varStatus:代表循环状态的变量名称

    <%@ page import="java.util.*" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <html>
    <head>
        <meta charset="utf-8">
        <title>JSTL</title>
    </head>
    ---------遍历LIST-----------<br>
    <%
        List<String> names = new ArrayList<String>();
        names.add("zero 001");
        names.add("zero 002");
        names.add("zero 003");
        pageContext.setAttribute("names",names);
    %>
    <c:forEach items="${names}" var="name">
        ${name}<br>
    </c:forEach>
    <br>
    ---------遍历set-----------<br>
    <%
        Set<String> address = new HashSet<String>();
        address.add("四川");
        address.add("重庆");
        address.add("北京");
        pageContext.setAttribute("address",address);
    %>
    <c:forEach items="${address}" var="addr">
        ${addr}<br>
    </c:forEach>
    <br>
    ---------遍历map-----------<br>
    <%
        Map<String,String> maps = new HashMap<>();
        maps.put("name","zero");
        maps.put("sex","男");
        maps.put("address","四川");
        pageContext.setAttribute("maps",maps);
    %>
    <c:forEach items="${maps}" var="map">
        ${map}<br>
    </c:forEach>
    <br>
    ---------遍历数组-----------<br>
    <%
        String[] hobbies ={"music","games","read"};
        pageContext.setAttribute("hobbies",hobbies);
    %>
    <c:forEach items="${hobbies}" var="hobby">
        ${hobby}<br>
    </c:forEach>
    </body>
    </html>

    <%@ page import="java.util.*" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <html>
    <head>
        <meta charset="utf-8">
        <title>JSTL</title>
    </head>
    ---------遍历LIST-----------<br>
    <%
        List<String> names = new ArrayList<String>();
        names.add("zero 001");
        names.add("zero 002");
        names.add("zero 003");
        names.add("zero 004");
        names.add("zero 005");
        names.add("zero 006");
        pageContext.setAttribute("names",names);
    %>
    <c:forEach items="${names}" var="name" begin="1" step="2">
        ${name}<br>
    </c:forEach>
    <br>
    
    </body>
    </html>

    <%@ page import="java.util.*" %>
    <%@ page import="cn.xy.model.User" %>
    <%@ page import="cn.xy.service.UserService" %>
    <%@ page import="cn.xy.service.impl.UserServiceImpl" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <html>
    <head>
        <meta charset="utf-8">
        <title>JSTL</title>
    </head>
    <%
        UserService userService = new UserServiceImpl();
        List<User> users=userService.findAll();
        pageContext.setAttribute("users",users);
    %>
    <table>
        <tr>
            <th>序号</th>
            <th>id</th>
            <th>姓名</th>
            <th>密码</th>
            <th>性别</th>
            <th>爱好</th>
    
        </tr>
        <!-- varStatus:处理一些域行数相关的功能(vs.countvs.firstvs.lastvs.index) -->
        <c:forEach items="${users }" var="user" varStatus="vs">
            <tr >
                <td align="center">${vs.count }</td>
                <td align="center">${user.id}</td>
                <td align="center">${user.name}</td>
                <td align="center">${user.password}</td>
                <td align="center">${user.sex}</td>
                <td align="center">${user.hobby}</td>
            </tr>
        </c:forEach>
    </table>
    
    
    </body>
    </html>

    8、<c:forTokens> 标签

    <c:forTokens>标签通过指定分隔符将字符串分隔为一个数组然后迭代它们。

    语法格式:

    <c:forTokens
        items="<string>"
        delims="<string>"
        begin="<int>"
        end="<int>"
        step="<int>"
        var="<string>"
        varStatus="<string>">
    </c:forTokens>

    items:要循环的信息  delims:分隔符  begin:开始的元素  end:最后一个元素  step:每次迭代的步长  var:代表当前条目的变量名称  varStatus:代表循环状态的变量名称

    <%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <html>
    <head>
        <meta charset="utf-8">
        <title>JSTL</title>
    </head>
    <c:forTokens items="java-c-python-go-C++-js" delims="-" var="name">
        ${name}<br>
    </c:forTokens>
    </body>
    </html>

     9、<c:redirect>标签

    <c:redirect>标签通过自动重写URL来将浏览器重定向至一个新的URL,它提供内容相关的URL,并且支持c:param标签

    语法格式:

    <c:redirect url="<string>" context="<string>"/>

    10、<c:param>、<c:url>标签

    <c:url>标签将URL格式化为一个字符串,然后存储在一个变量中。

    这个标签在需要的时候会自动重写URL。

    var属性用于存储格式化后的URL。

    <c:url>标签只是用于调用response.encodeURL()方法的一种可选的方法。它真正的优势在于提供了合适的URL编码,包括<c:param>中指定的参数。

    语法格式:

    <c:url var="<string>"  scope="<string>"  value="<string>"  context="<string>"/>

    <c:param>标签用于在<c:url>标签中指定参数,而且与URL编码相关。

    在<c:param>标签内,name属性表明参数的名称,value属性表明参数的值。

    语法格式:

    <c:param name="<string>" value="<string>"/>

    四、格式化标签


    JSTL格式化标签用来格式化并输出文本、日期、时间、数字。引用格式化标签库的语法如下:
    <%@ taglib prefix="fmt"            uri="http://java.sun.com/jsp/jstl/fmt" %>
    标签描述
    <fmt:formatNumber> 使用指定的格式或精度格式化数字
    <fmt:parseNumber> 解析一个代表着数字,货币或百分比的字符串
    <fmt:formatDate> 使用指定的风格或模式格式化日期和时间
    <fmt:parseDate> 解析一个代表着日期或时间的字符串
    <fmt:bundle> 绑定资源
    <fmt:setLocale> 指定地区
    <fmt:setBundle> 绑定资源
    <fmt:timeZone> 指定时区
    <fmt:setTimeZone> 指定时区
    <fmt:message> 显示资源配置文件信息
    <fmt:requestEncoding> 设置request的字符编码

    五、SQL标签


    JSTL SQL标签库提供了与关系型数据库(Oracle,MySQL,SQL Server等等)进行交互的标签。引用SQL标签库的语法如下:

    <%@ taglib prefix="sql"     uri="http://java.sun.com/jsp/jstl/sql" %>
    标签描述
    <sql:setDataSource> 指定数据源
    <sql:query> 运行SQL查询语句
    <sql:update> 运行SQL更新语句
    <sql:param> 将SQL语句中的参数设为指定值
    <sql:dateParam> 将SQL语句中的日期参数设为指定的java.util.Date 对象值
    <sql:transaction> 在共享数据库连接中提供嵌套的数据库行为元素,将所有语句以一个事务的形式来运行

    六、XML 标签


    JSTL XML标签库提供了创建和操作XML文档的标签。引用XML标签库的语法如下:

    <%@ taglib prefix="x"   uri="http://java.sun.com/jsp/jstl/xml" %>
    标签描述
    <x:out> 与<%= ... >,类似,不过只用于XPath表达式
    <x:parse> 解析 XML 数据
    <x:set> 设置XPath表达式
    <x:if> 判断XPath表达式,若为真,则执行本体中的内容,否则跳过本体
    <x:forEach> 迭代XML文档中的节点
    <x:choose> <x:when>和<x:otherwise>的父标签
    <x:when> <x:choose>的子标签,用来进行条件判断
    <x:otherwise> <x:choose>的子标签,当<x:when>判断为false时被执行
    <x:transform> 将XSL转换应用在XML文档中
    <x:param> 与<x:transform>共同使用,用于设置XSL样式表

    七、JSTL函数


    JSTL包含一系列标准函数,大部分是通用的字符串处理函数。引用JSTL函数库的语法如下:

    <%@ taglib prefix="fn"      uri="http://java.sun.com/jsp/jstl/functions" %>
    函数描述
    fn:contains() 测试输入的字符串是否包含指定的子串
    fn:containsIgnoreCase() 测试输入的字符串是否包含指定的子串,大小写不敏感
    fn:endsWith() 测试输入的字符串是否以指定的后缀结尾
    fn:escapeXml() 跳过可以作为XML标记的字符
    fn:indexOf() 返回指定字符串在输入字符串中出现的位置
    fn:join() 将数组中的元素合成一个字符串然后输出
    fn:length() 返回字符串长度
    fn:replace() 将输入字符串中指定的位置替换为指定的字符串然后返回
    fn:split() 将字符串用指定的分隔符分隔然后组成一个子字符串数组并返回
    fn:startsWith() 测试输入字符串是否以指定的前缀开始
    fn:substring() 返回字符串的子集
    fn:substringAfter() 返回字符串在指定子串之后的子集
    fn:substringBefore() 返回字符串在指定子串之前的子集
    fn:toLowerCase() 将字符串中的字符转为小写
    fn:toUpperCase() 将字符串中的字符转为大写
    fn:trim() 移除首尾的空白符
  • 相关阅读:
    java之collection总结
    JAVA集合详解(Collection和Map接口)
    Java集合框架(Collection Framework)学习之 Collection与Map概貌
    (二)用less+gulp+requireJs 搭建项目(gulp)
    (一)用less+gulp+requireJs 搭建项目(了解less)
    数组API汇总
    我的vim配置
    Educational Codeforces Round 47 D
    [AHOI2008]上学路线
    [SDOI2016]硬币游戏
  • 原文地址:https://www.cnblogs.com/zero-vic/p/12812360.html
Copyright © 2011-2022 走看看