تعني JSTL مكتبة الوسوم القياسية لـ JSP. JSTL هي مكتبة الوسوم القياسية التي توفر وسومًا للتحكم في سلوك صفحة JSP. يمكن استخدام وسوم JSTL لعبارات التكرار والتحكم، والتعريب، و SQL وما إلى ذلك. سننظر في تفاصيل وسوم JSTL في هذا البرنامج التعليمي لـ JSTL. في وقت سابق، رأينا كيف يمكننا استخدام JSP EL و وسوم إجراء JSP لكتابة كود JSP مشابه لـ HTML ولكن وظيفتها محدودة جدًا. على سبيل المثال، لا يمكننا تكرار مجموعة باستخدام EL أو عناصر الإجراء ولا يمكننا الهروب من وسوم HTML لعرضها كنص في العميل. هنا تأتي وسوم JSTL بفائدتها لأننا يمكننا القيام بالكثير أكثر باستخدامها.
JSTL
JSTL هو جزء من واجهة برمجة تطبيقات Java EE ويتم تضمينه في معظم حاويات servlet. ولكن لاستخدام JSTL في صفحات JSP الخاصة بنا ، نحتاج إلى تنزيل ملفات JSTL jars الخاصة بحاوية servlet الخاص بك. في معظم الأحيان ، يمكنك العثور عليها في مشاريع الأمثلة لتحميل الخادم ويمكنك استخدامها. يجب عليك تضمين هذه المكتبات في مشروع تطبيق الويب الخاص بك في دليل WEB-INF/lib.
JSTL jars
تعتمد مكتبات JSTL على الحاوية بشكل خاص ، على سبيل المثال في Tomcat ، يجب علينا تضمين ملفات jstl.jar و standard.jar في مسار بناء المشروع. إذا لم تكن موجودة في دليل مكتبات الحاوية ، يجب عليك تضمينها في تطبيقك. إذا كان لديك مشروع 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 Tags
بناءً على وظائف JSTL ، يتم تصنيفها إلى خمسة أنواع.
-
وسوم JSTL Core: توفر وسوم JSTL Core دعمًا للتكرار والمنطق الشرطي والتقاط الاستثناء وعنوان URL والإعادة التوجيه أو التحويل للاستجابة إلخ. لاستخدام وسوم JSTL Core ، يجب أن نضمن تضمينها في صفحة JSP كما هو موضح أدناه.
<%@ taglib uri="https://java.sun.com/jsp/jstl/core" prefix="c" %>
في هذا المقال، سنتناول وسوم JSTL Core الهامة.
-
وسوم JSTL Formatting وLocalisation: توفر وسوم JSTL Formatting لتنسيق الأرقام والتواريخ ودعم i18n من خلال اللغات المحلية وحزم الموارد. يمكننا تضمين هذه الوسوم jstl في JSP بالنحو التالي:
<%@ taglib uri="https://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
-
وسوم JSTL SQL: توفر وسوم JSTL SQL دعمًا للتفاعل مع قواعد البيانات العلائقية مثل Oracle و MySql إلخ. باستخدام وسوم JSTL SQL ، يمكننا تشغيل استعلامات قاعدة البيانات. نقوم بتضمين هذه الوسوم JSTL في JSP بالنحو التالي:
<%@ taglib uri="https://java.sun.com/jsp/jstl/sql" prefix="sql" %>
-
وسوم JSTL XML: تُستخدم وسوم JSTL XML للعمل مع مستندات XML مثل تحليل XML، تحويل بيانات XML وتقييم تعابير XPath. الصيغة لتضمين وسوم JSTL XML في صفحة JSP هي:
<%@ taglib uri="https://java.sun.com/jsp/jstl/xml" prefix="x" %>
-
وسوم JSTL Functions: توفر وسوم JSTL عددًا من الوظائف التي يمكننا استخدامها لأداء العمليات الشائعة، ومعظمها لتلاعب السلسلة مثل اتحاد السلسلة، تقسيم السلسلة وما إلى ذلك. الصيغة لتضمين وظائف JSTL في صفحة 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 في تطبيق ويب بسيط. سيتضمن مشروعنا فئة جافا بين وسنقوم بإنشاء قائمة من الكائنات وتعيين بعض السمات التي سيتم استخدامها في JSP. ستظهر صفحة JSP كيفية التكرار عبر مجموعة، باستخدام المنطق الشرطي مع EL وبعض الاستخدامات الشائعة الأخرى.
دليل JSTL – فئة جافا بين
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 – فئة الخدمة
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