Расширение функциональности JSP может быть достигнуто различными способами, включая использование сторонних библиотек, создание пользовательских тегов и теговых библиотек, а также интеграцию с другими Java фреймворками.
JavaServer Pages Standard Tag Library (JSTL)
JSTL предоставляет набор стандартных тегов для выполнения распространённых задач, таких как итерация, условные конструкции, работа с коллекциями, форматирование и интернационализация.
<%@ taglib uri="https://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="https://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="https://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<c:if test="${user.loggedIn}">
<p>Welcome, ${user.name}!</p>
</c:if>
<fmt:formatDate value="${date}" pattern="yyyy-MM-dd" />
<sql:query dataSource="${dataSource}" var="result">
SELECT * FROM users
</sql:query>
Пользовательские теги позволяют инкапсулировать повторяющийся код и функциональность в простые и переиспользуемые компоненты.
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="https://java.sun.com/xml/ns/javaee"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://java.sun.com/xml/ns/javaee
https://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1">
<tlib-version>1.0</tlib-version>
<short-name>custom</short-name>
<uri>https://example.com/custom</uri>
<tag>
<name>hello</name>
<tag-class>com.example.tags.HelloTag</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>
package com.example.tags;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
import java.io.IOException;
public class HelloTag extends TagSupport {
@Override
public int doStartTag() throws JspException {
try {
pageContext.getOut().print("Hello, World!");
} catch (IOException e) {
throw new JspException("Error: " + e.getMessage());
}
return SKIP_BODY;
}
}
<%@ taglib uri="https://example.com/custom" prefix="custom" %>
<custom:hello />
Использование Spring MVC
Это мощный веб-фреймворк, который упрощает создание веб-приложений с разделением логики и представления. Он позволяет использовать контроллеры для обработки запросов и передачу данных на JSP страницы.
@Controller
public class UserController {
@GetMapping("/user")
public String getUser(Model model) {
User user = new User("John Doe");
model.addAttribute("user", user);
return "user";
}
}
<%@ taglib uri="https://www.springframework.org/tags" prefix="spring" %>
<html>
<head>
<title>User Page</title>
</head>
<body>
<h1>Welcome, <spring:eval expression="user.name" /></h1>
</body>
</html>
Эти методы помогут сделать код более чистым, поддерживаемым и функциональным.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5👀2❤1
Anonymous Quiz
10%
Интерфейсы могут содержать поля
65%
Абстрактные классы могут реализовывать методы
8%
Интерфейсы могут содержать конструкторы
16%
Абстрактные классы не могут наследоваться
🤔12🤯4👀2👾2❤1
Для переноса строки в HTML с помощью JSP можно использовать несколько методов, включая непосредственно HTML теги, JSP Expression Language (EL) и JSTL (JavaServer Pages Standard Tag Library).
Самый простой способ сделать перенос строки в HTML — использовать тег
<br>.<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Line Break Example</title>
</head>
<body>
<p>This is line 1.<br>This is line 2.</p>
</body>
</html>
Если получаете строку из бэкэнда и хотите вставить переносы строк, можно преобразовать символы новой строки (
\n) в HTML тег <br>.<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="https://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<html>
<head>
<title>EL Line Break Example</title>
</head>
<body>
<%
String text = "This is line 1.\nThis is line 2.";
request.setAttribute("text", text);
%>
<p>${fn:replace(text, '\n', '<br>')}</p>
</body>
</html>
c:forEachМожно разделить строку на части и вывести каждую часть в отдельном абзаце или строке.
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="https://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="https://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<html>
<head>
<title>JSTL Line Break Example</title>
</head>
<body>
<%
String text = "This is line 1.\nThis is line 2.\nThis is line 3.";
request.setAttribute("text", text);
%>
<c:forEach var="line" items="${fn:split(text, '\n')}">
<p>${line}</p>
</c:forEach>
</body>
</html>
pre тегаДля отображения многострочного текста без необходимости замены символов новой строки можно использовать HTML тег
<pre>.<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Preformatted Text Example</title>
</head>
<body>
<%
String text = "This is line 1.\nThis is line 2.\nThis is line 3.";
request.setAttribute("text", text);
%>
<pre>${text}</pre>
</body>
</html>
Также можно создать пользовательский метод в классе Java, который будет заменять символы новой строки на теги
<br>, и использовать его в JSP странице.package com.example.util;
public class StringUtil {
public static String convertNewlinesToHtml(String text) {
if (text == null) {
return "";
}
return text.replace("\n", "<br>");
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" import="com.example.util.StringUtil" %>
<html>
<head>
<title>Custom Method Line Break Example</title>
</head>
<body>
<%
String text = "This is line 1.\nThis is line 2.";
%>
<p><%= StringUtil.convertNewlinesToHtml(text) %></p>
</body>
</html>
<br> с помощью функции fn:replace. c:forEach: Разделение текста на строки и вывод каждой строки отдельно. <pre>: Для отображения многострочного текста без изменений.<br>.Каждый из этих методов имеет свои преимущества и используется в зависимости от конкретных требований и контекста задачи.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Anonymous Quiz
11%
Типы переменных определяются во время выполнения
80%
Типы переменных определяются во время компиляции
2%
Типы переменных могут изменяться во время выполнения
6%
Типы переменных могут не указываться
🔥3
Конфигурирование стандартных JSP тегов в
web.xml не требуется по нескольким причинам. Основная причина заключается в том, что стандартные теги JSP, такие как JSTL (JavaServer Pages Standard Tag Library), уже поддерживаются контейнером сервлетов, и их использование упрощается с помощью декларативного подхода в самих страницах.<%@ taglib %>. Это упрощает процесс и устраняет необходимость дополнительных настроек в web.xml.<%@ taglib uri="https://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="https://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
web.xml приводит к дублированию информации, поскольку теги все равно придется подключать в каждой JSP странице. Это может усложнить поддержку и увеличение риска несоответствий между конфигурацией и реальным использованием.<%@ taglib %>, что является стандартным и рекомендуемым способом подключения. Это обеспечивает совместимость и переносимость кода между различными сервлет-контейнерами.<%@ taglib uri="https://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>JSTL Core Tags Example</title>
</head>
<body>
<c:set var="user" value="John Doe" />
<c:if test="${not empty user}">
<p>Welcome, ${user}!</p>
</c:if>
</body>
</html>
<%@ taglib uri="https://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<html>
<head>
<title>JSTL Formatting Tags Example</title>
</head>
<body>
<fmt:formatDate value="${pageContext.request.time}" pattern="yyyy-MM-dd HH:mm:ss" var="formattedDate" />
<p>Current Date and Time: ${formattedDate}</p>
</body>
</html>
Конфигурирование стандартных JSP тегов в
web.xml не требуется, потому что:Таким образом, использование стандартных тегов напрямую в JSP страницах является более простым, понятным и поддерживаемым подходом.
Please open Telegram to view this post
VIEW IN TELEGRAM
Anonymous Quiz
10%
Копия класса
81%
Отдельный представитель класса
2%
Метод класса
6%
Атрибут класса
🤔19🤯7❤2😁2👍1
Обработка ошибок на JSP страницах важна для обеспечения хорошего пользовательского опыта и для предотвращения раскрытия конфиденциальной информации о вашем веб-приложении. Существует несколько способов обработки ошибок в JSP, включая использование специальных страниц обработки ошибок, директив JSP и конфигурации в
web.xml. errorPage и isErrorPage в JSPerrorPageПозволяет указывать страницу, на которую будет перенаправлен пользователь в случае возникновения ошибки на текущей странице.
<%@ page errorPage="error.jsp" %>
<%
// Провоцирование ошибки для демонстрации
int result = 10 / 0;
%>
isErrorPageУказывается на странице, которая будет использоваться для обработки ошибок. На этой странице доступен неявный объект
exception.<%@ page isErrorPage="true" %>
<html>
<head>
<title>Error Page</title>
</head>
<body>
<h1>An error occurred</h1>
<p>Error Details: ${exception.message}</p>
</body>
</html>
web.xmlМожно настроить страницы обработки ошибок для различных типов исключений или статус-кодов HTTP в файле конфигурации
web.xml.<web-app>
<error-page>
<exception-type>java.lang.ArithmeticException</exception-type>
<location>/error.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.NullPointerException</exception-type>
<location>/error.jsp</location>
</error-page>
</web-app>
Предоставляет тег
<c:catch> для обработки исключений в JSP страницах.<%@ taglib uri="https://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>JSTL Error Handling Example</title>
</head>
<body>
<c:catch var="error">
<%
int result = 10 / 0; // Провоцирование ошибки
%>
</c:catch>
<c:if test="${not empty error}">
<p>Error occurred: ${error}</p>
</c:if>
</body>
</html>
Можно создать фильтр, который будет перехватывать ошибки и перенаправлять пользователя на страницу обработки ошибок.
package com.example.filters;
import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class ErrorFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
// Инициализация фильтра (если необходимо)
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
try {
chain.doFilter(request, response);
} catch (Throwable t) {
((HttpServletResponse) response).sendRedirect("error.jsp");
}
}
public void destroy() {
// Очистка ресурсов (если необходимо)
}
}
Для отслеживания и анализа ошибок можно настроить логирование.
<%@ page import="java.util.logging.*" %>
<%
Logger logger = Logger.getLogger("MyAppLogger");
try {
int result = 10 / 0; // Провоцирование ошибки
} catch (Exception e) {
logger.log(Level.SEVERE, "Error occurred", e);
throw e;
}
%>
Для обработки ошибок в JSP страницах можно использовать различные методы:
exception. web.xml: Настройка страниц обработки ошибок для различных типов исключений и статус-кодов HTTP. <c:catch>: Обработка исключений непосредственно в JSP странице.Эти методы позволяют эффективно обрабатывать ошибки, обеспечивая хороший пользовательский опыт и защищая ваше приложение от раскрытия конфиденциальной информации.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍1😁1👀1
Anonymous Quiz
12%
add(), remove(), update()
62%
compute(), computeIfAbsent(), computeIfPresent()
8%
insert(), replace(), delete()
18%
find(), search(), sort()
🤯20😁5❤2
ServletContext представляет собой интерфейс в Java Servlet API, который позволяет сервлетам взаимодействовать с веб-сервером и обмениваться данными между собой. Давайте разберем это понятие более детально:ServletContext предоставляет возможность сервлетам обмениваться данными друг с другом. Это полезно, когда нужно сохранить общие данные, доступные всем сервлетам в приложении.ServletContext можно получать параметры конфигурации, заданные в файле web.xml. Эти параметры могут быть использованы для настройки сервлетов.ServletContext позволяет получить доступ к статическим ресурсам, таким как HTML, изображения, файлы CSS и JavaScript, которые находятся в контексте веб-приложения.ServletContext можно регистрировать слушателей (Listeners) для отслеживания событий в веб-приложении, а также управлять атрибутами, доступными всему приложению.Когда веб-приложение загружается, сервер создает объект
ServletContext для этого приложения. Каждый сервлет может получить доступ к этому объекту через метод getServletContext().import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ExampleServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Получаем объект ServletContext
ServletContext context = getServletContext();
// Получаем параметр конфигурации из web.xml
String paramValue = context.getInitParameter("configParam");
// Устанавливаем атрибут в ServletContext
context.setAttribute("sharedAttribute", "Some Value");
// Получаем атрибут из ServletContext
String sharedValue = (String) context.getAttribute("sharedAttribute");
// Используем параметры и атрибуты
response.getWriter().println("Config Param: " + paramValue);
response.getWriter().println("Shared Attribute: " + sharedValue);
}
}
context.setAttribute("attrName", "attrValue");
String attrValue = (String) context.getAttribute("attrName");
String configValue = context.getInitParameter("paramName");
context.addListener(new MyListener());
InputStream inputStream = context.getResourceAsStream("/WEB-INF/config.properties");
ServletContext — это интерфейс, который предоставляет сервлетам доступ к параметрам конфигурации, общим данным и ресурсам веб-приложения, а также позволяет обмениваться данными между сервлетами.Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🤯2❤1
getInitParameter(String name): Глобальные параметры.getAttribute(String name), setAttribute(String name, Object object): Управление атрибутами.getInitParameter(String name): Параметры инициализации сервлета.getServletName(): Имя сервлета.ServletContext предоставляет глобальный контекст для всего приложения.ServletConfig предоставляет конфигурацию для одного сервлета.ServletContext — для всего приложения, ServletConfig — для одного сервлета.Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🤯2
Anonymous Quiz
72%
Обычные, Абстрактные, Финализированные, Интерфейсы, Перечисления, Вложенные
26%
Обычные, Абстрактные, Приватные, Публичные, Защищенные
1%
Основные, Вторичные, Вспомогательные, Обобщенные
2%
Простые, Сложные, Встроенные, Внешние
😁14🤔4👀2👾2❤1
Интерфейс
ServletResponse в Java Servlet API используется для создания и отправки ответа клиенту (например, браузеру) от сервлета. Он предоставляет методы для настройки ответного сообщения, включая контент, заголовки и выходные данные.text/html, application/json и т.д.PrintWriter и ServletOutputStream. response.setContentType("text/html");
PrintWriter для записи текстовых данных в ответ.PrintWriter out = response.getWriter();
out.println("<html><body>Hello, World!</body></html>");
ServletOutputStream для записи бинарных данных в ответ.ServletOutputStream out = response.getOutputStream();
out.write(byteArray);
response.setCharacterEncoding("UTF-8");
response.setContentLength(content.length());
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ResponseServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Установка типа контента и кодировки
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
// Получение объекта PrintWriter для записи текста
PrintWriter out = response.getWriter();
// Запись HTML-ответа
out.println("<html>");
out.println("<head><title>Sample Response</title></head>");
out.println("<body>");
out.println("<h1>Hello, World!</h1>");
out.println("</body>");
out.println("</html>");
}
}
Интерфейс
ServletResponse нужен для настройки и отправки HTTP-ответов клиенту, позволяя устанавливать тип контента, кодировку, заголовки и записывать данные в ответ.Please open Telegram to view this post
VIEW IN TELEGRAM
👍2👀1
Anonymous Quiz
3%
LinkedList основан на массиве, ArrayList на списке
47%
ArrayList основан на массиве, LinkedList на списке
10%
LinkedList быстрее для случайного доступа, ArrayList для вставки/удаления
40%
ArrayList быстрее для случайного доступа, LinkedList для вставки/удаления
😁37🤔10👍1
Интерфейс
ServletRequest в Java Servlet API используется для получения данных запроса от клиента (например, браузера) к сервлету. Он предоставляет методы для доступа к параметрам запроса, заголовкам, информации о клиенте и другим аспектам HTTP-запроса. String paramValue = request.getParameter("paramName");
String[] values = request.getParameterValues("paramName");
request.setAttribute("attrName", "attrValue");
String attrValue = (String) request.getAttribute("attrName");
String clientIp = request.getRemoteAddr();
BufferedReader для чтения данных из тела запроса.BufferedReader reader = request.getReader();
String line;
while ((line = reader.readLine()) != null) {
// Обработка строки
}
ServletInputStream для чтения бинарных данных из тела запроса.ServletInputStream inputStream = request.getInputStream();
int data;
while ((data = inputStream.read()) != -1) {
// Обработка данных
}
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class RequestServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Получение параметров запроса
String username = request.getParameter("username");
String password = request.getParameter("password");
// Получение информации о клиенте
String clientIp = request.getRemoteAddr();
// Установка атрибута запроса
request.setAttribute("processed", true);
// Логика обработки запроса
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
response.getWriter().println("Username: " + username);
response.getWriter().println("Client IP: " + clientIp);
}
}
Интерфейс
ServletRequest нужен для получения данных от клиента, таких как параметры запроса, атрибуты, информация о клиенте и данные из тела запроса, что позволяет сервлету обрабатывать запросы и генерировать соответствующие ответы.Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🤯2
Anonymous Quiz
45%
По ссылке
42%
По значению
7%
По указателю
6%
По копии
😁10👍6🤯1
RequestDispatcher — это интерфейс в Java Servlet API, который используется для передачи запроса от одного сервлета к другому ресурсу на сервере, например, к другому сервлету, JSP-странице или статическому файлу (HTML, изображение и т.д.). RequestDispatcher позволяет реализовать механизм включения или пересылки запросов и ответов. RequestDispatcher dispatcher = request.getRequestDispatcher("targetResource");
dispatcher.forward(request, response);
RequestDispatcher dispatcher = request.getRequestDispatcher("targetResource");
dispatcher.include(request, response);
Объект
RequestDispatcher можно получить через методы getRequestDispatcher(String path) или getNamedDispatcher(String name) у объекта ServletRequest или ServletContext. RequestDispatcher dispatcher = request.getRequestDispatcher("/path/to/resource");
ServletContext context = getServletContext();
RequestDispatcher dispatcher = context.getRequestDispatcher("/path/to/resource");
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.RequestDispatcher;
public class ForwardServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Логика обработки запроса
// Перенаправление на другой ресурс
RequestDispatcher dispatcher = request.getRequestDispatcher("targetResource.jsp");
dispatcher.forward(request, response);
}
}
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.RequestDispatcher;
public class IncludeServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Логика обработки запроса
// Включение другого ресурса
RequestDispatcher dispatcher = request.getRequestDispatcher("header.jsp");
dispatcher.include(request, response);
// Основной контент
response.getWriter().println("<h1>Main Content</h1>");
// Включение другого ресурса
dispatcher = request.getRequestDispatcher("footer.jsp");
dispatcher.include(request, response);
}
}
RequestDispatcher используется для перенаправления запросов и включения содержимого других ресурсов на сервере, что позволяет более гибко и эффективно организовывать обработку запросов и формирование ответов в веб-приложениях.Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🤯2❤1
Ставь 👍 если знал ответ и 🔥 если нет
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21👀3👍2
Anonymous Quiz
2%
Набор классов и интерфейсов для работы с базами данных
1%
Набор классов и интерфейсов для работы с файлами
96%
Набор классов и интерфейсов для работы с коллекциями объектов
1%
Набор классов и интерфейсов для работы с сетью
😁15❤1
Для вызова одного сервлета из другого в Java можно использовать интерфейс
RequestDispatcher, который позволяет перенаправлять запросы (forward) или включать содержимое другого сервлета (include). Это делается внутри сервлета-инициатора с использованием метода getRequestDispatcher(String path) или getNamedDispatcher(String name) для получения объекта RequestDispatcher.import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.RequestDispatcher;
public class FirstServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Логика обработки запроса
String username = request.getParameter("username");
request.setAttribute("user", username);
// Перенаправление запроса на другой сервлет
RequestDispatcher dispatcher = request.getRequestDispatcher("SecondServlet");
dispatcher.forward(request, response);
}
}
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.RequestDispatcher;
public class MainServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Включение заголовка
RequestDispatcher dispatcher = request.getRequestDispatcher("HeaderServlet");
dispatcher.include(request, response);
// Основной контент
response.getWriter().println("<h1>Main Content</h1>");
// Включение подвала
dispatcher = request.getRequestDispatcher("FooterServlet");
dispatcher.include(request, response);
}
}
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class SecondServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Получаем атрибут из запроса
String username = (String) request.getAttribute("user");
// Логика обработки
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
response.getWriter().println("Hello, " + username);
}
}
HttpServletRequest: request.getRequestDispatcher("SecondServlet").ServletContext: getServletContext().getRequestDispatcher("/SecondServlet").dispatcher.forward(request, response): Перенаправляет запрос.dispatcher.include(request, response): Включает содержимое.Чтобы вызвать один сервлет из другого, используйте
RequestDispatcher с методами forward или include для передачи управления или включения содержимого другого сервлета в ответ.Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤1🤯1
👾 1715 вопросов собесов на Java Developer
🔒 База реальных собесов
🔒 База тестовых заданий
👾 Список менторов
👩💻 Java
├ Вакансии
├ LeetCode ответы
└ Тесты
🖥 Python
├ Вопросы собесов
├ Вакансии
├ LeetCode ответы
└ Тесты
🖥 Frontend
├ Вопросы собесов
├ Вакансии
├ LeetCode ответы
└ Тесты
👩💻 С/С++
├ Вопросы собесов
├ Вакансии
├ LeetCode ответы
└ Тесты
👩💻 Kotlin
├ Вопросы собесов
├ Вакансии
├ LeetCode ответы
└ Тесты
👩💻 С#
├ Вопросы собесов
├ Вакансии
├ LeetCode ответы
└ Тесты
👩💻 Swift
├ Вопросы собесов
├ Вакансии
├ LeetCode ответы
└ Тесты
👩💻 PHP
├ Вопросы собесов
├ Вакансии
├ LeetCode ответы
└ Тесты
🖥 Тестировщик
├ Вопросы собесов
├ Вакансии
└ Тесты
🖥 Data Science
├ Вопросы собесов
├ Вакансии
└ Тесты
👩💻 DevOps
├ Вопросы собесов
├ Вакансии
└ Тесты
👣 Golang
├ Вопросы собесов
├ Вакансии
├ LeetCode ответы
└ Тесты
⚙ Backend
└ Вопросы собесов
👾 Список менторов
├ Вакансии
├ LeetCode ответы
└ Тесты
├ Вопросы собесов
├ Вакансии
├ LeetCode ответы
└ Тесты
├ Вопросы собесов
├ Вакансии
├ LeetCode ответы
└ Тесты
├ Вопросы собесов
├ Вакансии
├ LeetCode ответы
└ Тесты
├ Вопросы собесов
├ Вакансии
├ LeetCode ответы
└ Тесты
├ Вопросы собесов
├ Вакансии
├ LeetCode ответы
└ Тесты
├ Вопросы собесов
├ Вакансии
├ LeetCode ответы
└ Тесты
├ Вопросы собесов
├ Вакансии
├ LeetCode ответы
└ Тесты
├ Вопросы собесов
├ Вакансии
└ Тесты
├ Вопросы собесов
├ Вакансии
└ Тесты
├ Вопросы собесов
├ Вакансии
└ Тесты
├ Вопросы собесов
├ Вакансии
├ LeetCode ответы
└ Тесты
└ Вопросы собесов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤3👾1