Предоставляет набор тэгов для различных задач, включая обработку ошибок. Хотя JSTL не предоставляет прямых средств для глобальной обработки ошибок, она позволяет обрабатывать исключения и показывать соответствующие сообщения об ошибках на уровне страницы.
🟠Использование тега `<c:catch>`
Тег
<c:catch> используется для перехвата и обработки исключений внутри JSP-страницы. Он позволяет обрабатывать ошибки в JSP-страницах без использования скриплетов. Блок кода, который может вызвать исключение, обернут в тег <c:catch>. Если исключение возникает, оно сохраняется в переменной exception. Тег <c:if> используется для проверки, возникло ли исключение, и отображения сообщения об ошибке.<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:catch var="exception">
<%
// Это может вызвать исключение, например деление на ноль
int result = 10 / 0;
%>
</c:catch>
<c:if test="${not empty exception}">
<p>Произошла ошибка: ${exception.message}</p>
</c:if>
🟠Пример с JSTL и EL
Вы можете использовать JSTL вместе с Expression Language (EL) для более элегантного и чистого кода. Мы снова используем тег
<c:catch> для перехвата исключения. Внутри <c:catch> используется EL для выполнения операции, которая вызывает исключение. Исключение обрабатывается и отображается пользователю.<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<c:catch var="exception">
${1 / 0} <!-- Попытка деления на ноль вызовет исключение -->
</c:catch>
<c:if test="${not empty exception}">
<p>Произошла ошибка: ${fn:escapeXml(exception.message)}</p>
</c:if>
🟠Обработка ошибок при работе с внешними ресурсами
При работе с внешними ресурсами, такими как базы данных или веб-сервисы, также можно использовать JSTL для перехвата исключений. Мы настраиваем источник данных с помощью тега
<sql:setDataSource>. Запрос SQL обернут в тег <c:catch> для перехвата любых ошибок базы данных. Если возникает ошибка, она отображается пользователю.<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<sql:setDataSource var="ds" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/mydb"
user="root" password="password" />
<c:catch var="exception">
<sql:query dataSource="${ds}" var="result">
SELECT * FROM non_existent_table
</sql:query>
</c:catch>
<c:if test="${not empty exception}">
<p>Произошла ошибка базы данных: ${exception.message}</p>
</c:if>
Ставь 👍 и забирай 📚 Базу знаний