JSTL完全教程:常用标签示例与实战应用

2026-02-13 07:55:17 / 五人足球世界杯

这是文章《JSTL教程,JSTL标签示例》的第1部分(共2部分)。

JSTL是JSP标准标签库(JavaServer Pages Standard Tag Library)的缩写。它是一个提供标签来控制JSP页面行为的标准标签库。JSTL标签可用于迭代和控制语句、国际化、SQL操作等。我们将在本JSTL教程中详细介绍JSTL标签的使用方法。之前我们了解了如何使用JSP EL(表达式语言)和JSP动作标签来编写JSP代码,但它们的功能非常有限。例如,我们无法使用EL或动作元素循环遍历集合,也无法转义HTML标签以在客户端以文本形式显示它们。这就是JSTL标签的优势所在,因为使用JSTL标签可以实现更多功能。

JSTL概述

JSTL是Java EE API的一部分,包含在大多数Servlet容器中。但是要在我们的JSP页面中使用JSTL,我们需要为Servlet容器下载JSTL的JAR包。大多数情况下,您可以在服务器提供的示例项目中找到它们并直接使用。您需要将这些库文件包含在您的Web应用程序项目的WEB-INF/lib目录中。

JSTL的JAR文件

在使用Tomcat等容器时,JSTL JAR文件是特定于容器的。在项目的构建路径中,我们需要包含jstl.jar和standard.jar这两个JAR文件。如果它们不在容器的lib目录中,您需要将它们包含在您的应用程序中。如果您有一个Maven项目,在pom.xml文件中应添加以下依赖关系,否则在JSP页面中会出现以下错误 – Eclipse找不到”https://java.sun.com/jsp/jstl/core”标签库描述符。

jstl

jstl

1.2

taglibs

standard

1.1.2

JSTL标签分类

根据功能,JSTL标签被分为五种类型。

JSTL核心标签:JSTL核心标签提供了对迭代、条件逻辑、异常捕获、URL处理、转发或重定向响应等的支持。要使用JSTL核心标签,我们需要在JSP页面中包含它,如下所示:

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

JSTL格式化和本地化标签:JSTL格式化标签用于对数字、日期进行格式化,并通过区域设置和资源包提供国际化支持。我们可以使用以下语法在JSP中包含这些JSTL标签:

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

JSTL SQL标签:JSTL SQL标签提供与关系型数据库(如Oracle、MySQL等)交互的支持。使用JSTL SQL标签,我们可以运行数据库查询。在JSP中包含这些JSTL标签的语法如下:

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

JSTL XML标签:JSTL XML标签用于处理XML文档,如解析XML、转换XML数据和XPath表达式求值等。在JSP页面中包含JSTL XML标签的语法如下:

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

JSTL函数标签:JSTL函数标签提供了一系列常用操作的函数,其中大部分用于字符串操作,如字符串拼接、字符串分割等。在JSP页面中包含JSTL函数的语法如下:

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

请注意,所有JSTL标准标签的URI都以https://java.sun.com/jsp/jstl/开头,我们可以使用任何前缀,但最好使用上述定义的前缀,因为这是通用标准,使用它们可以避免混淆。

JSTL核心标签

以下表格列出了常用的JSTL核心标签:

JSTL核心标签

描述

用于在JSP页面中输出内容,可以与EL表达式结合使用

类似于或include指令,用于导入其他资源

将请求重定向到另一个资源

在指定作用域中设置变量值

从指定作用域中移除变量

捕获异常并将其包装到一个对象中

简单的条件逻辑标签,可与EL结合使用,也可用于处理捕获的异常

简单的条件标签,为互斥的条件操作建立上下文,由标记

的子标签,当其条件计算为’true’时包含其主体内容

的子标签,当所有条件计算为’false’时包含其主体内容

用于遍历集合

用于遍历由分隔符分隔的标记

一起使用以传递参数

用于创建带有可选查询字符串参数的URL

JSTL教程示例

让我们来看一个简单的Web应用程序中使用JSTL核心标签的示例。我们的项目将包括一个Java Bean,创建一个对象列表并设置一些属性,这些属性将在JSP页面中使用。JSP页面将展示如何迭代集合、使用EL进行条件逻辑以及一些其他常见用法。

JSTL教程 – Java Bean类

package com.Olivia.model;

public class Employee {

private int id;

private String name;

private String role;

public Employee() {

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getRole() {

return role;

}

public void setRole(String role) {

this.role = role;

}

}

JSTL教程 – Servlet类

package com.Olivia.servlet;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

import javax.servlet.RequestDispatcher;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import com.Olivia.model.Employee;

@WebServlet("/HomeServlet")

public class HomeServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

// 处理GET请求

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// 创建员工列表

List empList = new ArrayList();

Employee emp1 = new Employee();

emp1.setId(1); emp1.setName("张三");emp1.setRole("开发人员");

Employee emp2 = new Employee();

emp2.setId(2); emp2.setName("李四");emp2.setRole("经理");

empList.add(emp1);empList.add(emp2);

request.setAttribute("empList", empList);

// 设置HTML标签数据

request.setAttribute("htmlTagData", "
创建一个新行。");

request.setAttribute("url", "https://www.scdev.com");

RequestDispatcher rd = getServletContext().getRequestDispatcher("/home.jsp");

rd.forward(request, response);

}

}

JSTL 教程 – JSP页面home.jsp代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

首页

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

<%-- 使用JSTL的forEach和out标签循环列表并在表格中显示项目 --%>

ID姓名角色



<%-- 带HTML转义的c:if和c:out简单示例 --%>



<%-- c:set示例,用于设置变量值 --%>



<%-- c:catch示例 --%>

<% int x = 5/0;%>

异常信息为:${exception}

异常消息:${exception.message}



<%-- c:url示例 --%>

">JournalDev

现在,当我们使用URL https://localhost:8080/JSTLExample/HomeServlet运行应用程序时,会得到如下图所示的响应。在上述JSTL示例中,我们使用c:catch来捕捉JSP服务方法中的异常,这与使用错误页面配置的JSP异常处理不同。这就是JSTL标签的快速概述和JSTL核心标签使用示例的全部内容。参考文献:JSTL维基百科页面。