首页 > 编程语言 >【Java Web】JSTL及其核心库介绍 JSTL函数

【Java Web】JSTL及其核心库介绍 JSTL函数

时间:2024-11-13 14:47:57浏览次数:3  
标签:Web Java URL 标签 JSTL var 默认值 fn 非必要

文章目录

JSTL介绍

JSTL(JavaServer Pages Standard Tag Library)是 Apache 提供的一个用于 Java Web 开发的标准标签库,它依赖于表达式语言(EL),旨在简化 JSP 的开发过程。

JSTL由以下五个功能标签库组成:

核心标签库 (Core Tags): 提供了最常用的标签,如条件判断、迭代、URL操作等。

  • <c:if>: 用于条件判断。
  • <c:choose>, <c:when>, <c:otherwise>: 提供多分支选择结构
  • <c:forEach><c:forTokens>: 用于循环遍历集合或数组
  • <c:set><c:remove>: 用于设置或移除变量(或对象属性的值)
  • <c:url><c:redirect>: 用于构建URL和重定向
  • <c:out/>: 输出文本内容到out对象,常用于显示特殊字符,显示默认值
  • <c:param/>: 在url后附加参数
  • <c:import/>: 在页面中嵌入另一个资源内容

格式化标签库 (Formatting Tags): 用来格式化日期、数字和文本

  • <fmt:formatDate>: 格式化日期。
  • <fmt:formatNumber>: 格式化数字。
  • <fmt:message>: 国际化支持,显示本地化的消息。

函数标签库 (Functions Tags): 自JSTL 1.2起引入,提供了一些有用的EL函数。

SQL标签库 (SQL Tags): 用于执行数据库查询和更新操作。不过在实际项目中,直接在JSP页面上进行数据库操作通常不被推荐,因为这会违反MVC设计模式,不利于应用的可维护性。

XML标签库 (XML Tags): 用来处理XML数据,包括解析XML文档和转换XML数据。

在 lib 文件夹下添加 jar 包

standard.jar
jstl.jar

在 JSP 页面中添加 taglib 指令

<!-- 核心标签库 -->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"      prefix="c" %>
<!-- 国际化/格式化标签库 -->
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt"       prefix="fmt" %>
<!-- 函数标签库 -->
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<!-- 数据库标签库 -->
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql"       prefix="sql" %>
<!-- XML标签库 -->
<%@ taglib uri="http://java.sun.com/jsp/jstl/xml"       prefix="x" %>

核心库

在这里插入图片描述

从功能上可以分为4类:

按照功能划分包含的标签
表达式控制标签out set remove catch
流程控制标签if choose when otherwise
循环标签forEach forTokens
URL标签import url redirect

表达式控制

<c:out>

<c:out> 标签用来显示一个表达式的结果,与 <%= %> 作用相似,它们的区别就是 <c:out> 标签可以直接通过"."操作符来访问属性。举例来说,如果想要访问 customer.address.street,只需要这样写:<c:out value="customer.address.street"> 。<c:out> 标签会自动忽略 XML 标记字符,所以它们不会被当做标签来处理。

<c:out value="<string>" default="<string>" escapeXml="<true|false>"/>
  • value:要输出的内容,必要,无默认值
  • default:输出的默认值,非必要,默认值为主体中的内容
  • escapeXml:是否忽略XML特殊字符,非必要,默认值为true
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<html>
    <head>
        <title>c:out 标签实例</title>
    </head>
    <body>
        <h1>&lt;c:out&gt; 实例</h1>
        <c:out value="&lt要显示的数据对象(未使用转义字符)&gt" escapeXml="true" default="默认值"></c:out><br/>
        <c:out value="&lt要显示的数据对象(使用转义字符)&gt" escapeXml="false" default="默认值"></c:out><br/>
        <c:out value="${null}" escapeXml="false">使用的表达式结果为null,则输出该默认值</c:out><br/>
    </body>
</html>

运行结果

<c:out> 实例

&lt要显示的数据对象(未使用转义字符)&gt
<要显示的数据对象(使用转义字符)>
使用的表达式结果为null,则输出该默认值
<c:set>

<c:set> 标签用于设置变量值和对象属性。<c:set> 标签就是 <jsp:setProperty> 行为标签的孪生兄弟。这个标签会计算表达式的值,然后使用计算结果来设置 JavaBean 对象或 java.util.Map 对象的值。

<c:set
   var="<string>"
   value="<string>"
   target="<string>"
   property="<string>"
   scope="<string>"/>
  • value:要存储的值,非必要,默认值为主体的内容
  • target:要修改的属性所属的对象,非必要,无默认值
  • property:要修改的属性,非必要,无默认值(如果指定了target属性,property属性也需要被指定)
  • var:存储信息的变量,非必要,无默认值
  • scope:var属性的作用域,非必要,默认值为Page
