הדרכת JSTL, דוגמה לתגי JSTL

JSTL מתייצבת עבור JSP Standard Tag Library. JSTL היא ספריית התגיות התקן שסופקה לשלוט בהתנהגות הדף של JSP. ניתן להשתמש בתגיות של JSTL לשם חזרה והצהרות שליטה, בינלאומיות, SQL וכו'. נבחן את תגיות ה-JSTL בפרטים במדריך הזה. בפעם הקודמת ראינו כיצד ניתן להשתמש ב-JSP EL וב-JSP Action Tags כדי לכתוב קוד JSP דומה ל-HTML, אך הפונקציות שלהם מוגבלות מאוד. לדוג, אין באפשרותנו לעבור דרך אוסף באמצעות EL או אלמנטי פעולה, ואין לנו אפשרות להימלט מתגי HTML כדי להציג אותם כטקסט בצד הלקוח. זהו המקום שבו יתרונות תגיות JSTL כי ניתן לעשות הרבה יותר באמצעותן.

JSTL

JSTL הוא חלק מ- API של Java EE וכלול ברוב תקיות ה-servlet. אך כדי להשתמש ב-JSTL בדפי ה-JSP שלנו, עלינו להוריד את קבצי ה-JSTL עבור ה-container של ה-servlet שלך. לרוב, תוכל למצוא אותם בפרויקטי הדוגמה של ההורדה של השרת ולהשתמש בהם. עליך לכלול את הספריות הללו בפרויקט האפליקציה שלך ב-director ה-WEB-INF/lib.

קבצי JSTL

קבצי JSTL הם ספציפיים ל-container, לדוג, ב-Tomcat, עלינו לכלול את קבצי ה-jar jstl.jar ו-standard.jar בנתיב בנייה של הפרויקט. אם הם אינם נמצאים ב-director lib של ה-container, עליך לכלול אותם באפליקציה שלך. אם יש לך פרויקט 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 כמו שמוצג למטה.

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

    במאמר זה, נבחן את תגי JSTL המרכזיים החשובים.

  2. תגי עיצוב ולוקליזציה של JSTL: תגי העיצוב של JSTL ניתנים לכלול לעיצוב של מספרים, תאריכים ותמיכה ב-i18n דרך לוקאליות וחבילות משאבים. אנו יכולים לכלול את תגי JSTL אלו ב-JSP באמצעות התחביר הבא:

    <%@ taglib uri="https://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
    
  3. תגי SQL של JSTL: תגי SQL של JSTL מספקים תמיכה באינטראקציה עם מסדי נתונים יחסיים כמו Oracle, MySql וכדומה. באמצעות תגי SQL של JSTL אנו יכולים להפעיל שאילתות למסד נתונים, ואנו יכולים לכלול את תגי JSTL אלו ב-JSP באמצעות התחביר הבא:

    <%@ taglib uri="https://java.sun.com/jsp/jstl/sql" prefix="sql" %>
    
  4. JSTL XML Tags: תגי JSTL XML משמשים לעבוד עם מסמכי XML כמו פענוח XML, המרת נתוני XML והערכת ביטויי XPath. התחביר לכלול תגי JSTL XML בעמוד JSP הוא:

    <%@ taglib uri="https://java.sun.com/jsp/jstl/xml" prefix="x" %>
    
  5. JSTL Functions Tags: תגי JSTL מספקים מספר פונקציות שאפשר להשתמש בהן לביצוע פעולות נפוצות, רובן הן לניהול מחרוזות כמו חיבור מחרוזות, פיצול מחרוזת וכו '. התחביר לכלול תגי JSTL functions בעמוד JSP הוא:

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

שים לב שכל כתובת URI של תגי JSTL סטנדרטיים מתחילה עם 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

בואו נצפה על כמה מהשימושים בתגי JSTL היסודיים ביישום אינטרנט פשוט. הפרויקט שלנו יכלול גוש Java וניצור רשימת אובייקטים ונגדיר כמה מאפיינים שישמשו ב-JSP. דף ה-JSP יראה כיצד לעבור על אוסף, להשתמש בלוגיקה תנאית עם EL וכמה שימושים נפוצים נוספים.

מדריך JSTL – קלאס Java Bean

package com.journaldev.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.journaldev.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.journaldev.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.journaldev.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

Source:
https://www.digitalocean.com/community/tutorials/jstl-tutorial-jstl-tags-example