【Java 进阶篇】用JSTL玩转Java:了解JSTL常用标签

JavaServer Pages标准标签库(JavaServer Pages Standard Tag Library,简称JSTL)是Java Web应用程序中常用的标签库之一。它提供了一组标签,使得在JSP页面中处理数据、控制流程、以及显示内容变得更加便捷和高效。本文将带领你深入了解JSTL的常用标签,无论你是初学者还是有一定经验的开发者,都能从中受益。
JSTL概述
在深入研究JSTL的常用标签之前,让我们先了解一下JSTL是什么以及为什么我们需要它。
什么是JSTL?
JSTL是JavaServer Pages的标准标签库,旨在简化在JSP页面中执行常见任务的编程。它包含了一组标签,用于处理数据、控制流程和动态生成内容。JSTL的主要优势在于它的可读性和可维护性,使开发者能够更轻松地将业务逻辑与界面分离,提高了代码的可重用性。
为什么使用JSTL?
JSTL的使用有诸多好处,其中一些主要原因包括:
- 降低耦合度:JSTL使开发人员能够将业务逻辑从页面中分离出来,从而降低了代码的耦合度。这使得代码更易于维护和扩展。
- 提高可读性:JSTL标签的语法与HTML和XML非常相似,这使得代码更易于阅读和理解。
- 增加可维护性:通过将逻辑与界面分开,JSTL有助于减小代码的规模,并且使得代码更易于维护。这对于长期项目的可维护性非常重要。
- 提高开发效率:JSTL提供了许多常用操作的标准标签,从而减少了开发工作量。这意味着你可以更快速地构建功能齐全的Web应用程序。
现在,让我们深入研究JSTL的一些常用标签。
输出标签
输出标签用于将内容显示在JSP页面上。这些标签可以用于输出文本、表达式的值、变量等。
c:out>
c:out>
标签用于输出文本或表达式的值。它的语法如下:
c:out value="expression" />
value
属性:指定要输出的表达式或变量的值。
示例:
%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
!DOCTYPE html>
html>
head>
title>
JSTL Output Tag/title>
/head>
body>
c:out value="Hello, JSTL!" />
/body>
/html>
在这个示例中,c:out>
标签将"Hello, JSTL!"输出到页面上。
c:if>
c:if>
标签用于在JSP页面中执行条件判断。它的语法如下:
c:if test="expression">
!-- 在条件为true时显示的内容 -->
/c:if>
test
属性:指定一个条件表达式,如果表达式为真,标签内的内容将被执行。
示例:
%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
!DOCTYPE html>
html>
head>
title>
JSTL Conditional Tag/title>
/head>
body>
c:if test="${
5 >
3}
">
5 is greater than 3.
/c:if>
/body>
/html>
这个示例中,c:if>
标签检查条件${
5 >
3}
是否为真,如果为真,则显示"5 is greater than 3."。
c:choose>
, c:when>
, c:otherwise>
c:choose>
标签用于创建多个条件分支,类似于Java中的switch
语句。在c:choose>
内部,可以使用c:when>
标签来定义条件,如果条件满足,则执行相应的内容,而c:otherwise>
标签定义了所有条件都不满足时执行的内容。
c:choose>
c:when test="condition1">
!-- 条件1满足时执行的内容 -->
/c:when>
c:when test="condition2">
!-- 条件2满足时执行的内容 -->
/c:when>
c:otherwise>
!-- 所有条件都不满足时执行的内容 -->
/c:otherwise>
/c:choose>
c:when>
标签有一个test
属性,用于定义条件。c:otherwise>
标签没有属性,用于定义默认情况。
示例:
%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
!DOCTYPE html>
html>
head>
title>
JSTL Conditional Tags/title>
/head>
body>
c:choose>
c:when test="${
5 >
10}
">
5 is greater than 10.
/c:when>
c:when test="${
5 10}
">
5 is less than 10.
/c:when>
c:otherwise>
5 is equal to 10.
/c:otherwise>
/c:choose>
/body>
/html>
这个示例中,c:choose>
标签根据条件的结果选择不同的分支执行。
迭代标签
迭代标签用于在JSP页面中迭代处理数据,例如遍历集合、数组或Map等。
c:forEach>
c:forEach>
标签用于遍历集合、数组或Map,并在每次迭代中执行特定的操作。它的语法如下:
c:forEach items="collection" var="item">
!-- 在每次迭代中执行的内容 -->
/c:forEach>
items
属性:指定要迭代的集合、数组或Map。var
属性:指定当前迭代的元素。
示例:
%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
!DOCTYPE html>
html>
head>
title>
JSTL forEach Tag/title>
/head>
body>
c:forEach items="${
requestScope.students}
" var="student">
Student Name: c:out value="${
student.name}
" />
br/>
/c:forEach>
/body>
/html>
在这个示例中,我们使用c:forEach>
标签遍历名为"students"的集合,然后输出每个学生的姓名。
c:forTokens>
c:forTokens>
标签用于迭代一个字符串中的子字符串,通常用于分隔符分隔的字符串。它的语法如下:
c:forTokens items="string" delims="delimiter" var="item">
!-- 在每次迭代中执行的内容 -->
/c:forTokens>
items
属性:指定要迭代的字符串。delims
属性:指定用于分隔字符串的分隔符。var
属性:指定当前迭代的子字符串。
示例:
%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
!DOCTYPE html>
html>
head>
title>
JSTL forTokens Tag/title>
/head>
body>
c:forTokens items="apple,banana,cherry" delims="," var="fruit">
Fruit: c:out value="${
fruit}
" />
br/>
/c:forTokens>
/body>
/html>
在这个示例中,我们使用c:forTokens>
标签遍历以逗号分隔的水果列表,然后输出每个水果。
设置标签
设置标签用于在JSP页面中创建和设置变量。这些变量可以是本地变量、页面范围变量或会话范围变量。
c:set>
c:set>
标签用于创建或设置变量的值。它的语法如下:
c:set var="variableName" value="expression" [scope="scope"] />
var
属性:指定要创建或设置的变量名。value
属性:指定变量的值,可以是一个表达式。scope
属性(可选):指定变量的范围,可以是"page"(页面范围)、“request”(请求范围)、“session”(会话范围)或"application"(应用程序范围)。如果不指定,默认为"page"。
示例:
%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
!DOCTYPE html>
html>
head>
title>
JSTL set Tag/title>
/head>
body>
c:set var="message" value="Hello from JSTL!" />
c:out value="${
message}
" />
/body>
/html>
这个示例中,我们使用c:set>
标签创建一个名为"message"的变量,并设置它的值为"Hello from JSTL!",然后使用c:out>
标签输出这个变量的值。
c:remove>
c:remove>
标签用于移除变量,以释放资源。它的语法如下:
c:remove var="variableName" [scope="scope"] />
var
属性:指定要移除的变量名。scope
属性(可选):指定变量的范围,可以是"page"(页面范围)、“request”(请求范围)、“session”(会话范围)或"application"(应用程序范围)。如果不指定,默认为"page"。
示例:
%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
!DOCTYPE html>
html>
head>
title>
JSTL remove Tag/title>
/head>
body>
c:set var="message" value="Hello from JSTL!" />
c:out value="${
message}
" />
br/>
c:remove var="message" />
c:if test="${
empty message}
">
Message has been removed.
/c:if>
/body>
/html>
这个示例中,我们首先使用c:set>
标签创建一个名为"message"的变量,然后使用c:remove>
标签将其移除。最后,我们使用c:if>
标签检查变量是否为空,以确认它已被成功移除。
URL标签
URL标签用于在JSP页面中生成URL链接,包括相对路径和绝对路径。
c:url>
c:url>
标签用于生成一个相对于当前上下文路径的URL。它的语法如下:
c:url value="URL" [var="variableName"] [scope="scope"] />
value
属性:指定要生成的URL,可以是相对路径或绝对路径。var
属性(可选):指定要创建的变量名,以保存生成的URL。scope
属性(可选):指定变量的范围,可以是"page"(页面范围)、“request”(请求范围)、“session”(会话范围)或"application"(应用程序范围)。如果不指定var
属性,则将URL输出到页面。
示例:
%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
!DOCTYPE html>
html>
head>
title>
JSTL URL Tag/title>
/head>
body>
c:url value="/page.jsp" var="pageUrl" />
a href="c:out value="${
pageUrl}
" />
">
Go to Page/a>
/body>
/html>
这个示例中,我们使用c:url>
标签生成了一个指向"/page.jsp"的相对路径URL,并将其保存在名为"pageUrl"的变量中。然后,我们在页面上使用a>
标签将这个URL链接显示出来。
c:import>
c:import>
标签用于在JSP页面中引入其他页面或资源。它的语法如下:
c:import url="URL" [var="variableName"] [scope="scope"] />
url
属性:指定要引入的URL,可以是相对路径或绝对路径。var
属性(可选):指定要创建的变量名,以保存引入的内容。scope
属性(可选):指定变量的范围,可以是"page"(页面范围)、“request”(请求范围)、“session”(会话范围)或"application"(应用程序范围)。如果不指定var
属性,则引入的内容将直接显示在页面上。
示例:
%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
!DOCTYPE html>
html>
head>
title>
JSTL Import Tag/title>
/head>
body>
c:import url="http://example.com" var="externalContent" />
c:out value="${
externalContent}
" />
/body>
/html>
这个示例中,我们使用c:import>
标签引入了外部网站"http://example.com"的内容,并将其保存在名为"externalContent"的变量中,然后使用c:out>
标签将内容显示在页面上。
遍历集合
在实际的Web应用中,我们经常需要遍历集合并显示其中的数据。JSTL提供了一些标签来帮助我们完成这个任务。
c:forEach>
前面已经介绍过c:forEach>
标签,它可以用来遍历集合、数组或Map。
示例:
%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
!DOCTYPE html>
html>
head>
title>
Iterating Over a List with JSTL/title>
/head>
body>
c:forEach items="${
requestScope.students}
" var="student">
Student Name: c:out value="${
student.name}
" />
br/>
/c:forEach>
/body>
/html>
在这个示例中,我们遍历了一个名为"students"的集合,显示每个学生的姓名。
c:forTokens>
c:forTokens>
标签也可用于遍历一个以特定分隔符分隔的字符串。
示例:
%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
!DOCTYPE html>
html>
head>
title>
Iterating Over a Comma-Separated String with JSTL/title>
/head>
body>
c:forTokens items="apple,banana,cherry" delims="," var="fruit">
Fruit: c:out value="${
fruit}
" />
br/>
/c:forTokens>
/body>
/html>
在这个示例中,我们遍历了一个以逗号分隔的水果字符串,并显示每个水果的名称。
控制流程标签
控制流程标签用于控制页面的执行流程,例如条件判断、循环等。
c:if>
前面已经介绍过c:if>
标签,它用于执行条件判断。
示例:
%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
!DOCTYPE html>
html>
head>
title>
Conditional Rendering with JSTL/title>
/head>
body>
c:if test="${
5 >
3}
">
5 is greater than 3.
/c:if>
/body>
/html>
在这个示例中,我们使用c:if>
标签检查条件${
5 >
3}
是否为真,如果为真,显示"5 is greater than 3."。
c:choose>
, c:when>
, c:otherwise>
前面已经介绍过c:choose>
, c:when>
, c:otherwise>
标签,它们用于创建多个条件分支。
示例:
%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
!DOCTYPE html>
html>
head>
title>
Multiple Conditions with JSTL/title>
/head>
body>
c:choose>
c:when test="${
5 >
10}
">
5 is greater than 10.
/c:when>
c:when test="${
5 10}
">
5 is less than 10.
/c:when>
c:otherwise>
5 is equal to 10.
/c:otherwise>
/c:choose>
/body>
/html>
在这个示例中,c:choose>
标签根据条件的结果选择不同的分支执行。
使用JSTL实现条件渲染
在实际开发中,我们经常需要根据条件来动态渲染页面上的内容。使用JSTL的条件标签可以轻松实现这一点。
示例:根据用户登录状态渲染内容
假设我们有一个Web应用,根据用户是否已登录来渲染不同的欢迎消息。
%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
!DOCTYPE html>
html>
head>
title>
Conditional Rendering Based on User Login with JSTL/title>
/head>
body>
c:choose>
c:when test="${
empty sessionScope.user}
">
p>
Welcome, Guest! Please a href="login.jsp">
log in/a>
./p>
/c:when>
c:otherwise>
p>
Welcome, c:out value="${
sessionScope.user.name}
" />
! a href="logout.jsp">
Log out/a>
/p>
/c:otherwise>
/c:choose>
/body>
/html>
在这个示例中,我们使用c:choose>
标签根据用户是否已登录来渲染不同的欢迎消息。如果sessionScope.user
为空(即用户未登录),则显示欢迎消息和登录链接。否则,显示欢迎消息和注销链接,以及用户的姓名。
使用JSTL处理表单数据
JSTL还可以用于处理表单数据,例如接收用户输入并在页面上显示或处理提交的表单数据。
示例:处理用户输入并显示
假设我们有一个简单的用户输入表单,用户可以在其中输入姓名并提交。我们可以使用JSTL来接收并显示用户的输入。
%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
!DOCTYPE html>
html>
head>
title>
Handling Form Data with JSTL/title>
/head>
body>
form action="processForm.jsp" method="post">
Enter your name: input type="text" name="name" />
input type="submit" value="Submit" />
/form>
c:if test="${
not empty param.name}
">
p>
You entered: c:out value="${
param.name}
" />
/p>
/c:if>
/body>
/html>
在这个示例中,我们创建了一个简单的表单,用户可以输入姓名并提交。然后,使用JSTL的c:if>
标签来检查表单参数param.name
是否存在,如果存在,则显示用户输入的姓名。
示例:处理表单数据并执行操作
除了显示用户输入,我们还可以使用JSTL来处理表单数据并执行相应的操作。假设我们有一个表单,用户可以选择操作类型并输入数据,然后根据操作类型执行不同的操作。
%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
!DOCTYPE html>
html>
head>
title>
Processing Form Data with JSTL/title>
/head>
body>
form action="processData.jsp" method="post">
Select an operation:
select name="operation">
option value="add">
Add/option>
option value="subtract">
Subtract/option>
option value="multiply">
Multiply/option>
option value="divide">
Divide/option>
/select>
br/>
Enter a number: input type="text" name="number" />
br/>
input type="submit" value="Submit" />
/form>
c:choose>
c:when test="${
param.operation == 'add'}
">
c:set var="result" value="${
param.number + 10}
" />
p>
Result of addition: c:out value="${
result}
" />
/p>
/c:when>
c:when test="${
param.operation == 'subtract'}
">
c:set var="result" value="${
param.number - 5}
" />
p>
Result of subtraction: c:out value="${
result}
" />
/p>
/c:when>
c:when test="${
param.operation == 'multiply'}
">
c:set var="result" value="${
param.number * 2}
" />
p>
Result of multiplication: c:out value="${
result}
" />
/p>
/c:when>
c:when test="${
param.operation == 'divide'}
">
c:set var="result" value="${
param.number / 3}
" />
p>
Result of division: c:out value="${
result}
" />
/p>
/c:when>
/c:choose>
/body>
/html>
在这个示例中,我们创建了一个表单,用户可以选择不同的操作类型,并输入一个数字。然后,根据所选的操作类型使用c:choose>
标签执行不同的操作,并将结果显示在页面上。
JSTL的其他标签
除了上面介绍的常用标签外,JSTL还提供了一些其他标签,用于处理日期时间、本地化、格式化等任务。以下是一些常用的JSTL标签:
c:forEach>
:用于迭代集合、数组或Map。c:forTokens>
:用于迭代分隔符分隔的字符串。c:set>
:用于创建和设置变量的值。c:remove>
:用于移除变量。c:url>
:用于生成URL链接。c:import>
:用于引入其他页面或资源。c:when>
、c:choose>
、c:otherwise>
:用于条件判断和多条件分支。c:out>
:用于输出文本或表达式的值。c:if>
:用于执行条件判断。c:param>
:用于设置URL参数。c:redirect>
:用于执行页面重定向。fmt:formatDate>
:用于格式化日期。fmt:formatNumber>
:用于格式化数字。fmt:setLocale>
:用于设置本地化。fmt:setTimeZone>
:用于设置时区。
结语
在本文中,我们深入了解了JavaServer Pages标准标签库(JSTL)的常用标签,包括输出标签、迭代标签、设置标签、URL标签、遍历集合、控制流程标签以及处理表单数据。通过使用这些标签,我们可以更轻松地开发Java Web应用程序,实现动态渲染页面和处理用户输入。
无论你是新手还是有经验的开发人员,掌握JSTL的常用标签将使你的Web开发工作更加高效和易于维护。希望本文对你有所帮助,鼓励你深入学习和实践JSTL,以构建强大的Web应用程序。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 【Java 进阶篇】用JSTL玩转Java:了解JSTL常用标签
本文地址: https://pptw.com/jishu/572005.html