Java | Вопросы собесов – Telegram
Java | Вопросы собесов
11.4K subscribers
34 photos
2 videos
1.13K links
Download Telegram
🤔 Как организована HashMap?

HashMap в Java использует хеш-таблицу для хранения пар ключ-значение. Ключи преобразуются в хеш-коды с помощью метода `hashCode()`, и на основе этих хеш-кодов определяется место хранения значений. В случае коллизий (когда несколько ключей имеют одинаковый хеш-код), HashMap использует цепочки (связанные списки или деревья) для хранения нескольких элементов в одной корзине. HashMap обеспечивает доступ к элементам за время O(1) в среднем случае.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26🔥4
🤔 Что такое JSTL, JSP Standard tag library?

Это библиотека стандартных тегов для JSP (JavaServer Pages), которая предоставляет набор общих функций, которые разработчики часто используют в веб-приложениях.

🟠Core Tags (Основные теги)
Эти теги включают основные функции для управления потоком выполнения (например, условные операторы и циклы), а также для работы с URL, редиректами и параметрами. <c:if> условное выполнение блока кода.
<c:if test="${param.user != null}">
Привет, ${param.user}!
</c:if>


<c:forEach> итерация по коллекциям.
<c:forEach var="item" items="${itemList}">
${item}
</c:forEach>


🟠Formatting Tags (Теги форматирования)
Эти теги используются для форматирования и интернационализации данных, таких как даты, числа и сообщения. <fmt:formatNumber> форматирование чисел.
<fmt:formatNumber value="12345.67" type="currency" />


<fmt:message> вывод локализованного сообщения.
<fmt:message key="welcome.message" />


🟠SQL Tags (SQL теги)
Эти теги предоставляют простой способ выполнения SQL-запросов и работы с базами данных.
<sql:query> выполнение SQL-запроса.
<sql:query var="result" dataSource="${dataSource}">
SELECT * FROM users
</sql:query>


🟠XML Tags (XML теги)
Эти теги используются для работы с XML-документами, их парсинга и преобразования. <x:parse> парсинг XML-документа.
<x:parse var="xmlDoc" xml="${xmlString}" /> 


<x:out> вывод содержимого XML-узла.
<x:out select="$xmlDoc/root/element" />


🟠Function Tags (Функции)
Эти теги предоставляют набор полезных функций, таких как работа со строками. <fn:length> определение длины строки или коллекции.
${fn:length(myList)}


<fn:contains> проверка, содержит ли строка указанную подстроку.
${fn:contains(myString, 'substring')}


🚩Плюсы

Читаемость и простота кода
Использование тегов вместо Java-кода улучшает читаемость JSP-страниц и делает их более понятными для разработчиков.
Меньше кода
JSTL позволяет сократить количество Java-кода на странице, делая код более компактным и легко сопровождаемым.
Модульность и повторное использование
Теги JSTL позволяют выделить общие функции в отдельные компоненты, которые можно многократно использовать в разных частях приложения.
Интернационализация
Теги форматирования и работы с сообщениями упрощают процесс локализации веб-приложений.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍1
🤔 В чём различие между интерфейсом и абстрактным классом?

Интерфейс определяет набор методов, которые должны быть реализованы классами, но не может содержать реализацию (до Java 8, когда появились default методы). Абстрактный класс может содержать как абстрактные методы, так и методы с реализацией, а также может иметь поля. Класс может реализовать несколько интерфейсов, но наследовать только один абстрактный класс. Абстрактные классы используются, когда требуется частичная реализация, а интерфейсы — для создания общего контракта.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍313
🤔 Из каких групп тегов состоит библиотека JSTL?

🟠Core Tags (Основные теги)
Эти теги предоставляют основные функции для управления потоком выполнения, работы с переменными, URL, редиректами и параметрами.
<c:out> – вывод значения выражения.
<c:set> – установка значений переменных.
<c:remove> – удаление атрибутов из областей видимости (scope).
<c:catch> – перехват и обработка исключений.
<c:if> – условное выполнение блока кода.
<c:choose>, <c:when>, <c:otherwise> – конструкция для многозначного условия (аналог switch-case).
<c:forEach> – итерация по коллекциям или массивам.
<c:forTokens> – итерация по токенам строки.
<c:import> – импорт содержимого из URL.
<c:url> – создание URL с параметрами.
<c:redirect> – перенаправление на другой URL.
<c:param> – добавление параметров к URL.

