Я занимаюсь разработкой веб-приложения Java, в котором пользователь вводит некоторые данные, а затем сервлеты возвращают значение после его обработки.Он отлично работает на одной вкладке, но на одном ноутбуке или на двух разных ноутбуках и в браузерах. Если я открою веб-сайт, т.е. на двух вкладках, то данные будут переданы и на второй вкладке.
Комудалее, скажем, я ввожу слово «привет» в Chrome Tab A, а затем вводю слово «привет» в Safari Tab A, а затем нажимаю кнопку (чтобы передать его сервлету) одновременно на обеих вкладках,Я вижу слово «привет» и «привет» на вкладке Safari A, хотя я ввел это слово «привет» в chrome, а не в Safari, тогда как вкладка Chrome не возвращает результат, как если бы я отправил пустой ввод,
Я использую модуль приложения Java EE идеи IntelliJ.До сих пор я уже пробовал некоторые ответы, которые я совершенно не понимаю, упомянутые ниже, но я думаю, что эти проблемы не соответствуют моим.
1) Запретить общий сеанс между вкладками или одинаковыми окнами браузера
2) Атрибут Область и время жизни сеанса в сервлете в моем веб-приложении приводит меня в замешательство при использовании более 2 вкладок одного браузера
мой индекс.jsp код:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ page import="Analyser.Repetition" %>
<html>
<% //GET & SET DATA FROM SERVLET
pageContext.setAttribute("data", session.getAttribute("raw"));
session.invalidate();
%>
<form action="/Analyse" method="POST" id="sourceInput">
<textarea name="message" id="msg" cols="63" rows="15" required title="Input Text"></textarea>
<br/>
<input type="submit" value="Analyse"/>
<div id="error"></div>
</form>
Мой код сервлета:
@WebServlet(name = "Analyser", urlPatterns = {"/Analyser"})
public class Analyser extends HttpServlet {
HttpSession session;
private String text; // TEXT STRING
private String[] trimmedArray;
private List<WordsList> words;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
words = new ArrayList<>();
session = request.getSession();
text = request.getParameter("message");
if (text.equals("") || text.isEmpty() || text.equals(",") || text.equals("?")) {
response.sendRedirect("index.jsp");
return;
}
session.setAttribute("raw", text);
response.sendRedirect("index.jsp");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
каждый пользовательский ввод должен обрабатываться отдельно, пока он подвергается воздействию второй вкладки на двух разных ноутбуках.
Иногда он просто разделяет значение, а иногда выдает следующую ошибку:
StandardWrapperValve[Analyser]: Servlet.service() for servlet Analyser threw exception
java.lang.NullPointerException
Но он не имеет никакого отношения к введенному слову, так как никогда не выдает эту ошибку только при доступеиз одной вкладки.