Java | Вопросы собесов – Telegram
Java | Вопросы собесов
11.4K subscribers
41 photos
3 videos
1.13K links
Download Telegram
🤔 Как осуществляется запрос к базе данных и обработка результатов?

🚩Этапы запроса к базе данных и обработки результатов

1⃣Установка соединения
Connection connection = DriverManager.getConnection(url, username, password);


2⃣Создание запроса
Statement:
  Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM employees");


PreparedStatement
  PreparedStatement pstmt = connection.prepareStatement("SELECT * FROM employees WHERE id = ?");
pstmt.setInt(1, 1);
ResultSet rs = pstmt.executeQuery();


3⃣Обработка результатов
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
double salary = rs.getDouble("salary");
System.out.println("ID: " + id + ", Name: " + name + ", Salary: " + salary);
}


4⃣Закрытие ресурсов
rs.close();
stmt.close(); // или pstmt.close();
connection.close();


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍111
🤔 Какие виды join знаешь?

Существует INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN, CROSS JOIN и SELF JOIN. INNER JOIN возвращает совпадающие строки из обеих таблиц, LEFT JOIN добавляет строки из левой таблицы с null для отсутствующих данных. Каждый тип JOIN решает разные задачи объединения данных.

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

Для вызова хранимой процедуры в JDBC используется интерфейс CallableStatement.

🚩Этапы вызова

1⃣Установка соединения
Connection connection = DriverManager.getConnection(url, username, password);


2⃣Создание CallableStatement
CallableStatement cstmt = connection.prepareCall("{call myStoredProc(?)}");


3⃣Установка параметров (если есть)
cstmt.setInt(1, 1); // Установка значения первого параметра


4⃣Выполнение вызова
ResultSet rs = cstmt.executeQuery();


5⃣Обработка результатов
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.println("ID: " + id + ", Name: " + name);
}


6⃣Закрытие ресурсов
rs.close();
cstmt.close();
connection.close();


🚩Пример полного кода

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class CallStoredProcExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "myusername";
String password = "mypassword";

try {
Connection connection = DriverManager.getConnection(url, username, password);

// Вызов хранимой процедуры
CallableStatement cstmt = connection.prepareCall("{call myStoredProc(?)}");
cstmt.setInt(1, 1);

// Выполнение и обработка результатов
ResultSet rs = cstmt.executeQuery();
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.println("ID: " + id + ", Name: " + name);
}

// Закрытие ресурсов
rs.close();
cstmt.close();
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}


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

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

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

Закрытие соединения с базой данных и связанных ресурсов (таких как ResultSet и Statement) важно для освобождения ресурсов и предотвращения утечек памяти.

🚩Этапы закрытия соединения

1⃣Закрытие ResultSet
interface IRepository {
doSomething(): void;
}

class Repository implements IRepository {
doSomething() {
console.log("Doing something...");
}
}

class Service {
private repository: IRepository;

constructor(repository: IRepository) {
this.repository = repository;
}

performAction() {
this.repository.doSomething();
}
}

const repository = new Repository();
const service = new Service(repository);
service.performAction();


2⃣Закрытие Statement или PreparedStatement
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}


3⃣Закрытие Connection
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}


🚩Полный пример кода

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class CloseConnectionExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "myusername";
String password = "mypassword";

Connection connection = null;
PreparedStatement pstmt = null;
ResultSet rs = null;

try {
// Установка соединения с базой данных
connection = DriverManager.getConnection(url, username, password);

// Создание PreparedStatement и выполнение запроса
String sql = "SELECT * FROM employees WHERE department = ?";
pstmt = connection.prepareStatement(sql);
pstmt.setString(1, "HR");
rs = pstmt.executeQuery();

// Обработка результатов
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
double salary = rs.getDouble("salary");
System.out.println("ID: " + id + ", Name: " + name + ", Salary: " + salary);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// Закрытие ресурсов
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🤯1
🤔 Почему синглтон называют антипаттерном?

Синглтон нарушает принципы SOLID, создавая скрытую глобальную зависимость. Это усложняет тестирование, расширение кода и может вызывать проблемы в многопоточности. Кроме того, он снижает гибкость архитектуры приложения, что делает его нежелательным для сложных систем.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18👍31🤯1
🤔 Что нужно, чтобы написанная на Java программа, заработала?

Чтобы написанная на Java программа заработала, необходимо выполнить несколько шагов, начиная с написания кода и заканчивая его запуском.

🚩Шаги

1⃣Написание кода
Напишите Java-код в текстовом редакторе или интегрированной среде разработки (IDE), такой как IntelliJ IDEA, Eclipse или NetBeans.
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}


2⃣Установка Java Development Kit (JDK)
Убедитесь, что на вашем компьютере установлен JDK (Java Development Kit). JDK включает в себя компилятор (javac) и виртуальную машину Java (JVM). Скачайте и установите последнюю версию JDK с сайта Oracle или OpenJDK.

3⃣Компиляция кода
Компилируйте Java-код в байт-код, который будет выполняться на JVM. Для этого используйте команду javac. После компиляции появится файл HelloWorld.class, содержащий байт-код.
javac HelloWorld.java