🟠Formatting Tags (Теги форматирования)
Эти теги используются для интернационализации и форматирования данных, таких как даты, числа и тексты.
<fmt:formatNumber> – форматирование чисел.
<fmt:parseNumber> – разбор строк в числа.
<fmt:formatDate> – форматирование дат.
<fmt:parseDate> – разбор строк в даты.
<fmt:bundle> – загрузка ресурса с локализованными сообщениями.
<fmt:message> – вывод локализованного сообщения.
<fmt:setLocale> – установка локали.
<fmt:setBundle> – установка текущего набора ресурсов.
<fmt:timeZone> – установка временной зоны.

🟠SQL Tags (SQL теги)
Эти теги предоставляют функциональность для работы с базами данных, выполнения SQL-запросов и обработки результатов.
<sql:setDataSource> – установка источника данных.
<sql:query> – выполнение SQL-запроса.
<sql:update> – выполнение SQL-обновления (INSERT, UPDATE, DELETE).
<sql:param> – установка параметров для SQL-запросов.
<sql:dateParam> – установка даты в SQL-запросах.
<sql:transaction> – выполнение SQL-операций в транзакции.

🟠XML Tags (XML теги)
Эти теги используются для работы с XML-документами: их парсинга, модификации и отображения.
<x:parse> – парсинг XML-документа.
<x:out> – вывод содержимого XML-узла.
<x:set> – установка значений в XML-документе.
<x:forEach> – итерация по XML-узлам.
<x:transform> – преобразование XML-документа с использованием XSLT.

🟠Function Tags (Функции)
Эти теги предоставляют набор полезных функций, таких как работа со строками и коллекциями.
<fn:contains> – проверка, содержит ли строка указанную подстроку.
<fn:containsIgnoreCase> – проверка, содержит ли строка указанную подстроку без учёта регистра.
<fn:endsWith> – проверка, заканчивается ли строка указанной подстрокой.
<fn:startsWith> – проверка, начинается ли строка с указанной подстроки.
<fn:escapeXml> – экранирование специальных символов в XML.
<fn:join> – объединение элементов коллекции в строку с указанным разделителем.
<fn:length> – определение длины строки или коллекции.
<fn:replace> – замена всех вхождений подстроки на другую подстроку.
<fn:split> – разбиение строки на массив по указанному разделителю.
<fn:substring> – получение подстроки.
<fn:substringAfter> – получение подстроки, которая следует за указанной подстрокой.
<fn:substringBefore> – получение подстроки, которая предшествует указанной подстроке.
<fn:toLowerCase> – преобразование строки к нижнему регистру.
<fn:toUpperCase> – преобразование строки к верхнему регистру.
<fn:trim> – удаление пробелов в начале и конце строки.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👾2
🤔 В чём разница между примитивом и ссылочным типом данных?

Примитивные типы данных в Java (int, boolean, char и др.) хранят непосредственно значения, тогда как ссылочные типы (объекты и массивы) хранят ссылки на объекты в памяти. Примитивные типы располагаются в стеке и не могут быть null, в отличие от ссылочных, которые размещаются в куче и могут быть null. Примитивные типы имеют фиксированный размер, тогда как размер ссылочных зависит от структуры объекта. Примитивы быстрее по сравнению с ссылочными типами из-за отсутствия накладных расходов на управление памятью.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍372
This media is not supported in your browser
VIEW IN TELEGRAM
Программист — лекарство от больных тимлидов, тупых багов и тех самых митов в 10 утра ☠️

Здесь собирают лучшие мемы про айтишников, чтобы спасти вашу психику от died'осов на работе.

Идеально зачиллить вечерком и скинуть друзьям: @progeri
😁9
🤔 Как можно расширить функциональность JSP?

🟠Использование тегов (Tag Libraries):
JSTL (JavaServer Pages Standard Tag Library): JSTL предоставляет общие функции, такие как циклы, условия, работа с XML и форматом даты.
Пользовательские теги: Вы можете создавать собственные теги для повторно используемой логики. Это помогает избежать повторения кода и улучшает читаемость JSP-страниц.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<ul>
<c:forEach var="item" items="${itemList}">
<li>${item}</li>
</c:forEach>
</ul>


