Architec.Ton is a ecosystem on the TON chain with non-custodial wallet, swap, apps catalog and launchpad.
Main app: @architec_ton_bot
Our Chat: @architec_ton
EU Channel: @architecton_eu
Twitter: x.com/architec_ton
Support: @architecton_support
Last updated 1 month ago
Канал для поиска исполнителей для разных задач и организации мини конкурсов
Last updated 1 month, 3 weeks ago
*🤔 *Зачем нужен String Pool?
String Pool позволяет экономить память, храня строки в едином пуле и переиспользуя их, если строки имеют одинаковое значение.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай *📚*** Базу знаний
🤔 Взаимодействие JSP - сервлет - JSP?
1⃣Пользовательский запрос
Пользователь отправляет HTTP-запрос (например, через веб-браузер).
2⃣Сервлет
Запрос попадает к сервлету, который обрабатывает бизнес-логику. Сервлет может получать данные от пользователя, обрабатывать их, взаимодействовать с базой данных или другими компонентами приложения.
*3⃣*Передача данных на JSP
После обработки запроса сервлет перенаправляет его на JSP-страницу, передавая необходимые данные (атрибуты) для отображения.
*4⃣*JSP
JSP-страница генерирует HTML-ответ, используя переданные данные, и отправляет его обратно пользователю.
🚩Почему это нужно
1⃣Разделение задач
Сервлеты отвечают за обработку бизнес-логики, а JSP - за представление данных. Это позволяет разделить код на более управляемые части и облегчить сопровождение.
2⃣Повторное использование кода
Логику обработки данных можно легко использовать повторно в различных сервлетах, а JSP-страницы могут использоваться для разных представлений одних и тех же данных.
3⃣Упрощение разработки
Разработчики могут сосредоточиться на своих частях задачи (логика или представление), что ускоряет разработку и делает код более читабельным.
🚩Пример взаимодействия
Пользователь отправляет запрос
GET /users
Сервлет UserServlet
```
@WebServlet("/users")
public class UserServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Логика получения списка пользователей
List 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" %>
Список пользователей
```
Ставь *👍*** и забирай *📚*** Базу знаний
? Какие есть неявные, внутренние объекты JSP EL и их отличия от объектов JSP ?
? Спрашивают в 6% собеседований
JSP Expression Language (EL) предоставляет набор неявных (внутренних) объектов, которые упрощают доступ к данным и их обработку в JSP страницах. Эти неявные объекты JSP EL различаются от неявных объектов JSP и обеспечивают доступ к контексту выполнения веб-приложения.
? Описание неявных объектов
1️⃣ pageScope
Предоставляет доступ к атрибутам области видимости страницы (page scope).
```
<% pageContext.setAttribute("pageAttribute", "Page Scope Value"); %>
Page Attribute: ${pageScope.pageAttribute}
```
2️⃣ requestScope
Предоставляет доступ к атрибутам области видимости запроса (request scope).
```
<% request.setAttribute("requestAttribute", "Request Scope Value"); %>
Request Attribute: ${requestScope.requestAttribute}
```
3️⃣ sessionScope
Предоставляет доступ к атрибутам области видимости сессии (session scope).
```
<% session.setAttribute("sessionAttribute", "Session Scope Value"); %>
Session Attribute: ${sessionScope.sessionAttribute}
```
4️⃣ applicationScope
Предоставляет доступ к атрибутам области видимости приложения (application scope).
```
<% application.setAttribute("applicationAttribute", "Application Scope Value"); %>
Application Attribute: ${applicationScope.applicationAttribute}
```
5️⃣ param
Предоставляет доступ к параметрам запроса (query parameters) в виде строк.
```
Request Parameter: ${param.name}
```
6️⃣ paramValues
Предоставляет доступ к параметрам запроса в виде массивов строк (для параметров с несколькими значениями).
```
Request Parameter Values: ${paramValues.name[0]}, ${paramValues.name[1]}
```
7️⃣ header
Предоставляет доступ к заголовкам HTTP запроса в виде строк.
```
User\-Agent: ${header['User\-Agent']}
```
8️⃣ headerValues
Предоставляет доступ к заголовкам HTTP запроса в виде массивов строк (для заголовков с несколькими значениями).
```
Header Values: ${headerValues['Accept'][0]}, ${headerValues['Accept'][1]}
```
? Отличия между неявными объектами
1️⃣ Синтаксис и доступность:
➕ JSP: Неявные объекты доступны напрямую в скриптлетах и выражениях внутри JSP страниц (например, request
, response
, session
, application
).
➕ JSP EL: Неявные объекты EL доступны через синтаксис ${...}
и обеспечивают более чистый и понятный способ доступа к данным.
2️⃣ Область видимости:
➕ JSP: Неявные объекты предоставляют доступ к данным и контексту выполнения напрямую через Java объекты (например, request.getParameter("name")
).
➕ JSP EL: Неявные объекты EL упрощают доступ к данным через области видимости, такие как pageScope
, requestScope
, sessionScope
, и applicationScope
, что позволяет легко различать источники данных.
3️⃣ Функциональность:
➕ JSP: Обеспечивает полный доступ ко всем методам и свойствам Java объектов.
➕ JSP EL: Обеспечивает ограниченный, но удобный доступ к часто используемым данным и свойствам, улучшая читабельность и поддержку кода.
? Примеры:
➕ JSP
```
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
JSP Example
Request Attribute: <%= request.getAttribute("attribute") %>
```
➕ JSP EL
```
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
JSP EL Example
Request Attribute: ${requestScope.attribute}
```
Неявные объекты JSP EL (pageScope
, requestScope
, sessionScope
, applicationScope
, param
, paramValues
, header
, headerValues
, cookie
, initParam
, pageContext
) предоставляют удобный и чистый способ доступа к данным и контексту выполнения веб-приложения. В отличие от неявных объектов JSP, они обеспечивают более структурированный и читаемый подход к управлению данными и их обработке в JSP страницах.
? База собесов | ? База тестовых
? Что такое SOLID ?
SOLID — это акроним, представляющий пять основных принципов ООП и дизайна, направленных на повышение гибкости, масштабируемости и поддерживаемости ПО. Они помогает избежать проблемы с проектированием, такие как жесткая зависимость между компонентами программы и сложности в внесении изменений или добавлении новых функций.
? Принцип единственной ответственности (SRP)
➕ Подчеркивает важность разделения функциональности, чтобы каждый класс выполнял только одну задачу.
```
class UserSettings {
void changeEmail(User user) {
if(checkAccess(user)) {
// Изменение email пользователя
}
}
boolean checkAccess(User user) {
// Проверка прав доступа
return true;
}
}
```
Здесь класс UserSettings
нарушает SRP, если бы в нем также были методы для управления пользователями. Лучше вынести метод checkAccess
в отдельный класс.
2️⃣ Принцип открытости/закрытости (OCP): Можно добавлять новую функциональность, не изменяя существующий код.
3️⃣ Принцип подстановки Лисков (LSP): Классы-наследники должны дополнять, а не изменять поведение базовых классов.
4️⃣ Принцип разделения интерфейса (ISP): Этот принцип ведет к созданию узкоспециализированных интерфейсов, вместо одного "толстого" интерфейса.
5️⃣ Принцип инверсии зависимостей (DIP): Оба типа модулей должны зависеть от абстракций. Абстракции не должны зависеть от деталей, а детали должны зависеть от абстракций. Этот принцип направлен на уменьшение зависимостей между модулями программы.
? Суть SOLID
SOLID принципы направлены на создание гибкой, масштабируемой архитектуры, которая легко поддается изменениям и развитию. Используя эти принципы, можно создавать системы, которые легче понимать, поддерживать и расширять.
? База собесов | ? База тестовых
Architec.Ton is a ecosystem on the TON chain with non-custodial wallet, swap, apps catalog and launchpad.
Main app: @architec_ton_bot
Our Chat: @architec_ton
EU Channel: @architecton_eu
Twitter: x.com/architec_ton
Support: @architecton_support
Last updated 1 month ago
Канал для поиска исполнителей для разных задач и организации мини конкурсов
Last updated 1 month, 3 weeks ago