4⃣Запуск программы
Запустите скомпилированный байт-код с помощью виртуальной машины Java (JVM), используя команду java.
java HelloWorld


Вывод должен быть:
Hello, World!


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13😁4🎉4
🤔 Назови сколько существует нормальных форм в SQL?

Существует шесть нормальных форм: 1NF, 2NF, 3NF, BCNF, 4NF и 5NF. Обычно используют до третьей или формы Бойса-Кодда, так как этого достаточно для большинства задач. Более высокие формы применяются редко из-за их сложности и дополнительных ограничений.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍7
🤔 За счет чего создаваемые классы могут быстро менять реализацию?

🟠Интерфейсы и абстрактные классы
Использование интерфейсов и абстрактных классов позволяет определить контракт (набор методов), который класс должен реализовать. Это позволяет легко менять реализацию, не изменяя код, который использует эти интерфейсы.
// Интерфейс
public interface PaymentProcessor {
void processPayment(double amount);
}

// Одна реализация
public class CreditCardPaymentProcessor implements PaymentProcessor {
@Override
public void processPayment(double amount) {
System.out.println("Processing credit card payment of " + amount);
}
}

// Другая реализация
public class PayPalPaymentProcessor implements PaymentProcessor {
@Override
public void processPayment(double amount) {
System.out.println("Processing PayPal payment of " + amount);
}
}


🟠Принцип инверсии зависимостей (Dependency Inversion Principle)
Этот принцип подразумевает, что высокоуровневые модули не должны зависеть от низкоуровневых модулей. Оба должны зависеть от абстракций. Это достигается с помощью внедрения зависимостей (Dependency Injection, DI).
public class PaymentService {
private PaymentProcessor paymentProcessor;

// Конструктор принимает интерфейс, а не конкретную реализацию
public PaymentService(PaymentProcessor paymentProcessor) {
this.paymentProcessor = paymentProcessor;
}

public void makePayment(double amount) {
paymentProcessor.processPayment(amount);
}
}

// Использование разных реализаций
PaymentService service = new PaymentService(new CreditCardPaymentProcessor());
service.makePayment(100.0);

service = new PaymentService(new PayPalPaymentProcessor());
service.makePayment(200.0);


🟠Паттерн Стратегия (Strategy Pattern)
Паттерн Стратегия позволяет определять семейство алгоритмов, инкапсулировать их и делать их взаимозаменяемыми. Это позволяет алгоритмам изменяться независимо от клиентов, которые их используют.
// Интерфейс стратегии
public interface CompressionStrategy {
void compress(String data);
}

// Конкретная стратегия
public class ZipCompressionStrategy implements CompressionStrategy {
@Override
public void compress(String data) {
System.out.println("Compressing using ZIP");
}
}

// Другая стратегия
public class RarCompressionStrategy implements CompressionStrategy {
@Override
public void compress(String data) {
System.out.println("Compressing using RAR");
}
}

// Контекст, использующий стратегию
public class CompressionContext {
private CompressionStrategy strategy;

public void setStrategy(CompressionStrategy strategy) {
this.strategy = strategy;
}

public void compress(String data) {
strategy.compress(data);
}
}

// Использование
CompressionContext context = new CompressionContext();
context.setStrategy(new ZipCompressionStrategy());
context.compress("MyData");

context.setStrategy(new RarCompressionStrategy());
context.compress("MyData");


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

LEFT JOIN возвращает все строки из левой таблицы, включая не совпадающие, с null вместо отсутствующих данных. INNER JOIN возвращает только те строки, которые имеют совпадения в обеих таблицах. Таким образом, LEFT JOIN полезен для сохранения всех данных из одной таблицы, даже если нет соответствий.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14
🤔 Расскажи об этапах (фазах) жизненного цикла JSP.?

🟠Перевод (Translation)
JSP страница переводится в сервлетный Java-код. JSP контейнер анализирует содержимое JSP страницы и создает соответствующий сервлетный исходный код (.java файл).

🟠Компиляция (Compilation)
Сервлетный исходный код компилируется в байт-код, создавая .class файл (сервлет). Этот этап аналогичен компиляции обычного Java-кода.

🟠Загрузка (Loading)
Скомпилированный класс сервлета загружается в память. Контейнер загружает класс сервлета, чтобы он мог быть выполнен.

🟠Инициализация (Initialization)
Контейнер вызывает метод jspInit(). Этот метод вызывается один раз при первом создании сервлета или при перезапуске сервера и предназначен для выполнения инициализационных задач (например, настройка ресурсов).

🟠Обработка запросов (Request Processing)
Для каждого HTTP-запроса вызывается метод jspService(). Этот метод обрабатывает входящий запрос и генерирует соответствующий ответ. Основная работа по генерации динамического содержимого происходит на этом этапе.

🟠Завершение (Destruction)
Когда JSP страница выводится из эксплуатации (например, при остановке сервера), контейнер вызывает метод jspDestroy(). Этот метод используется для освобождения ресурсов (например, закрытие соединений с базой данных).

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

