Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥6
Метод вызывается один раз при инициализации JSP страницы. Используется для выполнения инициализационных задач, таких как настройка ресурсов (например, подключение к базе данных).
public void jspInit() {
// Инициализация ресурсов
System.out.println("jspInit() вызван");
}Метод вызывается один раз перед выгрузкой JSP страницы из памяти. Используется для очистки ресурсов, таких как закрытие подключений к базе данных.
public void jspDestroy() {
// Очистка ресурсов
System.out.println("jspDestroy() вызван");
}Метод вызывается для обработки каждого запроса к JSP странице. Основная логика обработки запросов и генерации ответа. Этот метод автоматически генерируется контейнером сервлетов и не может быть переопределен вручную в JSP странице.
public void _jspService(HttpServletRequest request, HttpServletResponse response) {
// Обработка запроса
response.getWriter().println("Обработка запроса в _jspService()");
}<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<noscript>JSP Life Cycle Methods</noscript>
</head>
<body>
<h1>Hello, JSP!</h1>
<p>Current time: <%= new java.util.Date() %></p>
</body>
</html>
<%!
// Инициализация
public void jspInit() {
System.out.println("jspInit() вызван");
}
// Завершение
public void jspDestroy() {
System.out.println("jspDestroy() вызван");
}
%>
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍33🔥6👾2
Поместите JSP страницы в директорию
WEB-INF./WEB-INF/jsp/protected.jsp
Используйте сервлет для доступа к JSP страницам.
@WebServlet("/protectedPage")
public class ProtectedServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("/WEB-INF/jsp/protected.jsp").forward(request, response);
}
}Создайте фильтр для проверки условий доступа.
@WebFilter("/WEB-INF/*")
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.jsp");
} else {
chain.doFilter(request, response);
}
}
}Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥2
Неподвижный контент, который не изменяется при каждом запросе. Обычно это HTML, CSS, JavaScript, изображения и другие медиафайлы. HTML-теги, текст, ссылки и изображения, которые всегда одинаковы для каждого пользователя.
<!DOCTYPE html>
<html>
<head>
<noscript>Static Content Example</noscript>
</head>
<body>
<h1>Welcome to my website</h1>
<p>This is a static paragraph.</p>
</body>
</html>
Контент, который может изменяться при каждом запросе в зависимости от данных, входных данных пользователя или бизнес-логики. Это генерируется на сервере с использованием Java-кода. Результаты поиска, данные пользователя, время и дата, данные из базы данных.
<!DOCTYPE html>
<html>
<head>
<noscript>Dynamic Content Example</noscript>
</head>
<body>
<h1>Welcome to my website</h1>
<p>Current date and time: <%= new java.util.Date() %></p>
<p>Your IP address: <%= request.getRemoteAddr() %></p>
</body>
</html>
-Статическое содержимое
Не меняется при каждом запросе.
-Динамическое содержимое
Может изменяться в зависимости от условий и данных.
Статическое содержимое
Быстро загружается, так как не требует обработки на сервере.
Динамическое содержимое
Может быть медленнее, так как требует обработки и генерации контента на сервере.
-Статическое содержимое
Не использует серверные ресурсы для генерации.
Динамическое содержимое
-Использует серверные ресурсы для выполнения логики и генерации контента.
Статическое содержимое
-Основные страницы, справочные документы, статические изображения.
Динамическое содержимое
-Пользовательские профили, результаты поиска, данные из базы данных.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤3😁1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15👀1
JSP предоставляет различные типы тегов для упрощения разработки веб-страниц, позволяя интегрировать Java-код и управлять контентом.
Устанавливает атрибуты страницы, такие как кодировка, язык, импорты и другие параметры.
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="java.util.Date" %>
Включает содержимое другого файла во время компиляции страницы.
<%@ include file="header.jsp" %>
Декларирует библиотеку тегов, используемых на странице.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%
String message = "Hello, World!";
out.println(message);
%>
<p>Current date and time: <%= new java.util.Date() %></p>
<%!
private int counter = 0;
public int getCounter() {
return counter++;
}
%>
Включает содержимое другого ресурса во время выполнения.
<jsp:include page="header.jsp" />
Перенаправляет запрос на другой ресурс.
<jsp:forward page="login.jsp" />
Создает и инициализирует JavaBean.
<jsp:useBean id="user" class="com.example.User" scope="session" />
Устанавливает значение свойства JavaBean.
<jsp:setProperty name="user" property="name" value="John Doe" />
Получает значение свойства JavaBean.
<jsp:getProperty name="user" property="name" />
JSTL предоставляет стандартный набор тегов для выполнения задач, таких как итерация, условные конструкции и работа с XML. Теги Core
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:forEach var="item" items="${itemList}">
${item}
</c:forEach>
Теги Format
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<fmt:formatDate value="${now}" pattern="yyyy-MM-dd" />
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23👍10
JSP (JavaServer Pages) предоставляет разработчикам возможность создавать динамические веб-страницы с использованием Java. В JSP существуют специальные теги, называемые Action Tags (теги действий) и Action Elements (элементы действий), которые помогают выполнить определенные задачи и управлять контентом на странице.
Это предопределенные теги, которые позволяют выполнять специальные действия на сервере, такие как включение других файлов, управление потоками, обработка форм и т.д. Они интегрированы с сервлетами и облегчают разработку.
<jsp:include>Включает содержимое другого ресурса (JSP, HTML, или сервлета) в текущую страницу. Когда нужно динамически вставить контент из другого файла.
<jsp:include page="header.jsp" />
<jsp:forward>Перенаправляет запрос на другой ресурс. Для перенаправления пользователя на другую страницу или ресурс.
<jsp:forward page="newPage.jsp" />
<jsp:param>Используется для передачи параметров другим JSP страницам или сервлетам. Внутри
<jsp:include> или <jsp:forward>.<jsp:forward page="newPage.jsp">
<jsp:param name="userId" value="123" />
</jsp:forward>
<jsp:useBean>Создает или находит экземпляр JavaBeans и связывает его с JSP страницей. Для интеграции с JavaBeans.
<jsp:useBean id="user" class="com.example.User" scope="session" />
<jsp:setProperty>Устанавливает значение свойства JavaBeans. В связке с
<jsp:useBean>.<jsp:setProperty name="user" property="name" value="John Doe" />
<jsp:getProperty>Получает значение свойства JavaBeans и выводит его на страницу. В связке с
<jsp:useBean>.Имя пользователя: <jsp:getProperty name="user" property="name" />
Это более общие термины, которые могут включать любые действия, выполненные с помощью JSP Action Tags или других механизмов JSP. Эти элементы используются для управления динамическим контентом, взаимодействия с JavaBeans, и включают в себя теги действий.
Они предоставляют готовые механизмы для выполнения общих задач.
Легко включать и переиспользовать компоненты.
Поддержание чистого и организованного кода.
Позволяют создавать динамические и интерактивные веб-страницы.
<jsp:include page="header.jsp" />
<jsp:useBean id="user" class="com.example.User" scope="session" />
<jsp:setProperty name="user" property="name" value="John Doe" />
<p>Имя пользователя: <jsp:getProperty name="user" property="name" /></p>
<jsp:include page="footer.jsp" />
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20
Пользователь отправляет HTTP-запрос (например, через веб-браузер).
Запрос попадает к сервлету, который обрабатывает бизнес-логику. Сервлет может получать данные от пользователя, обрабатывать их, взаимодействовать с базой данных или другими компонентами приложения.
После обработки запроса сервлет перенаправляет его на JSP-страницу, передавая необходимые данные (атрибуты) для отображения.
JSP-страница генерирует HTML-ответ, используя переданные данные, и отправляет его обратно пользователю.
Сервлеты отвечают за обработку бизнес-логики, а JSP - за представление данных. Это позволяет разделить код на более управляемые части и облегчить сопровождение.
Логику обработки данных можно легко использовать повторно в различных сервлетах, а JSP-страницы могут использоваться для разных представлений одних и тех же данных.
Разработчики могут сосредоточиться на своих частях задачи (логика или представление), что ускоряет разработку и делает код более читабельным.
Пользователь отправляет запрос
GET /users
Сервлет
UserServlet@WebServlet("/users")
public class UserServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Логика получения списка пользователей
List<User> users = UserService.getUsers();
// Передача данных на JSP
request.setAttribute("users", users);
RequestDispatcher dispatcher = request.getRequestDispatcher("users.jsp");
dispatcher.forward(request, response);
}
}JSP
users.jsp<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<noscript>Список пользователей</noscript>
</head>
<body>
<h1>Список пользователей</h1>
<ul>
<c:forEach var="user" items="${users}">
<li>${user.name} - ${user.email}</li>
</c:forEach>
</ul>
</body>
</html>
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥4❤2
Существуют четыре основные области видимости (scopes) переменных, которые определяют, сколько времени переменная будет доступна и где она может быть использована. Это
page, request, session и application.Переменная с областью видимости страницы доступна только на текущей странице JSP. Существует только во время обработки текущей страницы. Локальные переменные, необходимые только в пределах одной страницы.
Переменная с областью видимости запроса доступна во всех JSP, сервлетах и других ресурсах, которые обрабатывают текущий HTTP-запрос. Существует до тех пор, пока запрос не будет завершен. Данные, которые нужно передать между несколькими сервлетами и JSP в пределах одного запроса.
Переменная с областью видимости сессии доступна во всех JSP, сервлетах и других ресурсах, которые обрабатывают запросы от конкретного пользователя в рамках одной сессии. Существует до завершения сессии (например, закрытие браузера или истечение времени сессии). Данные, которые должны сохраняться между запросами одного пользователя, например, информация о вошедшем пользователе.
Переменная с областью видимости приложения доступна во всех JSP, сервлетах и других ресурсах в пределах всего веб-приложения. Существует до тех пор, пока приложение работает на сервере. Данные, которые должны быть доступны всем пользователям и запросам, например, конфигурационные параметры приложения.
Локальная переменная, которая используется только на одной странице (
page scope). Временные данные для текущего запроса (request scope). Данные пользователя для текущей сессии (session scope). Глобальные данные для всего приложения (application scope).@WebServlet("/example")
public class ExampleServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Request scope
request.setAttribute("requestVar", "Request Scoped Variable");
// Session scope
HttpSession session = request.getSession();
session.setAttribute("sessionVar", "Session Scoped Variable");
// Application scope
ServletContext context = getServletContext();
context.setAttribute("appVar", "Application Scoped Variable");
// Forward to JSP
RequestDispatcher dispatcher = request.getRequestDispatcher("example.jsp");
dispatcher.forward(request, response);
}
}JSP (
example.jsp)<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<noscript>Scope Example</noscript>
</head>
<body>
<h1>Scope Example</h1>
<p>Request Scope: <%= request.getAttribute("requestVar") %></p>
<p>Session Scope: <%= session.getAttribute("sessionVar") %></p>
<p>Application Scope: <%= application.getAttribute("appVar") %></p>
<%! String pageVar = "Page Scoped Variable"; %>
<p>Page Scope: <%= pageVar %></p>
</body>
</html>
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥1
Они упрощают работу с различными аспектами веб-приложения.
Тип:
HttpServletRequest Используется для получения информации о запросе клиента, таких как параметры запроса, заголовки, атрибуты и сессия.
request.getParameter("username")Тип:
HttpServletResponse. Используется для отправки ответа клиенту, например, установки заголовков и написания данных в поток ответа. Пример: response.setContentType("text/html")Тип:
HttpSession. Представляет сессию между клиентом и сервером, позволяя сохранять данные между запросами одного пользователя. Пример: session.setAttribute("user", userObject)Тип:
ServletContext. Представляет контекст веб-приложения, позволяя сохранять данные, доступные всем сервлетам и JSP в приложении. Пример: application.getAttribute("appConfig")Тип:
ServletConfig. Используется для доступа к конфигурационным параметрам сервлета. Пример: config.getInitParameter("initParamName")Тип:
JspWriter. Используется для вывода данных в поток ответа клиента. Пример: out.println("Hello, World!")Тип:
PageContext. Предоставляет доступ к различным областям видимости (page, request, session, application) и служебным методам. Пример: pageContext.getAttribute("attrName", PageContext.SESSION_SCOPE)Тип:
Object. Ссылается на саму JSP-страницу как объект. Пример: Обычно используется редко.Тип:
Throwable. Доступен только на страницах ошибки и содержит исключение, которое привело к ошибке. Пример: <%= exception.getMessage() %><%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<noscript>Пример неявных объектов</noscript>
</head>
<body>
<h1>Привет, <%= request.getParameter("username") %>!</h1>
<%
session.setAttribute("greeting", "Добро пожаловать!");
out.println((String) session.getAttribute("greeting"));
%>
</body>
</html>
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥5😁3🤔1
На обычной JSP-странице не все неявные объекты доступны. К таким объектам относятся:
Throwable. Этот объект доступен только на страницах, предназначенных для обработки ошибок, то есть на страницах, у которых атрибут isErrorPage установлен в true. Он используется для получения информации об исключении, которое вызвало ошибку.<%@ page isErrorPage="true" %>
<html>
<body>
<h1>Ошибка произошла</h1>
<p>Сообщение об ошибке: <%= exception.getMessage() %></p>
</body>
</html>
На обычной JSP-странице доступны такие неявные объекты, как
request, response, session, application, config, out, pageContext, и page. Пример использования этих объектов:<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<noscript>Пример неявных объектов</noscript>
</head>
<body>
<h1>Привет, <%= request.getParameter("username") %>!</h1>
<%
// Установка атрибута в сессии
session.setAttribute("greeting", "Добро пожаловать!");
// Вывод значения атрибута из сессии
out.println((String) session.getAttribute("greeting"));
%>
<p>Контекст приложения: <%= application.getServletContextName() %></p>
<p>Параметр конфигурации: <%= config.getInitParameter("configParam") %></p>
</body>
</html>
Используется для получения параметров запроса и атрибутов.
Используется для отправки данных обратно клиенту.
Используется для хранения данных между запросами одного пользователя.
Используется для хранения данных, доступных всему приложению.
Используется для получения параметров конфигурации сервлета.
Используется для вывода данных в поток ответа.
Предоставляет доступ к различным областям видимости и служебным методам.
Ссылается на саму JSP-страницу как объект.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3👾1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22
Это неявный объект в JSP, который предоставляет доступ к различным областям видимости и служебным методам. Он инкапсулирует всю информацию о странице и предоставляет удобные методы для работы с атрибутами и объектами.
pageScope: Атрибуты, доступные только на текущей странице.
requestScope: Атрибуты, доступные во всех компонентах, обрабатывающих текущий запрос.
sessionScope: Атрибуты, доступные в течение всей сессии пользователя.
applicationScope: Атрибуты, доступные во всем приложении.
setAttribute(String name, Object value): Устанавливает атрибут в текущей области видимости.
getAttribute(String name): Получает атрибут из текущей области видимости.
removeAttribute(String name): Удаляет атрибут из текущей области видимости.
findAttribute(String name): Ищет атрибут в последовательности областей видимости (page, request, session, application).
forward(String path): Перенаправляет запрос на другой ресурс (JSP, сервлет и т.д.).
include(String path): Включает содержимое другого ресурса в текущую страницу.
getServletConfig(): Возвращает объект ServletConfig для текущего сервлета.
getServletContext(): Возвращает объект ServletContext для текущего веб-приложения.
getOut(): Возвращает объект JspWriter для вывода данных на страницу.
PageContext предоставляет единый интерфейс для доступа к атрибутам всех областей видимости (страница, запрос, сессия, приложение), что упрощает работу с данными.Использование методов
PageContext делает код JSP более компактным и читабельным, так как все операции с атрибутами и служебными методами сосредоточены в одном объекте.Методы
forward и include облегчают перенаправление и включение ресурсов, что способствует созданию модульного и легко управляемого кода.Метод
findAttribute позволяет гибко искать атрибуты во всех областях видимости, что упрощает доступ к данным.<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="javax.servlet.jsp.PageContext" %>
<html>
<head>
<noscript>PageContext Example</noscript>
</head>
<body>
<h1>PageContext Example</h1>
<%-- Установка атрибута в request scope --%>
<%
pageContext.setAttribute("message", "Hello from PageContext!", PageContext.REQUEST_SCOPE);
%>
<%-- Получение атрибута из request scope --%>
<p>Message: <%= pageContext.getAttribute("message", PageContext.REQUEST_SCOPE) %></p>
<%-- Перенаправление на другой ресурс --%>
<%-- pageContext.forward("/anotherPage.jsp"); --%>
<%-- Включение другого ресурса --%>
<%-- pageContext.include("/header.jsp"); --%>
</body>
</html>
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍3👾1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥10❤1