Сегодня я расскажу вам про Session в Java, и ознакомлю вас с тем, как работает управление сессиями.
Интервал времени, в течение которого две системы (т.е. клиент и сервер) обмениваются данными друг с другом, можно назвать сеансом. Проще говоря, сеанс — это состояние, состоящее из нескольких запросов и ответов между клиентом и сервером.
Это известный факт, что HTTP и веб-серверы не имеют состояния. Следовательно, единственный способ поддерживать состояние пользователя — использовать технологии, которые реализуют отслеживание сеанса. Отслеживание сеансов в сервлетах может быть реализовано несколькими способами, одним из которых являются файлы cookie. Однако у них есть несколько недостатков:
- Только текстовая информация может быть сохранена ими.
- Если файлы cookie отключены пользователем, веб-приложение не сможет их использовать.
- Один файл cookie может содержать не более 4 КБ данных.
- Другой способ реализовать отслеживание сеансов — создание сеансов с уникальными идентификаторами сеансов для каждого пользователя в сервлете Java.
Http Session Interface
Сервлеты в Java предоставляют интерфейс, известный как «HttpSessionInterface». Они состоят из различных методов, некоторые из которых обсуждаются ниже:
- public HttpSession getSession (логическое создание): этот метод получает сеанс, связанный с запросом. Если он недоступен или отсутствует, создается новый сеанс, основанный на указанном логическом аргументе.
- public String getId(): уникальный метод сеанса возвращается этим методом.
- public long getCreationTime(): время, когда был создан сеанс, возвращается этим методом. Измеряется в миллисекундах.
- public long getLastAccessedTime(): время, когда сеанс последний раз был доступен, возвращается этим методом. Измеряется в миллисекундах.
- public void invalidate(): сессия может быть признана недействительной с помощью этого метода.
Пример: в приведенном ниже примере мы использовали методы getAttribute() и setAttribute() интерфейса HttpSession.
index.html
<form action="loginform"> User Name:<input type="text" name="userName"/> Password:<input type="password" name="userPassword"/> <input type="submit" value="submit"/> </form>
Переходя ко второму примеру
Servlet1.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Servlet1 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response){
try{
response.setContentType("text/html");
PrintWriter pwriter = response.getWriter();
String name = request.getParameter("userName");
String password = request.getParameter("userPassword");
pwriter.print("Welcome "+name);
pwriter.print("Here is your password: "+password);
HttpSession session=request.getSession();
session.setAttribute("usname",name);
session.setAttribute("uspass",password);
pwriter.print("<a href='Welcome'>view details</a>");
pwriter.close();
}catch(Exception exp){
System.out.println(exp);
}
}
Переходя к третьему примеру
Servlet2.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Servlet2 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response){
try{
response.setContentType("text/html");
PrintWriter pwriter = response.getWriter();
HttpSession session=request.getSession(false);
String myName=(String)session.getAttribute("usname");
String myPass=(String)session.getAttribute("uspass");
pwriter.print("Name: "+myName+" Pass: "+myPass);
pwriter.close();
}catch(Exception exp){
System.out.println(exp);
}
}
}
четвертый пример
web.xml
<web-app> <servlet> <servlet-name>MyServlet1</servlet-name> <servlet-class>Servlet1</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyServlet1</servlet-name> <url-pattern>/loginform</url-pattern> </servlet-mapping> <servlet> <servlet-name>MyServlet2</servlet-name> <servlet-class>Servlet2</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyServlet2</servlet-name> <url-pattern>/Welcome</url-pattern> </servlet-mapping> </web-app>
У этого интерфейса есть различные преимущества и недостатки, перечисленные ниже:
Преимущества:
- Все виды объектов, такие как база данных и текст, могут быть сохранены в сеансе.
- Сессии безопасны.
Недостатки:
- Поскольку объект сеанса хранится на сервере, производительность снижается.
- Сериализация и десериализация также приводят к накладным расходам.
Весьма выгодно использовать HttpSessionInterface для отслеживания сеанса.