<c:set var="salary" scope="session" value="${2000*2}"/>
<c:out value="${salary}"/> 

运行结果

4000
<c:remove>

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

<c:remove var="<string>" scope="<string>"/>
  • var:要移除的变量名称,必要,无默认值
  • scope:变量所属的作用域,非必要,默认值为所有作用域
<c:set var="salary" scope="session" value="${2000*2}"/>
<p>salary 变量值: <c:out value="${salary}"/></p>
<c:remove var="salary"/>
<p>删除 salary 变量后的值: <c:out value="${salary}"/></p>

运行结果

salary 变量值: 4000
删除 salary 变量后的值:
<c:catch>

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

<c:catch var="<string>">
	...
</c:catch>
  • var:用来储存错误信息的变量,非必要,默认值为None
<c:catch var ="catchException">
   <% int x = 5/0;%>
</c:catch>

<c:if test = "${catchException != null}">
   <p>异常为 : ${catchException} <br />
   发生了异常: ${catchException.message}</p>
</c:if>

运行结果

异常为 : java.lang.ArithmeticException: / by zero 
发生了异常: / by zero

流程控制

<c:if>

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

<c:if test="<boolean>" var="<string>" scope="<string>">
    ...
</c:if>
  • test:条件,必要,无默认值
  • var:用于存储条件结果的变量,非必要,无默认值
  • scope:var属性的作用域,非必要,默认值为 page
<c:set var="salary" scope="session" value="${2000*2}"/>
<c:if test="${salary > 2000}">
   <p>我的工资为: <c:out value="${salary}"/><p>
</c:if>

运行结果

我的工资为: 4000
<c:choose>

<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>
  • <c:when> 标签属性 test 为条件,必要,无默认值
  • <c:choose>、<c:otherwise> 标片均无属性
<c:set var="salary" scope="session" value="${2000*2}"/>
<p>你的工资为 : <c:out value="${salary}"/></p>
<c:choose>
    <c:when test="${salary <= 0}">
        太惨了。
    </c:when>
    <c:when test="${salary > 3000}">
        不错的薪水,还能生活。
    </c:when>
    <c:otherwise>
        什么都没有。
    </c:otherwise>
</c:choose>

运行结果

你的工资为 : 4000
不错的薪水,还能生活。

循环标签

<c:forEach>

<c:forEach>、<c:forTokens> 标签封装了 Java 中的 for,while,do-while 循环。相比而言,<c:forEach> 标签是更加通用的标签,因为它迭代一个集合中的对象。<c:forTokens> 标签通过指定分隔符将字符串分隔为一个数组然后迭代它们。

<c:forEach
    items="<object>"
    begin="<int>"
    end="<int>"
    step="<int>"
    var="<string>"
    varStatus="<string>">
    
<c:forTokens ...delims="<string>"...>
  • items:要被循环的信息,非必要,无默认值
  • begin:开始的元素(0=第一个元素,1=第二个元素),非必要,0
  • end:最后一个元素(0=第一个元素,1=第二个元素),非必要,Last element
  • step:每一次迭代的步长,非必要,1
  • var:代表当前条目的变量名称,非必要,无默认值
  • varStatus:代表循环状态的变量名称,非必要,无默认值

<c:forTokens> 标签与 <c:forEach> 标签有相似的属性,不过 <c:forTokens> 还有另一个属性

  • delims:分隔符,必要,无默认值
<c:forEach var="i" begin="1" end="5">
   Item <c:out value="${i}"/><p>
</c:forEach>
<c:forTokens items="google,runoob,taobao" delims="," var="name">
   <c:out value="${name}"/><p>
</c:forTokens>

运行结果

Item 1
Item 2
Item 3
Item 4
Item 5
google
runoob
taobao

URL标签

<c:import>

<c:import> 标签提供了所有 <jsp:include> 行为标签所具有的功能,同时也允许包含绝对 URL。举例来说,使用 <c:import> 标签可以包含一个 FTP 服务器中不同的网页内容。

<c:import
   url="<string>"
   var="<string>"
   scope="<string>"
   varReader="<string>"
   context="<string>"
   charEncoding="<string>"/>
  • url:待导入资源的URL,可以是相对路径和绝对路径,并且可以导入其他主机资源,必要,无默认值
  • context:当使用相对路径访问外部context资源时,context指定了这个资源的名字,非必要,当前应用程序
  • charEncoding:所引入的数据的字符编码集,非必要,默认值ISO-8859-1
  • var:用于存储所引入的文本的变量,非必要,无默认值
  • scope:var属性的作用域,非必要,默认值page
  • varReader:可选的用于提供java.io.Reader对象的变量,非必要,无默认值
