JSTL核心标签超详细

article/2025/11/8 18:57:20

1.JSTL介绍

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

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


2.JSTL的使用及分类

要使用JSTL,首先要先下载好jar包,点击这里进行下载,下载好后,导入项目的WEN-INF的lib目录下即可,当然,要在jsp中使用JSTL,还得使用@taglib标签,不过不同的分类情况不一样,下面我们来看看JSTL标签的分类。

可以分为4大类和JSTL函数

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

本文主要介绍核心标签和JSTL函数。


3.五类标签的简介

核心标签:

在JSP文件开头使用如下语法

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

这里写图片描述

格式化标签:

在JSP文件开头使用如下语法

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

这里写图片描述

SQL标签:

在JSP文件开头使用如下语法

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

这里写图片描述

XML标签:

在JSP文件开头使用如下语法

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

这里写图片描述

JSTL函数:

在JSP文件开头使用如下语法

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

这里写图片描述

下面正式开始介绍核心标签。


4.JSTL核心标签

核心标签库共有14个标签,从功能上分为4类

  • 表达式控制标签:out,set,remove,catch
  • 流程控制标签:if,choose,when,otherwise
  • 循环标签:forEach,forTokens
  • URL操作标签:import,url,redirect,param

下面开始一个一个介绍。都配代码。

1. out标签的用法

用于在JSP中显示数据,就像<%= … >
这里写图片描述

<!-- 直接输出常量 -->
<c:out value="第一个JSTL小程序"></c:out>
<% String name = "CodeTiger"; request.setAttribute("name", name); 
%>
<!-- 使用default属性 ,当name1的属性为空时,输出default属性的值--> 
<c:out value="${name1}" default="error"></c:out><br> 
<!-- 使用escapeXml属性,设置是否对转义字符进行转义,默认为true不转义 --> 
<c:out value="&lt;CodeTiger&gt;" escapeXml="false"></c:out><br>

输出

第一个JSTL小程序 
error
<CodeTiger>

2.set标签的用法

用于保存数据
这里写图片描述

<!-- 通过set标签存值到scope中,其中var是变量的名称,value是变量的值,scope表示把变量存在哪个scope中 --> 
<c:set var="person1" value="CodeTiger" scope="page"></c:set> 
<c:out value="${person1}"></c:out><br> 
<!-- 也可以把value的值放在两个标签之间 --> 
<c:set var="person2" scope="session">liu</c:set> 
<c:out value="${person2}"></c:out><br><!-- 通过set标签为JavaBean里的属性赋值 ,首先创建一个JavaBean-->
<c:set target="${people}" property="username" value="CodeTiger"></c:set> 
<c:set target="${people}" property="address" value="NJUPT"></c:set> 
<c:out value="${people.username}"></c:out>&nbsp;&nbsp; 
<c:out value="${people.address}"></c:out><br>

输出

CodeTiger
liu
CodeTiger   NJUPT



3.remove标签的用法

用于删除数据
这里写图片描述

<!-- remove标签的用法 --> 
<c:set var="firstName" value="xiaop"></c:set> 
<c:out value="${firstName}"></c:out> 
<c:set var="lastName" value="liu"></c:set> 
<!-- 只能remove某个变量,不能remove掉JavaBean里的属性值 --> 
<c:remove var="lastName"/> 
<c:out value="${lastName}"></c:out><br>

输出

xiaop



4.catch标签的用法

用来处理产生错误的异常状况,并且将错误信息储存起来
这里写图片描述

<!-- catch标签的用法 --> 
<c:catch var="error"> <!-- 随便使用一个没有定义的JavaBean--><c:set target="${Code}" property="Tiger">CodeTiger</c:set> 
</c:catch> 
<c:out value="${error}"></c:out><br>

输出

javax.servlet.jsp.JspTagException



5.if标签的用法

与我们在一般程序中用的if一样
这里写图片描述

<!-- if标签的用法 --> 
<form action="index.jsp" method = "post"> <!-- param为EL的隐式对象,获取用户输入的值 --> <input type = "text" name = "score" value = "${param.score}"> <input type = "submit" value = "提交"> 
</form> 
<!-- var中的变量为boolean类型,取决于test中的表达式 --> 
<c:if test="${param.score >= 90}" var="grade" scope="session"> <c:out value="恭喜,成绩优秀"></c:out> 
</c:if> 
<c:if test="${param.score >= 80 && param.score < 90}"> <c:out value="恭喜,成绩良好"></c:out> 
</c:if> 
<c:out value="${sessionScope.grade}"></c:out>

输出
这里写图片描述



6.choose,when,otherwise标签的用法

这三个合在一起讲,有点类似switch case default。

choose:本身只当做<c:when>和<c:otherwise>的父标签

when:<c:choose>的子标签,用来判断条件是否成立