🟠Сервлеты и фильтры
Сервлеты: Можно расширить функциональность JSP, комбинируя их с сервлетами. Сервлеты могут обрабатывать сложную бизнес-логику и передавать результаты на JSP для отображения.
@WebServlet("/processData")
public class DataServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String data = processData();
request.setAttribute("data", data);
request.getRequestDispatcher("/display.jsp").forward(request, response);
}
}


Фильтры: Позволяют перехватывать запросы и ответы, модифицировать их, например, для аутентификации или логирования.
@WebFilter("/secure/*")
public class AuthFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// Проверка аутентификации
chain.doFilter(request, response);
}
}


🟠Включение других JSP и статических файлов
<jsp:include>: Включение других JSP-файлов или статических ресурсов. Это помогает повторно использовать компоненты и уменьшает дублирование кода.
<jsp:include page="header.jsp" />
<jsp:include page="footer.jsp" />


🟠Использование сторонних библиотек
Apache Struts, Spring MVC: Эти фреймворки обеспечивают мощные возможности для создания веб-приложений с использованием JSP. Они упрощают управление запросами и представлениями, а также предоставляют интеграцию с различными компонентами Java EE.

🟠JavaBeans
Использование JavaBeans для хранения и манипулирования данными. Это способствует разделению бизнес-логики и представления.
<jsp:useBean id="user" class="com.example.User" scope="session"/>
<jsp:setProperty name="user" property="name" value="John Doe"/>
<p>Welcome, <jsp:getProperty name="user" property="name"/>!</p>


🟠AJAX и JavaScript
Добавление динамического взаимодействия с помощью AJAX и JavaScript. Это позволяет обновлять части страницы без полной перезагрузки, улучшая пользовательский опыт.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Чем отличаются LinkedList и ArrayList?

ArrayList использует массив для хранения элементов, что обеспечивает быстрый доступ по индексу, но медленные операции вставки и удаления в середине списка. LinkedList основан на двусвязном списке, что делает вставку и удаление быстрыми операциями, но доступ по индексу медленным, так как требуется последовательный обход элементов. ArrayList предпочтителен, когда важен быстрый доступ к элементам, а LinkedList — когда приоритетом являются частые вставки и удаления. Также LinkedList потребляет больше памяти за счёт хранения ссылок на соседние элементы.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22🔥7
🤔 Что знаешь о написании пользовательских JSP тегов?

Они позволяют инкапсулировать повторяющуюся логику, улучшать читаемость кода и упрощать его поддержку. Пользовательские теги создаются с использованием Java и могут выполнять различные функции, такие как генерация динамического контента, выполнение сложных вычислений или обработка форм.

🟠Создание обработчика тега (Tag Handler)
Это класс Java, который реализует интерфейс Tag или расширяет один из классов базовой реализации, таких как TagSupport или BodyTagSupport.
package com.example.tags;

import javax.servlet.jsp.tagext.TagSupport;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import java.io.IOException;

public class HelloTag extends TagSupport {
private String name;

public void setName(String name) {
this.name = name;
}

@Override
public int doStartTag() throws JspException {
JspWriter out = pageContext.getOut();
try {
out.print("Hello, " + name + "!");
} catch (IOException e) {
throw new JspException(e);
}
return SKIP_BODY; // Не обрабатываем тело тега
}
}


🟠Создание дескриптора тега (Tag Denoscriptor)
Это файл XML, который описывает теги и их атрибуты. Обычно он называется taglib.tld и размещается в директории WEB-INF.
<?xml version="1.0" encoding="ISO-8859-1"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<tlib-version>1.0</tlib-version>
<short-name>example</short-name>
<uri>http://www.example.com/tags</uri>

<tag>
<name>hello</name>
<tag-class>com.example.tags.HelloTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>name</name>
<required>true</required>
</attribute>
</tag>
</taglib>


🟠Использование пользовательского тега в JSP
Необходимо импортировать их в JSP-страницу с помощью директивы taglib и затем применять тег.
<%@ taglib uri="http://www.example.com/tags" prefix="ex" %>
<html>
<body>
<ex:hello name="World"/>
</body>
</html>


🟠Компиляция и развертывание
Убедитесь, что ваши классы в соответствующих директориях (WEB-INF/classes). Убедитесь, что файл taglib.tld находится в директории WEB-INF.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🤔 Какие есть принципы ООП?

