Это способ хранения данных о пользователе между запросами в веб-приложении. Она позволяет серверу "помнить" пользователя, используя уникальный идентификатор сессии. Данные сессии сохраняются на сервере, а клиенту передается идентификатор сессии, обычно через cookie или URL.
Хранение данных: Информация о пользователе, например, логин или корзина покупок.
Идентификатор сессии: Уникальный ключ, связывающий пользователя с его данными.
Время жизни: Сессия имеет ограниченное время жизни, после которого данные удаляются.
Сессии позволяют отслеживать и сохранять состояние пользователя между запросами.
HttpSession session = request.getSession();
session.setAttribute("username", "JohnDoe");
String username = (String) session.getAttribute("username");
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤1
Для уведомления объекта в сессии о том, что сессия недействительна или закончилась, Java Servlet API предоставляет интерфейс
HttpSessionBindingListener и HttpSessionListener.HttpSessionBindingListener:Этот интерфейс позволяет объекту получать уведомления, когда он добавляется или удаляется из сессии.
valueBound(HttpSessionBindingEvent event): Вызывается, когда объект добавляется в сессию.valueUnbound(HttpSessionBindingEvent event): Вызывается, когда объект удаляется из сессии, либо когда сессия становится недействительной.import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
public class MySessionObject implements HttpSessionBindingListener {
@Override
public void valueBound(HttpSessionBindingEvent event) {
System.out.println("Object added to session");
}
@Override
public void valueUnbound(HttpSessionBindingEvent event) {
System.out.println("Object removed from session or session invalidated");
}
}
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.http.HttpSession;
public class SessionServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
MySessionObject obj = new MySessionObject();
session.setAttribute("myObject", obj);
}
}
HttpSessionListener:Этот интерфейс позволяет сервлету получать уведомления о событиях создания и уничтожения сессии.
sessionCreated(HttpSessionEvent se): Вызывается, когда создается новая сессия.sessionDestroyed(HttpSessionEvent se): Вызывается, когда сессия становится недействительной.import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class MySessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("Session created: " + se.getSession().getId());
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("Session destroyed: " + se.getSession().getId());
HttpSession session = se.getSession();
MySessionObject obj = (MySessionObject) session.getAttribute("myObject");
if (obj != null) {
obj.cleanup();
}
}
}
Регистрация
HttpSessionListener в web.xml:<listener>
<listener-class>com.example.MySessionListener</listener-class>
</listener>
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Anonymous Quiz
78%
Модификатор, запрещающий наследование класса
1%
Модификатор, разрешающий наследование класса
6%
Модификатор, разрешающий изменение переменной
16%
Модификатор, запрещающий создание экземпляров класса
😁4👍2
Используйте фильтр аутентификации, чтобы проверить сессию перед доступом к сервлетам.
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebFilter("/*")
public class AuthenticationFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
HttpSession session = httpRequest.getSession(false);
if (session == null || session.getAttribute("user") == null) {
httpResponse.sendRedirect(httpRequest.getContextPath() + "/login.jsp");
} else {
chain.doFilter(request, response);
}
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {}
@Override
public void destroy() {}
}
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
Anonymous Quiz
30%
RuntimeException
12%
IOException
56%
StackOverflowError
2%
SQLException
😁21👍2
Чтобы обеспечить Transport Layer Security (TLS) для вашего веб-приложения, вам нужно настроить HTTPS, что включает использование SSL/TLS сертификатов. Вот шаги для настройки TLS:
Можно получить сертификат от сертификационного центра (CA) или использовать бесплатный сертификат от Let's Encrypt.
Настройка зависит от используемого веб-сервера (Apache, Nginx, Tomcat и т.д.).
sudo mkdir /etc/nginx/ssl
sudo cp /path/to/your_domain_name.crt /etc/nginx/ssl/
sudo cp /path/to/your_private.key /etc/nginx/ssl/
server {
listen 80;
server_name your_domain_name;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name your_domain_name;
ssl_certificate /etc/nginx/ssl/your_domain_name.crt;
ssl_certificate_key /etc/nginx/ssl/your_private.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
location / {
root /var/www/html;
index index.html index.htm;
}
}sudo systemctl restart nginx
keytool -import -alias tomcat -file your_domain_name.crt -keystore /path/to/your_keystore.jks
server.xml: Добавьте следующий блок в файл server.xml (например, в /usr/local/tomcat/conf/server.xml):<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="/path/to/your_keystore.jks"
type="RSA" />
</SSLHostConfig>
</Connector>
sudo systemctl restart tomcat
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤1
Anonymous Quiz
92%
Контейнер для классов и интерфейсов
2%
Контейнер для методов и полей
6%
Контейнер для объектов и экземпляров
0%
Контейнер для констант и переменных
👍2😁1
pom.xml:<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DatabaseServlet extends HttpServlet {
private static final String DB_URL = "jdbc:mysql://localhost:3306/mydatabase";
private static final String USER = "root";
private static final String PASS = "password";
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try (Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT id, name FROM Users")) {
while (rs.next()) {
response.getWriter().println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name"));
}
} catch (Exception e) {
e.printStackTrace(response.getWriter());
}
}
}
pom.xml:<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.14.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.14.1</version>
</dependency>
log4j2.xml:<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %c{1} - %msg%n"/>
</Console>
<File name="File" fileName="logs/app.log">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %c{1} - %msg%n"/>
</File>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="Console"/>
<AppenderRef ref="File"/>
</Root>
</Loggers>
</Configuration>
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class LoggingServlet extends HttpServlet {
private static final Logger logger = LogManager.getLogger(LoggingServlet.class);
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
logger.info("Processing GET request");
response.getWriter().println("Check the logs for output");
}
}
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Anonymous Quiz
19%
InputStream
8%
OutputStream
49%
Reader
24%
ByteStream
👍5🤯5
Упрощенная настройка сервлетов, фильтров и слушателей без
web.xml. Примеры: @WebServlet, @WebFilter, @WebListener.Позволяет сервлетам обрабатывать запросы асинхронно. Пример:
request.startAsync().Программное добавление сервлетов, фильтров и слушателей. Пример:
ServletContext.addServlet().Встроенная поддержка для загрузки файлов через сервлеты. Пример:
@MultipartConfig.Объявление ролей и разрешений в аннотациях. Пример:
@DeclareRoles, @RolesAllowed.Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3👀1
Anonymous Quiz
2%
Appendable
8%
Readable
68%
CharSequence
22%
StringBuilder
😁8👍1
Отправка имени пользователя и пароля в Base64. Конфигурация в
web.xml:<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Protected Area</realm-name>
</login-config>
Хеширование учетных данных для безопасности. Конфигурация в
web.xml:<login-config>
<auth-method>DIGEST</auth-method>
<realm-name>Protected Area</realm-name>
</login-config>
Использование HTML-форм для ввода учетных данных. Конфигурация в
web.xml:<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/error.jsp</form-error-page>
</form-login-config>
</login-config>
Использование клиентских SSL-сертификатов. Конфигурация в
web.xml:<login-config>
<auth-method>CLIENT-CERT</auth-method>
</login-config>
Реализация собственной логики через сервлеты и фильтры. Пример фильтра:
public class AuthenticationFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpSession session = httpRequest.getSession(false);
if (session != null && session.getAttribute("user") != null) {
chain.doFilter(request, response);
} else {
httpRequest.getRequestDispatcher("/login.jsp").forward(request, response);
}
}
}Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🤯2❤1
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
❤16👍9👀2🤔1
Java Server Pages (JSP) — это технология для создания динамических веб-страниц с использованием Java. JSP позволяет смешивать HTML с Java-кодом для генерации динамического контента на сервере.
Вставка Java-кода в HTML-страницы.
Скриплеты: <% ... %>
Выражения: <%= ... %>
Директивы: <%@ ... %>
Декларации: <%! ... %>
Поддержка использования JavaBeans для разделения логики и представления.
Расширение функциональности через собственные теги.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🎉1👾1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31🔥2
JSP (JavaServer Pages) используется для создания динамических веб-страниц с помощью Java. Он позволяет внедрять Java-код прямо в HTML, упрощая генерацию контента на стороне сервера, например, для обработки форм, взаимодействия с базами данных и динамического отображения информации. JSP удобно использовать в проектах на Java для интеграции логики приложения с пользовательским интерфейсом.
JSP позволяет генерировать HTML-код динамически на основе данных и логики, определенной на сервере. Это означает, что содержание веб-страницы может изменяться в зависимости от запросов пользователя, данных из базы данных или других факторов.
JSP тесно интегрирован с Java, что позволяет использовать все возможности Java в веб-приложениях. Разработчики могут использовать существующие Java-классы и библиотеки, что ускоряет разработку и уменьшает количество кода.
С помощью JSP можно отделить бизнес-логику от презентационного слоя. Логика может быть реализована в сервлетах или JavaBeans, а JSP используется для отображения данных. Это упрощает поддержку и развитие приложения.
JSP хорошо интегрируется с Model-View-Controller (MVC) архитектурой. JSP используется для представления (View), сервлеты или контроллеры обрабатывают запросы (Controller), а бизнес-логика и данные находятся в моделях (Model).
Разработчики, знакомые с HTML, могут легко начать использовать JSP, добавляя динамическое содержимое с помощью Java. Это снижает порог входа для создания динамических веб-страниц.
JSP поддерживает стандартные теги JSP (например, скриплеты, выражения) и позволяет создавать собственные теги. Это помогает повторно использовать код и упрощает создание сложных страниц.
Простой JSP файл
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head>
<title>Example JSP</title>
</head>
<body>
<h1>Welcome to JSP</h1>
<p>The current date and time is: <%= new java.util.Date() %></p>
</body>
</html>
Использование JavaBeans в JSP
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="com.example.User" %>
<html>
<head>
<title>Example JSP with JavaBean</title>
</head>
<body>
<jsp:useBean id="user" class="com.example.User" scope="session"/>
<jsp:setProperty name="user" property="name" value="John Doe"/>
<h1>Welcome, <jsp:getProperty name="user" property="name"/>!</h1>
</body>
</html>
JSP страницы компилируются в сервлеты и могут быть кэшированы сервером, что улучшает производительность по сравнению с традиционными CGI-скриптами.
JSP позволяет использовать кастомные теги и таглайбы, что делает код более чистым и повторно используемым.
JSP интегрируется с различными библиотеками и фреймворками, такими как JSTL (JSP Standard Tag Library), что делает разработку более мощной и удобной.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24🔥2❤1
Пользователь отправляет HTTP-запрос к серверу, запрашивая JSP страницу.
Веб-сервер перенаправляет запрос к контейнеру сервлетов (например, Tomcat).
Контейнер проверяет, была ли JSP страница изменена. Если изменена или запрашивается впервые, JSP компилируется в сервлет (Java-код).
Скомпилированный сервлет загружается и инициализируется.
Метод
service() сервлета обрабатывает HTTP-запрос. Java-код в JSP выполняется, генерируя HTML.Сгенерированный HTML отправляется обратно клиенту (браузеру).
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6