JSTL教程,JSTL标签示例

JSTL是JSP标准标签库的缩写。JSTL是提供标签来控制JSP页面行为的标准标签库。JSTL标签可用于迭代和控制语句、国际化、SQL等。我们将在此JSTL教程中详细介绍JSTL标签。之前我们了解了如何使用JSP EL和JSP Action标签来像HTML一样编写JSP代码,但它们的功能非常有限。例如,我们无法使用EL或动作元素循环遍历集合,也无法转义HTML标签以在客户端以文本形式显示它们。这就是JSTL标签的妙处,因为我们可以从JSTL标签中做更多的事情。

JSTL可以用中国的母语进行改述。

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

JSTL的Jars文件

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

<dependency>
	<groupId>jstl</groupId>
	<artifactId>jstl</artifactId>
	<version>1.2</version>
</dependency>
<dependency>
	<groupId>taglibs</groupId>
	<artifactId>standard</artifactId>
	<version>1.1.2</version>
</dependency>

JSTL 标签

根据JSTL函数,它们被分为五种类型。

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

 

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

在本文中,我们将重点介绍 JSTL 核心标签。

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 Core Tag Description
<c:out> To write something in JSP page, we can use EL also with this tag
<c:import> Same as jsp:include or include directive
<c:redirect> redirect request to another resource
<c:set> To set the variable value in given scope.
<c:remove> To remove the variable from given scope
<c:catch> To catch the exception and wrap it into an object.
<c:if> Simple conditional logic, used with EL and we can use it to process the exception from <c:catch>
<c:choose> Simple conditional tag that establishes a context for mutually exclusive conditional operations, marked by <c:when> and <c:otherwise>
<c:when> Subtag of <c:choose> that includes its body if its condition evalutes to ‘true’.
<c:otherwise> Subtag of <c:choose> that includes its body if its condition evalutes to ‘false’.
<c:forEach> for iteration over a collection
<c:forTokens> for iteration over tokens separated by a delimiter.
<c:param> used with <c:import> to pass parameters
<c:url> to create a URL with optional query string parameters

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;
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		List<Employee> empList = new ArrayList<Employee>();
		Employee emp1 = new Employee();
		emp1.setId(1); emp1.setName("Pankaj");emp1.setRole("Developer");
		Employee emp2 = new Employee();
		emp2.setId(2); emp2.setName("Meghna");emp2.setRole("Manager");
		empList.add(emp1);empList.add(emp2);
		request.setAttribute("empList", empList);
		
		request.setAttribute("htmlTagData", "<br/> creates a new line.");
		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=US-ASCII"
    pageEncoding="US-ASCII"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Home Page</title>
<%@ taglib uri="https://java.sun.com/jsp/jstl/core" prefix="c" %>
<style>
table,th,td
{
border:1px solid black;
}
</style>
</head>
<body>
<%-- Using JSTL forEach and out to loop a list and display items in table --%>
<table>
<tbody>
<tr><th>ID</th><th>Name</th><th>Role</th></tr>
<c:forEach items="${requestScope.empList}" var="emp">
<tr><td><c:out value="${emp.id}"></c:out></td>
<td><c:out value="${emp.name}"></c:out></td>
<td><c:out value="${emp.role}"></c:out></td></tr>
</c:forEach>
</tbody>
</table>
<br><br>
<%-- simple c:if and c:out example with HTML escaping --%>
<c:if test="${requestScope.htmlTagData ne null }">
<c:out value="${requestScope.htmlTagData}" escapeXml="true"></c:out>
</c:if>
<br><br>
<%-- c:set example to set variable value --%>
<c:set var="id" value="5" scope="request"></c:set>
<c:out value="${requestScope.id }" ></c:out>
<br><br>
<%-- c:catch example --%>
<c:catch var ="exception">
   <% int x = 5/0;%>
</c:catch>

<c:if test = "${exception ne null}">
   <p>Exception is : ${exception} <br>
   Exception Message: ${exception.message}</p>
</c:if>
<br><br>
<%-- c:url example --%>
<a href="<c:url value="${requestScope.url }"></c:url>">JournalDev</a>
</body>
</html>

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

广告
将在 10 秒后关闭
bannerAds