我正在开发一个基于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
我的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
但是它与输入的单词没有任何关系,因为当仅从单个选项卡访问时,它永远不会出现此错误。