Полиморфизм — это способность одного интерфейса быть реализованным или использованным разными способами. В ООП это позволяет использовать методы с одинаковым названием для различных классов, адаптируя их поведение. Это облегчает расширяемость и поддержку кода.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🤔1
🤔 Расскажи о методах жизненного цикла JSP?

Жизненный цикл JSP страницы включает несколько ключевых методов, которые выполняются на различных этапах от инициализации до завершения.

🚩Методы:

🟠`jspInit()`
Этот метод вызывается контейнером сервлетов один раз, когда JSP страница загружается впервые или когда она перезагружается. Инициализация ресурсов, таких как подключение к базе данных, настройка начальных параметров и другие задачи подготовки.
public void jspInit() {
// Инициализация ресурсов
System.out.println("jspInit() вызван");
}


🟠`_jspService(HttpServletRequest request, HttpServletResponse response)`
Этот метод вызывается контейнером для обработки каждого запроса, поступающего к JSP странице. Метод обрабатывает HTTP-запросы и генерирует ответы. Основная логика для обработки запроса и генерации динамического HTML содержимого.
public void _jspService(HttpServletRequest request, HttpServletResponse response) {
// Обработка запроса
response.getWriter().println("Обработка запроса в _jspService()");
}


🟠`jspDestroy()`
Этот метод вызывается контейнером сервлетов перед тем, как JSP страница будет выгружена из памяти (например, при завершении работы сервера или при перезагрузке приложения). Очистка и освобождение ресурсов, таких как закрытие подключений к базе данных и другие задачи завершения.
public void jspDestroy() {
// Очистка ресурсов
System.out.println("jspDestroy() вызван");
}


🚩Иллюстрация использования методов

<%-- JSP Page --%>
<%@ 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() вызван");
}
%>


🚩Порядок вызова методов

1⃣`jspInit()`
Вызывается один раз при загрузке JSP страницы.
2⃣`_jspService(HttpServletRequest request, HttpServletResponse response)`
Вызывается каждый раз при получении нового запроса к JSP странице.
3⃣`jspDestroy()`
Вызывается один раз перед выгрузкой JSP страницы из памяти.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какой цикл жизни Spring Beans?

Цикл жизни Spring Beans включает создание объекта, внедрение зависимостей, вызов методов инициализации, использование бина и завершение его жизненного цикла. Spring управляет всем этим процессом через контейнер ApplicationContext. Перед удалением вызываются методы завершения, если они определены.

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

🟠`jspInit()`
Метод вызывается один раз при инициализации JSP страницы. Используется для выполнения инициализационных задач, таких как настройка ресурсов (например, подключение к базе данных).
public void jspInit() {
// Инициализация ресурсов
System.out.println("jspInit() вызван");
}


🟠`jspDestroy()`
Метод вызывается один раз перед выгрузкой JSP страницы из памяти. Используется для очистки ресурсов, таких как закрытие подключений к базе данных.
public void jspDestroy() {
// Очистка ресурсов
System.out.println("jspDestroy() вызван");
}


🟠`_jspService(HttpServletRequest request, HttpServletResponse response)`
Метод вызывается для обработки каждого запроса к JSP странице. Основная логика обработки запросов и генерации ответа. Этот метод автоматически генерируется контейнером сервлетов и не может быть переопределен вручную в JSP странице.
public void _jspService(HttpServletRequest request, HttpServletResponse response) {
// Обработка запроса
response.getWriter().println("Обработка запроса в _jspService()");
}


🚩Пример переопределения методов в JSP

<%@ 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`
Поместите 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
🤔 Какая разница между динамическим и статическим содержимым JSP?

🟠Статическое содержимое
Неподвижный контент, который не изменяется при каждом запросе. Обычно это 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
👍43😁1
🤔Что такое класс object?

Object — это базовый класс в Java, от которого наследуются все другие классы, предоставляющий ключевые методы, такие как equals, hashCode, toString, и clone.

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

JSP предоставляет различные типы тегов для упрощения разработки веб-страниц, позволяя интегрировать Java-код и управлять контентом.

🚩Директивы (Directives)

🟠`<%@ page %>`
Устанавливает атрибуты страницы, такие как кодировка, язык, импорты и другие параметры.
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="java.util.Date" %>


🟠`<%@ include %>`
Включает содержимое другого файла во время компиляции страницы.
<%@ include file="header.jsp" %>


🟠`<%@ taglib %>`
Декларирует библиотеку тегов, используемых на странице.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>


🚩Скриплеты (Scriptlets)

<%
String message = "Hello, World!";
out.println(message);
%>


🚩Выражения (Expressions)

<p>Current date and time: <%= new java.util.Date() %></p>


🚩Декларации (Declarations)

<%! 
private int counter = 0;
public int getCounter() {
return counter++;
}
%>


🚩Теги действий (Action Tags)

🟠`<jsp:include>`
Включает содержимое другого ресурса во время выполнения.
<jsp:include page="header.jsp" />


🟠`<jsp:forward>`
Перенаправляет запрос на другой ресурс.
<jsp:forward page="login.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" />


🚩Теги JSTL (JSP Standard Tag Library)

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