<c:import var="data" url="http://www.runoob.com"/>
<c:out value="${data}"/>

以上程序将会打印 http://www.runoob.com 页面的源代码

<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>"/>
  • value:基础URL,必要,无默认值
  • context:本地网络应用程序的名称,非必要,默认值为当前应用程序
  • var:代表URL的变量名,非必要,默认值为Print to page
  • scope:var属性的作用域,非必要,默认值为Page
<a href="<c:url value="http://www.runoob.com"/>">
    这个链接通过 &lt;c:url&gt; 标签生成。
</a>
<a href="http://www.runoob.com">
    这个链接通过 <c:url> 标签生成。
</a>
<c:param>

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

<c:param name="<string>" value="<string>"/>
  • name:UR L中要设置的参数的名称,必要,无默认值
  • value:参数的值,非必要,默认值为 Body

如果想要向 <c:param> 标签中传递参数,需要先使用 <c:url> 标签来创建 URL

<c:url var="myURL" value="main.jsp">
    <c:param name="name" value="Runoob"/>
    <c:param name="url" value="www.runoob.com"/>
</c:url>
<a href="/<c:out value="${myURL}"/>">
    使用 &lt;c:param&gt; 为指定URL发送两个参数。
</a>
<a href="/main.jsp?name=Runoob&url=www.runoob.com">
    使用 <c:param> 为指定URL发送两个参数。
</a>
<c:redirect>

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

<c:redirect url="<string>" context="<string>"/>
  • url:目标URL,必要,无默认值
  • context:紧接着一个本地网络应用程序的名称,非必要,默认值当前应用程序
<c:redirect url="http://www.runoob.com"/>

浏览器打开以上页面将跳转至 http://www.runoob.com

格式化

<fmt:formatDate> 使用指定的风格或模式格式化日期和时间

<fmt:formatDate value="日期对象" pattern="日期格式模式" [type="date/time/both"] [dateStyle="default/short/medium/long/full"] [timeStyle="default/short/medium/long/full"] [timezone="时区"] [var="变量名"] [scope="page/request/session/application"] />

参数说明

  • value:必需。要格式化的日期对象。通常是一个 java.util.Date 对象或其子类实例。
  • pattern:可选。自定义日期/时间格式。例如 "yyyy-MM-dd HH:mm:ss" 表示年-月-日 时:分:秒。
  • type:可选。指定要显示的日期或时间类型。取值可以是 date(仅日期)、time(仅时间)或 both(日期和时间)。默认值为 both
  • dateStyle:可选。当 typedateboth 时使用。指定日期样式的长度。取值可以是 defaultshortmediumlongfull
  • timeStyle:可选。当 typetimeboth 时使用。指定时间样式的长度。取值与 dateStyle 相同。
  • timezone:可选。指定时区。例如 "GMT+8"
  • var:可选。如果设置了此参数,格式化后的结果将存储在该变量中,而不是直接输出到页面上。
  • scope:可选。与 var 一起使用,指定变量的作用域。取值可以是 pagerequestsessionapplication

示例

  1. 基本用法

    <fmt:formatDate value="${currentDate}" pattern="yyyy-MM-dd HH:mm:ss" />
    
  2. 使用 dateStyletimeStyle

    <fmt:formatDate value="${currentDate}" type="both" dateStyle="long" timeStyle="short" />
    
  3. 设置时区

    <fmt:formatDate value="${currentDate}" pattern="yyyy-MM-dd HH:mm:ss" timezone="GMT+8" />
    
  4. 存储在变量中

    <fmt:formatDate value="${currentDate}" pattern="yyyy-MM-dd HH:mm:ss" var="formattedDate" />
    <p>Formatted Date: ${formattedDate}</p>
    

JSTL函数

函数描述语法
fn:index0f()返回指定字符串在输入字符串中出现的位置${fn:indexOf(<原始字符串>,<子字符串>)}
fn:join()将数组中的元素合成一个字符串然后输出${fn:join([数组],<分隔符>)}
fn:length()返回字符串长度${fn:length(string)}
fn:replace()将输入字符串中指定的位置替换为指定的字符串然后返回${fn:replace(<原始字符串>,<被替换的字符串>,<要替换的字>)}
fn:split()将字符串用指定的分隔符分隔然后组成一个子字符串数组并返回${fn:split(<带分隔符的字符串>,<分隔符>)}
fn:substring()返回字符串的子集${fn:substring(<string>,<beginIndex>,<endIndex>)}
fn:trim()移除首位的空白符${fn:trim(<string>)}

升级示例4-2

