数据正在不同的标签之间共享

时间:2019-05-17 09:09:45

标签: servlets java-ee

我正在开发一个基于Web的Java应用程序,用户在该应用程序中输入一些数据,然后servlet在处理后返回一个值。它可以在单个选项卡上正常工作,但可以在同一台笔记本电脑上使用,也可以在两个笔记本电脑和浏览器上使用,如果我打开网站,即在两个选项卡上,则数据也将在第二个选项卡上共享。

为进一步说明,假设我在Chrome Tab A中输入了单词“ hi”,然后在Safari Tab A中输入了单词“ hello”,然后我同时点击了按钮(将其传递给servlet)两个标签上的时间。我在Safari Tab A上可以看到单词“ hi”和“ hello”,即使我在chrome而不是在Safari上输入了单词“ hi”,而Chrome Tab却没有返回结果,就像我发送了空白输入一样。

我正在使用IntelliJ idea的Java EE应用程序模块。到目前为止,我已经尝试了以下我不太理解的答案,但我认为这些问题与我的问题不符。

1)Prevent shared session between tabs or same browser windows

2)The Scope and the life time of Session attribute in Servlet in my web application get me confused when using more than 2 tabs of the same browser

我的index.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>

我的servlet代码:

@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

但是它与输入的单词没有任何关系,因为当仅从单个选项卡访问时,它永远不会出现此错误。

0 个答案:

没有答案