Для предотвращения прямого доступа к JSP странице из браузера можно использовать несколько методов. Основная идея заключается в том, чтобы ограничить доступ к страницам, оставив доступ только через контроллеры, такие как сервлеты, или посредством определенных условий доступа.
Размещение файлов внутри папки
WEB-INF предотвращает прямой доступ к ним из браузера. Любой файл в WEB-INF не может быть напрямую запрошен клиентом, но может быть доступен сервером, что позволяет контролировать доступ к через сервлеты./WEB-INF/
/jsp/
protectedPage.jsp
web.xml
Теперь доступ к
protectedPage.jsp можно получить только через сервлет.@WebServlet("/protectedPage")
public class ProtectedPageServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("/WEB-INF/jsp/protectedPage.jsp").forward(request, response);
}
}Фильтры могут быть использованы для проверки доступа к JSP страницам и перенаправления запросов при необходимости. Фильтр можно настроить так, чтобы он проверял доступ только для авторизованных пользователей.
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.FilterServletRequest;
import javax.servlet.FilterServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebFilter("/jsp/*") // Применение фильтра ко всем запросам к JSP
public class AuthenticationFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
// Проверка сессии или авторизации
if (httpRequest.getSession().getAttribute("user") == null) {
httpResponse.sendRedirect(httpRequest.getContextPath() + "/login");
} else {
chain.doFilter(request, response);
}
}
public void init(FilterConfig fConfig) throws ServletException {
// Инициализация фильтра (если необходимо)
}
public void destroy() {
// Очистка ресурсов (если необходимо)
}
}
Можно использовать декларативную конфигурацию в файле
web.xml, чтобы ограничить доступ к JSP страницам.<web-app ...>
<security-constraint>
<web-resource-collection>
<web-resource-name>Protected JSP</web-resource-name>
<url-pattern>/protected/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>AUTHORIZED_USER</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/login-error.jsp</form-error-page>
</form-login-config>
</login-config>
<security-role>
<role-name>AUTHORIZED_USER</role-name>
</security-role>
</web-app>
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤1
2. Реализация интерфейса Runnable: создайте класс, реализующий Runnable, и передайте его экземпляр в конструктор Thread.
3. Использование пула потоков: через ExecutorService для управления потоками.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍35🔥5❤1
Java Server Pages (JSP) позволяет создавать как статическое, так и динамическое содержимое. Различие между ними заключается в способе генерации и отображения содержимого на веб-странице.
Это часть веб-страницы, которая остается неизменной при каждом запросе. Оно включает в себя ресурсы, которые не изменяются динамически сервером.
<html>
<head>
<title>Static Content Example</title>
</head>
<body>
<h1>Welcome to My Website</h1>
<p>This is a static content example.</p>
</body>
</html>
Это часть веб-страницы, которая генерируется или изменяется сервером на основе входящих запросов, данных из базы данных или других условий. Динамическое содержимое изменяется при каждом запросе в зависимости от параметров, данных пользователя и других факторов.
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="java.util.Date" %>
<html>
<head>
<title>Dynamic Content Example</title>
</head>
<body>
<h1>Welcome to My Website</h1>
<p>This is a dynamic content example.</p>
<p>Current time: <%= new Date() %></p>
</body>
</html>
Статическое содержимое: Не меняется при каждом запросе. Оно включено в JSP страницу как есть и отображается в неизменном виде.
Динамическое содержимое: Генерируется сервером на основе данных, параметров запроса или других условий, что приводит к изменению отображаемого содержимого при каждом запросе.
Статическое содержимое: Не требует выполнения на сервере. Веб-сервер просто передает его клиенту (например, браузеру).
Динамическое содержимое: Требует выполнения на сервере. JSP страница компилируется в сервлет, который затем генерирует HTML на основе логики и данных.
Примеры использования:
Статическое содержимое: Используется для отображения постоянных данных, таких как статические страницы, стиль, оформление, изображения и т.д.
Динамическое содержимое: Используется для отображения изменяющихся данных, таких как пользовательская информация, результаты поиска, данные из базы данных и т.д.
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="java.util.Date" %>
<html>
<head>
<title>Static and Dynamic Content Example</title>
</head>
<body>
<h1>Welcome to My Website</h1>
<p>This is a static content example.</p>
<%
// Динамическое содержимое: текущее время
Date currentDate = new Date();
%>
<p>Current time: <%= currentDate %></p>
<%
// Динамическое содержимое: пользовательская информация
String username = request.getParameter("username");
if (username != null) {
out.println("<p>Hello, " + username + "!</p>");
} else {
out.println("<p>Hello, Guest!</p>");
}
%>
</body>
</html>
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1
2. CachedThreadPool: пул с динамическим количеством потоков, которые переиспользуются.
3. SingleThreadExecutor: пул с одним потоком.
4. ScheduledThreadPool: для выполнения задач с задержкой или периодически.
5. ForkJoinPool: для работы с задачами, которые можно разбить на подзадачи.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍4❤1
В JSP (Java Server Pages) существует несколько типов тегов, которые помогают разработчикам создавать динамически генерируемые веб-страницы. Основные типы тегов включают директивы, скриптлеты, выражения, декларации, действия и теги библиотек.
Используются для настройки JSP страницы и управления её поведением. Они предоставляют инструкции контейнеру JSP.
page: Настраивает атрибуты страницы, такие как кодировка, импорт классов, обработка исключений и т.д.
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="java.util.Date" %>
include: Включает содержимое другого файла в JSP страницу во время компиляции.
<%@ include file="header.jsp" %>
taglib: Декларирует использование библиотеки тегов.
<%@ taglib uri="https://java.sun.com/jsp/jstl/core" prefix="c" %>
Позволяют включать произвольный Java код внутри JSP страницы. Код внутри скриптлета выполняется на сервере при генерации страницы.
<%
String message = "Hello, World!";
out.println(message);
%>
Позволяют выводить значения Java переменных и методов в HTML код. Результат выражения автоматически включается в вывод страницы.
<p>Current time: <%= new java.util.Date() %></p>
Позволяют объявлять методы и поля класса, в который компилируется JSP страница. Они используются для объявления переменных и методов, доступных в других частях страницы.
<%!
private int counter = 0;
public int getCounter() {
return counter++;
}
%>
<p>Counter: <%= getCounter() %></p>
Позволяют выполнять встроенные функции, такие как включение содержимого другого ресурса или использование JavaBeans. Эти теги начинаются с
<jsp: и предоставляют различные функциональные возможности.jsp:include
Включает другой ресурс (JSP, HTML, Servlet) в текущую страницу во время выполнения.
<jsp:include page="header.jsp" />
jsp:forward
Перенаправляет запрос на другой ресурс.
<jsp:forward page="anotherPage.jsp" />
jsp:useBean
Создает или извлекает JavaBean и делает его доступным на странице.
<jsp:useBean id="user" class="com.example.User" scope="session" />
jsp:setProperty
Устанавливает значение свойства JavaBean.
<jsp:setProperty name="user" property="name" value="John Doe" />
jsp:getProperty
Извлекает значение свойства JavaBean и выводит его.
<jsp:getProperty name="user" property="name" />
Предоставляют дополнительные функции и упрощают разработку JSP страниц. Они используются для выполнения часто встречающихся задач, таких как итерация, условная логика, обработка XML, и работа с форматированием.
<%@ taglib uri="https://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:choose>
<c:when test="${param.user == 'admin'}">
<p>Welcome, admin!</p>
</c:when>
<c:otherwise>
<p>Welcome, guest!</p>
</c:otherwise>
</c:choose>
<c:forEach var="item" items="${items}">
<p>${item.name}</p>
</c:forEach>
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤1
2. Через сеттеры или методы (Setter/Method Injection): зависимости устанавливаются после создания объекта.
3. Через поле (Field Injection): зависимости внедряются напрямую в поля класса с использованием аннотаций, таких как
4. Интерфейсное внедрение (Interface Injection): зависимости передаются через методы интерфейса, который реализует класс.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🤔4🔥2
В обычной JSP странице доступны большинство неявных объектов, предоставляющих различные аспекты управления веб-приложением. Однако один из неявных объектов, а именно
exception, не доступен в обычной JSP странице. Рассмотрим это далее.Объект
HttpServletRequest, представляющий запрос клиента.Объект
HttpServletResponse, представляющий ответ сервера.Объект
HttpSession, представляющий сессию пользователя.Объект
ServletContext, представляющий контекст приложения.Объект
JspWriter, используемый для записи данных в ответ.Объект
ServletConfig, содержащий параметры конфигурации сервлета.Объект
PageContext, предоставляющий доступ ко всем областям видимости и другим неявным объектам.Объект
page, представляющий текущую JSP страницу.Объект `
hrowable` представляющий исключение, вызвавшее ошибку (недоступен в обычной странице). `exception`: Объект Throwable, представляющий исключение, вызвавшее ошибку (недоступен в обычной странице).exceptionОбъект
exception представляет собой экземпляр Throwable, который содержит исключение, вызвавшее ошибку. Этот объект доступен только на страницах, объявленных как страницы обработки ошибок.Доступность:
Недоступен в обычной JSP странице.
Доступен только на страницах, объявленных с атрибутом
isErrorPage="true".Пример страницы обработки ошибок
<%@ page isErrorPage="true" %>
<html>
<head>
<title>Error Page</title>
</head>
<body>
<h1>An error occurred</h1>
<p>Exception: <%= exception.getMessage() %></p>
</body>
</html>
Примеры
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head>
<title>Implicit Objects Example</title>
</head>
<body>
<h1>Implicit Objects in JSP</h1>
<!-- Использование объекта request -->
<p>Request URI: <%= request.getRequestURI() %></p>
<!-- Использование объекта session -->
<%
session.setAttribute("user", "John Doe");
String user = (String) session.getAttribute("user");
%>
<p>User from session: <%= user %></p>
<!-- Использование объекта application -->
<%
application.setAttribute("appName", "MyApp");
String appName = (String) application.getAttribute("appName");
%>
<p>Application Name: <%= appName %></p>
<!-- Использование объекта config -->
<p>Servlet Name: <%= config.getServletName() %></p>
<!-- Использование объекта pageContext -->
<%
pageContext.setAttribute("pageMessage", "Page context message", PageContext.PAGE_SCOPE);
String pageMessage = (String) pageContext.getAttribute("pageMessage");
%>
<p>Page Message: <%= pageMessage %></p>
</body>
</html>
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
2. Производительность: CHAR быстрее для фиксированных данных, VARCHAR экономит память для переменных данных.
3. Применение: CHAR для одинаковой длины строк (например, коды), VARCHAR для строк переменной длины (например, имена).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥6🤔1
Это один из неявных объектов, который предоставляет доступ ко всем другим неявным объектам и различным областям видимости (scope) в странице. Он служит как контейнер для информации, связанной с обработкой страницы и предоставляет методы для взаимодействия с атрибутами, управления выходными потоками и получения информации о среде выполнения.
Предоставляет методы для работы с атрибутами во всех областях видимости (page, request, session, application). Методы:
setAttribute(), getAttribute(), removeAttribute(), findAttribute().Предоставляет доступ к
JspWriter через метод getOut(), который используется для вывода данных на страницу.Предоставляет методы для получения ссылок на другие неявные объекты, такие как
request, response, session, application, config, и page.PageContext может использоваться для обработки исключений, которые происходят в JSP странице.Доступ к атрибутам в различных областях видимости
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head>
<title>PageContext Example</title>
</head>
<body>
<h1>PageContext Example</h1>
<%-- Установка атрибутов в различные области видимости --%>
<%
pageContext.setAttribute("pageAttr", "Page Scope Attribute", PageContext.PAGE_SCOPE);
pageContext.setAttribute("requestAttr", "Request Scope Attribute", PageContext.REQUEST_SCOPE);
pageContext.setAttribute("sessionAttr", "Session Scope Attribute", PageContext.SESSION_SCOPE);
pageContext.setAttribute("applicationAttr", "Application Scope Attribute", PageContext.APPLICATION_SCOPE);
%>
<%-- Получение и вывод атрибутов --%>
<p>Page Attribute: <%= pageContext.getAttribute("pageAttr", PageContext.PAGE_SCOPE) %></p>
<p>Request Attribute: <%= pageContext.getAttribute("requestAttr", PageContext.REQUEST_SCOPE) %></p>
<p>Session Attribute: <%= pageContext.getAttribute("sessionAttr", PageContext.SESSION_SCOPE) %></p>
<p>Application Attribute: <%= pageContext.getAttribute("applicationAttr", PageContext.APPLICATION_SCOPE) %></p>
</body>
</html>
Получение неявных объектов
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head>
<title>PageContext Example</title>
</head>
<body>
<h1>PageContext Example</h1>
<%-- Получение неявных объектов через PageContext --%>
<p>Request URI: <%= pageContext.getRequest().getRequestURI() %></p>
<p>Session ID: <%= pageContext.getSession().getId() %></p>
<p>Servlet Context Name: <%= pageContext.getServletContext().getServletContextName() %></p>
</body>
</html>
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Forwarded from easyoffer
easyoffer
Backend
Python | Вопросы
Python | Удалёнка
Python | LeetCode
Python | Тесты
Frontend | Вопросы
Frontend | Удалёнка
JavaScript | LeetCode
Frontend | Тесты
Java | Вопросы
Java | Удалёнка
Java | LeetCode
Java | Тесты
Тестировщик | Вопросы
Тестировщик | Удалёнка
Тестировщик | Тесты
Data Science | Вопросы
Data Science | Удалёнка
Data Science | Тесты
C# | Вопросы
C# | Удалёнка
C# | LeetCode
C# | Тесты
C/C++ | Вопросы
C/C++ | Удалёнка
C/C++ | LeetCode
C/C++ | Тесты
Golang | Вопросы
Golang | Удалёнка
Golang | LeetCode
Golang | Тесты
DevOps | Вопросы
DevOps | Удалёнка
DevOps | Тесты
PHP | Вопросы
PHP | Удалёнка
PHP | LeetCode
PHP | Тесты
Kotlin | Вопросы
Kotlin | Удалёнка
Kotlin | LeetCode
Kotlin | Тесты
Swift | Вопросы
Swift | Удалёнка
Swift | LeetCode
Swift | Тесты
Please open Telegram to view this post
VIEW IN TELEGRAM
2. Right Join: возвращает все записи из правой таблицы и совпадающие из левой, с аналогичным заполнением NULL для отсутствующих значений.
3. Inner Join: возвращает только те записи, которые совпадают в обеих таблицах.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥2🤔1
Параметры инициализации могут быть настроены через файл конфигурации
web.xml или с помощью аннотаций в сервлетах. Могут быть настроены для всего веб-приложения или для конкретных сервлетов и страниц.web.xmlМожно настроить в разделе
<servlet> элемента конфигурационного файла web.xml.<web-app>
<servlet>
<servlet-name>ExampleServlet</servlet-name>
<jsp-file>/example.jsp</jsp-file>
<init-param>
<param-name>param1</param-name>
<param-value>value1</param-value>
</init-param>
<init-param>
<param-name>param2</param-name>
<param-value>value2</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ExampleServlet</servlet-name>
<url-pattern>/example</url-pattern>
</servlet-mapping>
</web-app>
Доступ к параметрам инициализации в JSP можно получить через объект
config в JSP.<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Initialization Parameters Example</title>
</head>
<body>
<h1>Initialization Parameters Example</h1>
<%
// Получение параметров инициализации
String param1 = config.getInitParameter("param1");
String param2 = config.getInitParameter("param2");
%>
<p>Param1: <%= param1 %></p>
<p>Param2: <%= param2 %></p>
</body>
</html>
Можно настроить в разделе
<context-param> элемента конфигурационного файла web.xml.<web-app>
<context-param>
<param-name>globalParam1</param-name>
<param-value>globalValue1</param-value>
</context-param>
<context-param>
<param-name>globalParam2</param-name>
<param-value>globalValue2</param-value>
</context-param>
</web-app>
Доступ к параметрам инициализации для всего приложения можно получить через объект
ServletContext.<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Global Initialization Parameters Example</title>
</head>
<body>
<h1>Global Initialization Parameters Example</h1>
<%
// Получение глобальных параметров инициализации
String globalParam1 = application.getInitParameter("globalParam1");
String globalParam2 = application.getInitParameter("globalParam2");
%>
<p>Global Param1: <%= globalParam1 %></p>
<p>Global Param2: <%= globalParam2 %></p>
</body>
</html>
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Это способ обработки потоков данных в Java параллельно с использованием нескольких ядер процессора.
1. Он автоматически разбивает поток данных на подзадачи, выполняемые одновременно.
2. Используется для увеличения производительности в задачах, где данные можно обрабатывать независимо.
3. Но его применение может усложнять отладку и требует учёта потокобезопасности.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥1
Использование скриплетов и скриптовых элементов (Java код внутри JSP страниц) не рекомендуется по ряду причин, связанных с лучшими практиками разработки, поддержкой, безопасностью и архитектурными принципами.
Смешивание Java кода с HTML делает страницы трудночитаемыми и сложно поддерживаемыми. Когда бизнес-логика внедряется прямо в JSP страницы, это усложняет понимание и поддержку кода, особенно для больших проектов.
Использование нарушает принцип разделения логики и представления (Separation of Concerns). Логика должна быть размещена в сервлетах, контроллерах или других бизнес-слоях, тогда как JSP страницы должны быть ответственны только за представление данных.
Тестирование кода, включенного в скриплеты, сложнее, так как он тесно переплетается с HTML разметкой. Отладка логики, встроенной в JSP, затруднена, так как она находится в представлении, а не в логическом слое.
Смешивание логики и представления может привести к уязвимостям, таким как XSS (Cross-Site Scripting), если входные данные не обрабатываются должным образом. Центральная логика, размещенная в одном месте (например, в сервлетах), позволяет легче управлять безопасностью и обработкой исключений.
Современные технологии и фреймворки, такие как JavaServer Faces (JSF), Spring MVC, и другие, предоставляют более структурированные подходы к разработке веб-приложений. Эти фреймворки способствуют лучшему разделению логики и представления и предлагают более мощные инструменты для разработки и поддержки приложений.
Позволяет доступ к данным и выполнение простых операций без использования скриплетов. Более читаема и поддерживаемая, так как она не смешивает Java код с HTML.
<p>Username: ${user.name}</p> Предоставляет набор стандартных тегов для выполнения общих задач, таких как итерация, условные конструкции, работа с форматированием и интернационализацией. Улучшает читабельность кода и способствует разделению логики и представления.
<%@ taglib uri="https://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:if test="${user.loggedIn}">
<p>Welcome, ${user.name}</p>
</c:if>
Использование данной позволяет разделить бизнес-логику, управление данными и представление. Сервлеты и контроллеры (например, Spring MVC) обрабатывают бизнес-логику и данные, а JSP используется только для отображения данных.
@WebServlet("/user")
public class UserController extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
User user = new User("John Doe", true);
request.setAttribute("user", user);
request.getRequestDispatcher("/user.jsp").forward(request, response);
}
} Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
1. Взаимосвязь между таблицами осуществляется через первичные и внешние ключи.
2. Она поддерживает запросы на основе языка SQL, что упрощает выборку и модификацию данных.
3. Пример: PostgreSQL, MySQL.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22🔥1
Определение классов внутри JSP страниц считается плохой практикой и не рекомендуется, так как это нарушает принципы разделения логики и представления, усложняет поддержку и тестирование кода.
Класс можно определить внутри страницы с помощью деклараций (
<%! ... %>). Декларации позволяют определять поля, методы и классы, которые будут скомпилированы в сервлет, генерируемый из страницы.<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Define Class in JSP</title>
</head>
<body>
<h1>Class Definition Example</h1>
<%!
// Определение внутреннего класса внутри JSP страницы
public class Greeting {
private String message;
public Greeting(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
%>
<%
// Создание экземпляра класса и использование его методов
Greeting greeting = new Greeting("Hello, World!");
out.println("<p>Greeting Message: " + greeting.getMessage() + "</p>");
%>
</body>
</html>
Предназначена для представления данных, а не для обработки бизнес-логики или определения классов. Логика должна быть размещена в сервлетах, контроллерах или других бизнес-слоях.
Смешивание кода Java и HTML делает код трудночитаемым и сложным для поддержки. Трудно отлаживать и тестировать такой код.
Классы, определенные внутри JSP страниц, не могут быть легко использованы в других частях приложения.
Код, написанный в JSP, ограничен по сравнению с использованием полноценных Java классов в отдельных файлах, что затрудняет переносимость и совместимость кода.
Используйте сервлеты и контроллеры для обработки бизнес-логики и данных, а затем передавайте результаты JSP для отображения.
@WebServlet("/greeting")
public class GreetingServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Greeting greeting = new Greeting("Hello, World!");
request.setAttribute("greeting", greeting);
request.getRequestDispatcher("/greeting.jsp").forward(request, response);
}
}
public class Greeting {
private String message;
public Greeting(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
Для доступа к данным и выполнения логических операций без написания Java кода внутри JSP.
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="https://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>Greeting Example</title>
</head>
<body>
<h1>Greeting Example</h1>
<p>Greeting Message: ${greeting.message}</p>
</body>
</html>
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍1🤔1
1. Он предоставляет преднастроенные зависимости и автоматическую конфигурацию.
2. Устраняет необходимость вручную создавать XML-конфигурации.
3. Основное преимущество — быстрое создание прототипов и упрощённое управление инфраструктурой приложения.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24🔥5
Это язык выражений, встроенный, который упрощает доступ к данным и взаимодействие с ними в JSP страницах. JSP EL позволяет обращаться к объектам и свойствам в различных областях видимости (например, request, session, application) с помощью простого синтаксиса, аналогичного JavaScript.
EL позволяет обращаться к данным и свойствам объектов с помощью простого синтаксиса
${...}, что упрощает код JSP страниц.EL автоматически ищет объекты и их свойства в различных областях видимости: page, request, session, application.
EL поддерживает доступ к свойствам JavaBeans и методам геттеров.
EL поддерживает различные операторы (арифметические, логические, сравнения) и может использоваться для выполнения простых логических операций и выражений.
EL защищает от ошибок NullPointerException, возвращая пустую строку или значение по умолчанию, если объект или свойство не найдено.
Использование точечной нотации для доступа к свойствам объектов. Пример:
${user.name}Использование квадратных скобок для доступа к элементам коллекций и массивов. Пример:
${users[0].name} или ${map['key']}Арифметические операторы:
+, -, *, /, % Логические операторы:
&&, ||, !
Операторы сравнения: ==, !=, <, >, <=, >=
Условный оператор: ?:EL поддерживает вызов функций, определенных в JSTL (JavaServer Pages Standard Tag Library) и пользовательских тегах.
Доступ к свойствам объекта
<%
User user = new User();
user.setName("John Doe");
request.setAttribute("user", user);
%>
<p>Username: ${user.name}</p>
Доступ к элементам коллекции
<%
List<User> users = new ArrayList<>();
users.add(new User("John Doe"));
users.add(new User("Jane Smith"));
request.setAttribute("users", users);
%>
<c:forEach var="user" items="${users}">
<p>User: ${user.name}</p>
</c:forEach>
Использование операторов
<%
int num1 = 5;
int num2 = 10;
request.setAttribute("num1", num1);
request.setAttribute("num2", num2);
%>
<p>Sum: ${num1 + num2}</p>
<p>Is num1 less than num2? ${num1 < num2}</p>
JSP EL тесно интегрирован с JSTL, что позволяет использовать различные теги JSTL для выполнения общих задач.
<%@ taglib uri="https://java.sun.com/jsp/jstl/core" prefix="c" %>
<%
User user = new User();
user.setName("John Doe");
request.setAttribute("user", user);
%>
<c:if test="${user.name != null}">
<p>User is logged in as ${user.name}</p>
</c:if>
EL позволяет писать более чистый и читаемый код по сравнению с использованием скриплетов.
EL способствует лучшему разделению логики и представления, оставляя JSP страницы сфокусированными на отображении данных.
Код, использующий EL, легче поддерживать и тестировать, поскольку он не смешивает бизнес-логику с представлением.
EL обеспечивает защиту от ошибок, связанных с отсутствующими или нулевыми значениями.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤1😁1
1. S: Single Responsibility Principle (единственная ответственность).
2. O: Open-Closed Principle (открытость для расширения, закрытость для изменений).
3. L: Liskov Substitution Principle (принцип подстановки Барбары Лисков).
4. I: Interface Segregation Principle (разделение интерфейсов).
5. D: Dependency Inversion Principle (инверсия зависимостей).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24🤔3🔥1
Cookies — это небольшие фрагменты данных, которые сервер сохраняет на устройстве пользователя и отправляет обратно серверу при последующих запросах. Они используются для хранения информации о состоянии сеанса, персонализации и отслеживания пользователей.
Установка cookie:
Cookie cookie = new Cookie("username", "JohnDoe");
cookie.setMaxAge(60 * 60 * 24); // 1 день
response.addCookie(cookie);Получение cookie:
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
if ("username".equals(cookie.getName())) {
String username = cookie.getValue();
// Использование cookie
}
}
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23❤1🤔1