Принципы ООП включают: инкапсуляцию (скрытие деталей реализации и защита данных через методы доступа), наследование (создание новых классов на основе существующих), полиморфизм (способность объектов разных классов реагировать на одни и те же вызовы методов) и абстракцию (выделение ключевых характеристик объекта и исключение ненужных деталей). Эти принципы способствуют созданию более структурированного, расширяемого и поддерживаемого кода.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍34🔥3🤯21
🤔 Приведи пример использования собственных тегов?

1⃣Создание обработчика тега (Tag Handler)
Напишем класс обработчика тега, который выводит персонализированное приветствие.
package com.example.tags;

import javax.servlet.jsp.tagext.TagSupport;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import java.io.IOException;

public class GreetingTag extends TagSupport {
private String name;

// Сеттер для установки значения атрибута "name"
public void setName(String name) {
this.name = name;
}

@Override
public int doStartTag() throws JspException {
JspWriter out = pageContext.getOut();
try {
if (name != null && !name.isEmpty()) {
out.print("Hello, " + name + "!");
} else {
out.print("Hello, Guest!");
}
} catch (IOException e) {
throw new JspException(e);
}
return SKIP_BODY; // Не обрабатываем тело тега
}
}


2⃣Создание дескриптора тега (Tag Denoscriptor)
Создадим файл taglib.tld, описывающий наш тег.
<?xml version="1.0" encoding="ISO-8859-1" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<tlib-version>1.0</tlib-version>
<short-name>example</short-name>
<uri>http://www.example.com/tags</uri>

<tag>
<name>greeting</name>
<tag-class>com.example.tags.GreetingTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>name</name>
<required>false</required>
</attribute>
</tag>
</taglib>


3⃣Использование пользовательского тега в JSP
Создадим JSP-страницу, на которой будем использовать наш пользовательский тег.
<%@ taglib uri="http://www.example.com/tags" prefix="ex" %>
<html>
<head>
<noscript>Custom Tag Example</noscript>
</head>
<body>
<h1>Using Custom Tag</h1>
<ex:greeting name="Alice"/>
<br>
<ex:greeting/>
</body>
</html>


4⃣Компиляция и развертывание
Убедитесь, что файл GreetingTag.class размещен в директории WEB-INF/classes/com/example/tags/. Убедитесь, что файл taglib.tld находится в директории WEB-INF.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что такое Stream в Java?

Stream в Java — это последовательность данных, поддерживающая операции над элементами в функциональном стиле, такие как фильтрация, преобразование и агрегирование. Streams не хранят данные, а обрабатывают их по мере необходимости, что позволяет работать с большими объемами данных без создания дополнительных коллекций. Стримы могут быть как конечными (например, sum(), collect()), так и промежуточными (filter(), map()). Stream API поддерживает параллельную обработку данных для повышения производительности.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
🤔 Как сделать перенос строки в HTML средствами JSP?

В JSP можно сделать перенос строки в HTML несколькими способами. Основные методы, которые включают использование стандартных HTML-тегов, предопределенных библиотек тегов JSP (например, JSTL) и создание собственных тегов.

🟠Использование стандартных HTML-тегов
Наиболее простой способ вставить перенос строки в HTML - это использовать тег <br/>, который обозначает разрыв строки.
<%
String text = "This is line 1.\nThis is line 2.\nThis is line 3.";
text = text.replace("\n", "<br/>");
%>
<%= text %>


🟠Использование JSTL и функции форматирования
JSTL (JavaServer Pages Standard Tag Library) предоставляет мощные инструменты для работы с текстом и данными. Мы можем использовать функции JSTL для замены символов новой строки на теги <br/>.
Подключите библиотеку JSTL
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>


Используйте JSTL для замены символов новой строки
<%
String text = "This is line 1.\nThis is line 2.\nThis is line 3.";
%>
<c:out value="${fn:replace(text, '\n', '<br/>')}" escapeXml="false"/>


🟠Создание собственного тега для переноса строки
Если вам часто нужно делать переносы строк, имеет смысл создать пользовательский тег для этой задачи.
Создайте класс обработчика тега
package com.example.tags;

import javax.servlet.jsp.tagext.TagSupport;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import java.io.IOException;

public class LineBreakTag extends TagSupport {
private String text;

public void setText(String text) {
this.text = text;
}

@Override
public int doStartTag() throws JspException {
JspWriter out = pageContext.getOut();
try {
if (text != null) {
text = text.replace("\n", "<br/>");
out.print(text);
}
} catch (IOException e) {
throw new JspException(e);
}
return SKIP_BODY;
}
}


