Данные обмениваются на разных вкладках - PullRequest
0 голосов
/ 17 мая 2019

Я занимаюсь разработкой веб-приложения 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

Но он не имеет никакого отношения к введенному слову, так как никогда не выдает эту ошибку только при доступеиз одной вкладки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...