Я застрял с заданием в моем курсе веб-инжиниринга.Мы изучаем сервлеты и используем Gradle.
Одна часть задания заключалась в создании формы для входа.Когда вы входите в систему с именем пользователя, он должен создать сеанс.Пока все хорошо.
Следующая часть задания заключалась в подсчете пользователей, вошедших в систему потокобезопасным способом.Поэтому я создал класс Counter, который реализует интерфейс HttpSessionListener и увеличивает количество активных сеансов при создании сеанса.
То, что я ожидаю, произойдет, когда я войду в систему с user1, он должен сказать activeSessions = 1 и когдаЯ захожу с user2, он должен сказать activeSessions = 2. Это не так.
Так что я думаю, что моя концепция сеансов неверна.
Как узнать количество пользователей, которые вошли в системуin?
Редактировать: В назначении написано: Создать класс Counter, который реализует интерфейс HttpSessionListener, который должен подсчитывать количество зарегистрированных пользователей / пользователей с активным сеансом.
Login.java
import java.io.IOException;
import java.util.concurrent.atomic.AtomicInteger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class Navigation
*/
@WebServlet(urlPatterns ={ "/Login" })
public class Login extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Login() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
int length = username.length();
int sessions;
if(length >= 3) {
response.getWriter().append("Willkommen: " + username);
HttpSession session = request.getSession();
session.setAttribute("username", username);
sessions = Counter.getActiveSessions();
response.getWriter().append("\n \n");
response.getWriter().append("Session String: " + session.toString());
response.getWriter().append("\n \n");
response.getWriter().append("Session Attribut: " + session.getAttributeNames());
response.getWriter().append("\n \n");
response.getWriter().append("Username Zeichenanzahl: " + username.length());
response.getWriter().append("\n \n");
response.getWriter().append("Sessionanzahl: " + sessions);
//RequestDispatcher rd = request.getRequestDispatcher("protected/index.html");
//rd.forward(request, response);
} else {
response.sendError(401, "Zu kurzer Username, du Otto!");
}
}
}
Counter.java
import java.util.concurrent.atomic.AtomicInteger;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import java.util.concurrent.atomic.AtomicInteger;
public class Counter implements HttpSessionListener {
private static final AtomicInteger activeSessions = new AtomicInteger(0);
@Override
public void sessionCreated(HttpSessionEvent se) {
activeSessions.incrementAndGet();
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
activeSessions.decrementAndGet();
}
public static int getActiveSessions() {
return activeSessions.get();
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
<display-name>"HelloServlet"</display-name>
<listener>
<listener-class>Counter</listener-class>
</listener>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>