Определите дескриптор тега (taglib.tld)
<?xml version="1.0" encoding="ISO-8859-1" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<tlib-version>1.0</tlib-version>
<short-name>example</short-name>
<uri>http://www.example.com/tags</uri>

<tag>
<name>lineBreak</name>
<tag-class>com.example.tags.LineBreakTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>text</name>
<required>true</required>
</attribute>
</tag>
</taglib>


Используйте пользовательский тег в JSP
<%@ taglib uri="http://www.example.com/tags" prefix="ex" %>
<html>
<head>
<noscript>Custom Line Break Tag Example</noscript>
</head>
<body>
<h1>Using Custom Line Break Tag</h1>
<ex:lineBreak text="This is line 1.\nThis is line 2.\nThis is line 3."/>
</body>
</html>


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Что такое ACID?

ACID — это набор принципов, которые обеспечивают надёжность транзакций в базах данных: атомарность (все операции транзакции выполняются как единое целое или не выполняются вовсе), согласованность (после завершения транзакции данные остаются в согласованном состоянии), изолированность (транзакции не влияют друг на друга) и долговечность (данные сохраняются после успешного завершения транзакции). Соблюдение этих принципов помогает предотвратить повреждение или потерю данных.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥8
🤔 Почему не нужно конфигурировать стандартные JSP теги в web.xml?

🚩Причины

🟠Простота использования стандартных тегов
Стандартные JSP теги, такие как <%@ page %>, <%@ include %>, <%@ taglib %>, а также теги JSTL (JavaServer Pages Standard Tag Library), уже встроены в JSP контейнер и готовы к использованию без дополнительной конфигурации. Это упрощает разработку и уменьшает количество необходимого конфигурационного кода.

🟠Автоматическое определение контейнером
Современные JSP контейнеры (например, Apache Tomcat) автоматически распознают и обрабатывают стандартные теги JSP и JSTL без необходимости явного указания в web.xml. Это позволяет избежать излишних конфигурационных шагов и сконцентрироваться на разработке бизнес-логики.

🟠Использование аннотаций
Вместо конфигурации в web.xml в современных Java веб-приложениях часто используются аннотации для определения сервлетов, фильтров и слушателей. Аннотации упрощают процесс конфигурации и делают код более чистым и читабельным.

🟠Стандартизация и совместимость
Стандартные теги JSP и JSTL были созданы для стандартизации и упрощения разработки JSP страниц. Они широко поддерживаются всеми контейнерами, что обеспечивает их правильную работу без дополнительной конфигурации.

🚩Пример использования JSTL без конфигурации в web.xml
В данном примере используется стандартная библиотека тегов JSTL (библиотека JSTL core). Благодаря встроенной поддержке JSTL в контейнере, нет необходимости указывать эту библиотеку в web.xml.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<body>
<c:if test="${not empty user}">
<p>Привет, ${user.name}!</p>
</c:if>
</body>
</html>


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🤔 Что такое функциональный интерфейс?

Функциональный интерфейс в Java — это интерфейс, который содержит только один абстрактный метод и может быть реализован с помощью лямбда-выражений или ссылок на методы. Примеры функциональных интерфейсов включают Runnable, Callable и Function. Такие интерфейсы используются в функциональном программировании для передачи поведения (функций) в методы. Аннотация @FunctionalInterface помогает обозначить, что интерфейс предназначен для функционального программирования.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥5
🤔 Как можно обработать ошибки JSP страниц?

Как и в любой другой веб-разработке, ошибки могут возникать по различным причинам, таким как некорректный ввод данных, ошибки сервера, проблемы с базой данных и т.д. Чтобы эффективно обработать эти ошибки.

🚩JSP предоставляет несколько механизмов

🟠Директива `errorPage`
Эта директива указывается в исходной JSP-странице и задает путь к другой странице, которая будет использоваться для отображения сообщений об ошибках. Когда на этой странице происходит ошибка, пользователь будет перенаправлен на страницу error.jsp.
<%@ page errorPage="error.jsp" %>


🟠Атрибут `isErrorPage`
На странице, которая обрабатывает ошибки (например, error.jsp), необходимо указать атрибут isErrorPage, чтобы сообщить контейнеру JSP, что эта страница предназначена для обработки ошибок.
<%@ page isErrorPage="true" %>