otherwise:<c:choose>的子标签,接在<c:when>标签后,当<c:when>标签判断为false时被执行
这里写图片描述
接上面的form表单

<!-- choose,when,otherwise标签的用法 --> 
<c:choose> <c:when test="${param.score >= 90 && param.score <= 100}"> <c:out value="优秀"></c:out> </c:when> <c:when test="${param.score >= 80 && param.score < 90}"> <c:out value="良好"></c:out> </c:when> <c:when test="${param.score >= 70 && param.score < 80}"> <c:out value="中等"></c:out> </c:when> <c:when test="${param.score >= 60 && param.score < 70}"> <c:out value="及格"></c:out> </c:when> <c:when test="${param.score >= 0 && param.score < 60}"> <c:out value="不及格"></c:out> </c:when> <c:otherwise> <c:out value="输入的分数不合法"></c:out> </c:otherwise> 
</c:choose> 
<c:choose> <c:when test="${param.score == 100}"> <c:out value="您是第一名"></c:out> </c:when> 
</c:choose><br>

输出
这里写图片描述这里写图片描述



7.forEach标签的用法

基础迭代标签,接受多种集合类型
这里写图片描述

<!-- forEach标签的用法 --> 
<% List<String> names = new ArrayList<String>(); names.add("liu"); names.add("xu"); names.add("Code"); names.add("Tiger"); request.setAttribute("names", names); 
%> 
<!-- 获取全部值 --> 
<c:forEach var="name" items = "${requestScope.names}"> <c:out value="${name}"></c:out><br> 
</c:forEach> 
<c:out value="========================"></c:out><br> 
<!-- 获取部分值 --> 
<c:forEach var="name" items = "${requestScope.names}" begin="1" end="3"> <c:out value="${name}"></c:out><br> 
</c:forEach> 
<c:out value="========================"></c:out><br> 
<!-- 获取部分值 并指定步长--> 
<c:forEach var="name" items = "${requestScope.names}" begin="1" end="3" step = "2"> <c:out value="${name}"></c:out><br> 
</c:forEach> 
<c:out value="========================"></c:out><br> 
<!-- 获取部分值 并指定varStatus--> 
<c:forEach var="name" items = "${requestScope.names}" begin="0" end="3" varStatus="n"> <c:out value="${name}"></c:out><br> <c:out value="index:${n.index}"></c:out><br> <c:out value="count:${n.count}"></c:out><br> <c:out value="first:${n.first}"></c:out><br> <c:out value="last:${n.last}"></c:out><br> <c:out value="-----------------"></c:out><br> 
</c:forEach> 
<c:out value="========================"></c:out><br>

输出

liu
xu
Code
Tiger
========================
xu
Code
Tiger
========================
xu
Tiger
========================
liu
index:0
count:1
first:true
last:false
-----------------
xu
index:1
count:2
first:false
last:false
-----------------
Code
index:2
count:3
first:false
last:false
-----------------
Tiger
index:3
count:4
first:false
last:true
-----------------
========================

上面的varStatus属性,有index、count、first、last这几个状态。



8.forTokens标签的用法

根据指定的分隔符来分隔内容并迭代输出
这里写图片描述

<!-- forTokens标签的使用 --> 
<c:forTokens items="010-12345-678" delims="-" var="num"> <c:out value="${num}"></c:out><br> 
</c:forTokens>

输出

010
12345
678

9.import标签的用法

检索一个绝对或相对 URL,然后将其内容暴露给页面
这里写图片描述
该标签和<jsp:include>的区别:<jsp:include>只能包含同一个web应用中的文件,而<c:import>可以包含其他web应用中的文件,甚至是网络上的资源。

该标签只是把URL属性中的资源加载到页面中,URL地址栏的地址不会改变。

<!-- import标签的用法 绝对路径--> 
<c:catch var="error1"> <c:import url="http://www.codeliu.com"></c:import> 
</c:catch> 
<c:out value="${error1}"></c:out><br> 
<!-- 相对路径 --> 
<c:catch var="error2"> <c:import url="test.txt" charEncoding="gbk" scope="session" var="test"></c:import> 
</c:catch> 
<c:out value="${error2}"></c:out> 
<c:out value="${sessionScope.test}"></c:out><br> 
<!-- 使用context属性 ,前面要加/,导入MyFirstJSP项目中的index.jsp页面--> 
<c:catch var="error3"> <c:import url="/index.jsp" context="/MyFirstJSP"></c:import> 
</c:catch> 
<c:out value="${error3}"></c:out><br>



10.redirect,param标签的用法

redirect:重定向至一个新的URL.同时可以在url中加入指定的参数
这里写图片描述
param:用来给包含或重定向的页面传递参数
这里写图片描述