<table>
    <tr>
        <th>序号</th>
        <th>ID</th>
        <th>编码</th>
        <th>名称</th>
        <th>详细描述</th>
        <th>创建时间</th>
    </tr>

    <c:forEach var="smbmsProvider" varStatus="a" items="${providerList}">
        <tr>
            <td>${a.index + 1}</td>
            <td>${smbmsProvider.id}</td>
            <td>${smbmsProvider.proCode}</td>
            <td>${smbmsProvider.proName}</td>
            <td class="description" title="${smbmsProvider.proDesc}">
                <c:choose>
                    <c:when test="${fn:length(smbmsProvider.proDesc) > 15}">
                        ${fn:substring(smbmsProvider.proDesc, 0, 15)}...
                    </c:when>
                    <c:otherwise>
                        ${smbmsProvider.proDesc}
                    </c:otherwise>
                </c:choose>
            </td>
            <td>
                <fmt:formatDate value="${smbmsProvider.creationDate}" pattern="yyyy-MM-dd HH:mm:ss" />
            </td>
        </tr>
    </c:forEach>
</table>

在这里插入图片描述

标签:Web,Java,URL,标签,JSTL,var,默认值,fn,非必要
From: https://blog.csdn.net/m0_66584716/article/details/143716862

相关文章

  • nginx代理minio的websocket问题,求解决!!!
    1.问题描述nginx代理minio集群,web控制台浏览buckets下的列表一直在loading...,不使用nginx代理地址,通过minio集群直接访问是没有问题的从报错来看是websocket连接失败问题,按照官方文档以及其他博主的方式都配置了,仍未解决!!!!!  2.minio镜像版本:minio/minio:RELEASE.2024-11......
  • 为什么连Java初中级面试都要问并发编程?
    前几天收到一位粉丝留言,说的是他才一年半经验,去面试却被各种问到分布式,高并发,多线程之间的问题。基础层面上的是可以答上来,但是面试官深问的话就不会了!被问得都怀疑现在Java招聘初级岗位到底招的是初级开发还是架构,是不是面进去就能直接进架构组了?(手动狗头) 但其实有一说......
  • 纯靠背八股文,能通过现在的Java面试吗?
    程序员面试背八股,可以说是现在互联网开发岗招聘不可逆的形式了,其中最卷的当属Java!(网上动不动就是成千上百道的面试题总结)你要是都能啃下来,平时技术不是太差的话,面试基本上问题就不会太大。这时候尴尬的现象就出现了:虽然八股文背的好并不能代表这个人有实际工作能力,但企业还是......
  • 基于java+springboot+layui的流浪动物交流信息平台设计实现
    基于java+springboot+layui的流浪动物交流信息平台设计实现......
  • Java String类
    publicclassDemoTest{publicstaticvoidmain(String[]args){/***String类型是不可变的:不可变对象,意味着一旦进行修改,就会产生新的对象*/Strings1="123";System.out.println(System.identityHashCode(s1));......
  • Python Web 应用开发基础知识
    PythonWeb应用开发基础知识引言随着互联网的快速发展,Web应用程序的需求日益增加。Python作为一种简单易学且功能强大的编程语言,已经成为Web开发中广受欢迎的选择之一。本文将深入探讨PythonWeb开发的基础知识,包括常用框架、基本概念、数据库交互以及前后端分离等......
  • 使用Websocket构建小型的IM通讯程序
    目录目录使用PWA构建小型的IM通讯程序简介项目地址界面预览技术栈服务端支持的协议前端总结使用PWA构建小型的IM通讯程序简介使用Websocket、MQTT协议构建小型的IM通信程序,可用于物联网或及时通信等,通过PWA技术,安装到用户手机桌面,提高用户整体交互感。项目地......
  • 免费送源码:Java+python+django+MySQL 小区疫情订菜系统 计算机毕业设计原创定制
    摘 要随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于小区疫情订菜系统当然也不能排除在外,随着网络技术的不断成熟,带动了小区疫情订菜系统,它彻底改变了过去传统的管理方式,不仅使服务管理难度变低了,还提升了管理的灵活性。这种......
  • 怎么用家用电脑做服务器(web服务器、ftp服务器、小程序服务器,云电脑)
    原料:    1、家用电脑,是电脑就行    2、宽带,这个有要求哦,必须是官方宽带,北乔峰,南慕容,北联通南电信,什么长城宽带等等地方小帮派,都没有朝廷的公网IP,没法直接当服务器,想当服务器只能中介转播....   3、暂时卸载或者关闭杀毒软件     杀毒软件不像......
  • 基于SSM高校竞赛和考级查询系统JAVA【毕设源码论文】
      博主介绍:......