На этой странице вы можете использовать встроенный объект exception для получения информации об ошибке:
<%@ page isErrorPage="true" %>
<html>
<head>
<noscript>Ошибка</noscript>
</head>
<body>
<h1>Произошла ошибка</h1>
<p>Ошибка: <%= exception.getMessage() %></p>
</body>
</html>


🚩Конфигурирование в `web.xml`

Вы можете указать глобальную обработку ошибок в конфигурационном файле web.xml вашего веб-приложения. Это позволяет обрабатывать ошибки на уровне сервлета. Если сервер вернет ошибку 404 (страница не найдена), пользователь будет перенаправлен на страницу notfound.jsp. Если возникает любое исключение (например, java.lang.Throwable), пользователь будет перенаправлен на страницу error.jsp.
<error-page>
<error-code>404</error-code>
<location>/notfound.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error.jsp</location>
</error-page>


🚩Использование `try-catch` блоков в скриплетах

В некоторых случаях вы можете использовать блоки try-catch непосредственно в JSP для обработки определенных исключений:
<%@ page import="java.sql.*, java.io.*" %>
<%
try {
// код, который может вызвать исключение
} catch (SQLException e) {
out.println("Ошибка базы данных: " + e.getMessage());
} catch (IOException e) {
out.println("Ошибка ввода/вывода: " + e.getMessage());
} catch (Exception e) {
out.println("Произошла ошибка: " + e.getMessage());
}
%>


Ставь
👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32🤯1
🤔 Что такое bean?

Bean в Java — это объект, управляемый контейнером IoC (Inversion of Control), который используется для внедрения зависимостей. В Spring, JavaBeans — это классы, соответствующие определённым стандартам: они должны иметь конструктор без параметров, геттеры и сеттеры для полей, а также реализовать интерфейс Serializable, если требуется сериализация. Beans широко используются для упрощения работы с объектами в больших приложениях, позволяя контейнеру автоматически управлять их жизненным циклом и зависимостями.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31🔥7🤯2
🤔 Как происходит обработка ошибок с помощью JSTL?

Предоставляет набор тэгов для различных задач, включая обработку ошибок. Хотя 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>


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🤔 Что такое Lambda?

Lambda — это анонимная функция, которая может быть передана как аргумент в метод или сохранена в переменную. Лямбда-выражения упрощают код, избавляя от необходимости создавать полноценные классы для реализации функциональных интерфейсов. Они часто используются для краткого описания логики,

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍27🔥9
🤔 Как конфигурируется JSP в дескрипторе развертывания?

Позволяет управлять различными аспектами поведения вашего веб-приложения на уровне сервера. Дескриптор развертывания расположен в каталоге WEB-INF вашего веб-приложения и используется для определения настроек сервлетов, фильтров, обработчиков ошибок и других компонентов.

🚩Элементы конфигурации

🟠Назначение сервлета для обработки JSP
Когда вы используете JSP, контейнер сервлетов (например, Apache Tomcat) автоматически назначает специальный сервлет для обработки запросов к JSP-страницам. Обычно это происходит автоматически, но вы можете явно указать это в дескрипторе развертывания. Элемент <servlet> определяет сервлет, обрабатывающий JSP. Элемент <servlet-mapping> связывает этот сервлет с URL-шаблоном *.jsp.
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>


🟠Обработка ошибок
В дескрипторе развертывания можно настроить глобальную обработку ошибок, указывая страницы для различных типов ошибок или исключений. Ошибка с кодом 404 (не найдено) будет обрабатываться страницей notfound.jsp. Любое исключение типа java.lang.Throwable будет обрабатываться страницей error.jsp.
<error-page>
<error-code>404</error-code>
<location>/notfound.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error.jsp</location>
</error-page>


🟠Настройка сессий
Вы можете настроить параметры сессий, такие как время ожидания, в дескрипторе развертывания. Этот параметр указывает, что сессии будут истекать через 30 минут бездействия.
<session-config>
<session-timeout>30</session-timeout> <!-- Время в минутах -->
</session-config>


🟠Настройка параметров инициализации
Параметры инициализации сервлета могут быть настроены через элементы <init-param>. В этом примере параметр development включен, что может использоваться для различных режимов работы сервлета.
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>development</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🤯21