<!-- redirect标签的用法 --> 
<c:redirect url="rec.jsp"> <c:param name="username" value="liu"></c:param> <c:param name="password" value="123456"></c:param> 
</c:redirect>

该标签会使URL地址栏的地址发生改变。可通过EL表达式的param对象来获取传递的参数值。

<c:out value="${param.username}"></c:out><br> 
<c:out value="${param.password}"></c:out><br>

输出

liu
123456



11.url标签的用法

使用可选的查询参数来创造一个URL
这里写图片描述
<c:url>标签将URL格式化为一个字符串,然后存储在一个变量中。

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

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

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

<!-- url标签的用法 --> 
<a href = "<c:url value = "http://www.codeliu.com"/>">这个链接通过&lt;c:url&gt;生成</a>

输出

这个链接通过<c:url>生成

我们看看网页源代码
这里写图片描述


5.JSTL函数的使用

函数在上面已经列出来了,我就选了几个写了一下,其实和String的都差不多。不过要记得先在前面引入

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

测试以下几个函数

<c:out value="${fn:contains('Hello world', 'Hello')}"></c:out><br> 
<c:out value="${fn:contains('Hello world', 'aaaa')}"></c:out><br> 
<c:out value="${fn:containsIgnoreCase('Hello world', 'hello')}"></c:out><br>

输出

true
false
true



好了,大概也就说这么多了。

个人博客http://www.codeliu.com,欢迎各位志同道合的小伙伴!


http://chatgpt.dhexx.cn/article/MuG4GqZe.shtml

相关文章

关于网站最近出现504错误的总结,too open many files in system

如果你有耐心看完这篇文章&#xff0c;也许会给你带来真正的益处。 网站出现504错误&#xff0c;如果你用阿里云CDN的话还会报 504 Gateway Time-out The gateway did not receive a timely response from the upstream server or application. Powered by Tengine 这样一句…

腾讯云服务器网站504,使用腾讯、百度云CDN现403和504错误的解决及使用CDN踩的坑...

最近源站出网流量超出带宽的限定值&#xff0c;经常导致服务器丢包。最近有点频繁&#xff0c;甚至一小时丢好几次&#xff0c;如下图所示&#xff1a; 于是考虑接入 CDN &#xff0c;腾讯云CDN送了300G流量&#xff0c;但是接入后经常打不开页面&#xff0c;就换了百度云CDN。…

出现504怎么办?由于服务器更新导致的博客报504错误[详细记录]

最近由于云服务商进行了云服务优化&#xff0c;更新。由于以前在优化博客时的疏忽与草率&#xff0c;导致了本次服务商那边更新&#xff0c;这边博客直接报错504。 据官方称是修改了DNS解析地址&#xff0c;和ip域名地址。 504错误&#xff1a;代表网关超时 &#xff08;Gatewa…

nginx实战总结-504错误剖析

一、问题描述 nginx访问会出现504:Gateway Time-out,按照报错的意思是请求无响应或者无响应,意思就是说由于大量的请求,有些线程运气差,一直调用不到,导致请求超时,所以就往超时的时间入手,进行解决 二、解决步骤 先看下nginx使用的是什么协议(proxy/fastcgi):我这…

Git 504错误

网络和代理的问题 1、在环境变量中添加代理 2、设置git的代理为默认 git config --global --unset http.proxy //设置http代理为默认 git config --global --unset https.proxy //设置https代理为默认env | grep proxy //查看代理

php响应码504,php为什么会出现504错误_后端开发

python如何实现excel多表合并(附代码)_后端开发 今天来用python实现合并多个excel为一个工作本&#xff0c;使用不到40行代码完成了60多张excel工作本合并为一张&#xff0c;大家一起来看看吧。 php出现504错误的原因是&#xff1a;1、nginx默认的fastcgi进程响应缓冲区太小了&…

504网关超时怎么解决_什么是504网关超时错误(以及如何解决)?

504网关超时怎么解决 A 504 Gateway Timeout Error happens when a server that was attempting to load a web page did not get a response in time from another server. Almost always, the error is on the website itself, and there’s nothing you can do about it but…

HTTP代理504网关超时错误如何修复?

HTTP状态代码指的是服务器向浏览器指示响应的状态&#xff0c;当服务器充当外部网关或代理并且没有及时收到来自另一个服务器的响应时&#xff0c;则会收到“504–网关超时”。那么&#xff0c;HTTP代理504网关超市错误怎么解决呢&#xff1f; 1、重新加载网页 遇到504网关超时…

鸡啄米:添加控件变量

设置Tab键的顺序&#xff1a;先按CtrlD &#xff0c;再从自己认为Tab顺序应该为1的控件开始依次单击&#xff0c;随着单击的完成&#xff0c;各控件的Tab响应顺序也按我们的想法设置好了按钮中的代码&#xff1a;UpdateData(TRUE); //将控件中输入的数据传到变量m_a 、 m_b中 …

鸡啄米:C++编程入门系列之一(进制数)

转载自&#xff1a; http://www.jizhuomi.com/software/21.html 鸡啄米在前言已经讲了程序的发展历程&#xff0c;程序设计的进步和编程入门的一些基本概念。这一节主要讲数据在计算机中的存储结构。计算机执行程序需要控制信息和数据信息&#xff0c;控制信息涉及硬件方面&a…

鸡啄米:C++编程入门系列之六(算法的基本控制结构之选择结构)

转载自&#xff1a; http://www.jizhuomi.com/software/34.html 上一讲鸡啄米为大家讲了运算符和表达式的知识&#xff0c;这一讲鸡啄米主要讲算法基本控制结构中的选择结构&#xff0c;同时教大家写比较简单的程序。 为了能写出简单的程序并看见它们的输出效果&#xff0c;鸡…

鸡啄米之VS2010/MFC编程入门之二十六(常用控件:滚动条控件Scroll Bar)

目录 一、目的 1、想学习滚动条控件Scroll Bar&#xff0c;如此获得里面的数值&#xff0c;方便用在其他地方&#xff0c;比只输入变量方便多了 一、参考&#xff1a; 1、VS2010/MFC编程入门之二十六&#xff08;常用控件&#xff1a;滚动条控件Scroll Bar&#xff09; ①…

鸡啄米:C++编程入门系列之前言

转载自&#xff1a; http://www.jizhuomi.com/software/17.html 从今天开始鸡啄米将给大家讲解一些C编程入门的知识&#xff0c;对于鸡啄米也是个温习巩固的过程。鸡啄米将会用深入浅出的方式&#xff0c;尽量用最简单的语言让读者学会C语言&#xff0c;并爱上这门语言。 本前…

鸡啄米:C++编程入门系列之四(数据类型)

转载自&#xff1a; http://www.jizhuomi.com/software/29.html 上一讲鸡啄米给大家讲了VS2010的使用介绍&#xff0c;大家以后就可以用它来进行软件开发了&#xff0c;在编程入门的时候可以写些简单的程序先玩玩&#xff0c;实际编写代码试验下鸡啄米讲过的内容。 C是从C中发…

鸡啄米vc++2010系列30(树形控件Tree Control 下)

前面一节讲了树形控件Tree Control的简介、通知消息以及相关数据结构&#xff0c;本节继续讲下半部分&#xff0c;包括树形控件的创建、CTreeCtrl类的主要成员函数和应用实例。 树形控件的创建 MFC为树形控件提供了CTreeCtrl类&#xff0c;它封装了树形控件的所有操作。 树形控…

鸡啄米:C++编程入门系列之五(运算符和表达式)

转载自&#xff1a; http://www.jizhuomi.com/software/32.html 上一讲鸡啄米给大家讲了一些数据类型&#xff0c;这一讲主要讲解编程入门知识-运算符和表达式。运算符&#xff0c;顾名思义&#xff0c;就是用于计算的符号&#xff0c;比如&#xff0c;-&#xff0c;*&#xf…

鸡啄米:C++编程入门系列之三(VS2010的使用介绍)

转载自&#xff1a;http://www.jizhuomi.com/software/27.html 大家好&#xff0c;鸡啄米上节课给大家讲了原码、反码和补码的知识点。这节课我主要跟大家讲解VS2010的使用方法&#xff0c;并不会面面俱到&#xff0c;我只大概讲下经常会用到的功能。至于其他功能用的不会很多…

linux 命令:ls 详解

用法&#xff1a;ls [OPTION]... [FILE]... 打印关于FILE的信息&#xff08;默认当前目录&#xff09; 以字母表顺序排序&#xff08;如果没有使用-cftuvSUX或者--sort等选项&#xff09;选项&#xff08;OPTION&#xff09;&#xff1a;-a, --all 不隐藏任何以.…

linux的ls命令没反应,Linux:ls命令如何使用

原标题&#xff1a;Linux:ls命令如何使用 1、ls命令可以在Linux中显示出文件和目录&#xff0c;如下图。当然&#xff0c;ls命令不可能只能实现这么简单的操作&#xff0c;下面就通过一些参数来查看ls的其他用法 2、ls -l&#xff0c;使用长清单模式来列出文件和目录&#xff0…

Linux命令ls -l详细信息说明

一、 概述 Linux系统中敲入命令ls -l可以查看目录或文件的详细信息&#xff0c;本文介绍详细信息的组成。 二、 说明 详细说明见下图&#xff1a; 注意&#xff1a; 链接文件的概念类似于windows里的快捷方式。多个链接文件同时指向一个“源文件”。链接文件分为硬链接或软…