我的jsp Web应用程序从html输入中获取输入,并通过按下按钮将其保存在内存中,所以实际上我将值推送到内存中并保留它直到按下重置为止。 当我转到另一台机器并运行该应用程序时,问题就出现了,我得到了与前一个用户输入的相同的值。
例如:
main.jsp 有一些输入字段,当我单击“添加”时,html 输入中的这些值将存储在内存对象中,并显示在 html 输入中,直到内存未被清除。
现在,我从另一台机器访问此应用程序并转到 jsp 文件,在那里我得到了具有相同值的预填充 html 输入框。
我知道这是由我在 jspInit() 函数内初始化类对象引起的。
我制作了示例项目来向您展示问题。
Test.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ page import="test.TestClass" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%!
TestClass objTest;
public void jspInit()
{
objTest = new TestClass();
}
%>
<form action="Test.jsp">
value1: <input type="text" name="txtValue1" value=" <%out.print(objTest.value1);%>"/>
value2: <input type="text" name="txtValue2" value=" <%out.print(objTest.value2);%>"/>
<input type="submit" name="btnSubmit"/>
</form>
<%
if(request.getParameter("btnSubmit")!=null)
{
String str1 = request.getParameter("txtValue1");
String str2 = request.getParameter("txtValue2");
objTest.add(str1, str2);
}
%>
</body>
</html>
TestClass.java
package test;
public class TestClass {
public String value1 ="no value";
public String value2 ="no value";
public void add(String str1, String str2)
{
value1 = str1;
value2 = str2;
}
}
为什么我每次从不同的机器进入时都没有得到一个新页面。jspInit()函数使对象静态并保留其所有值。
我需要这个 jspInit() 函数,因为我想保留该特定用户的值,这样当他刷新页面时,表单值就不会消失。
我怎样才能使 jspInit() 只保留特定浏览器的值 要求。还有我可以使用的其他方法。
此外,实际应用程序非常大,因此如果可能,请为此方法提出一些解决方法。
P.S:jsp新手。
P.S:我知道使用 scriptlet 不是一个好方法。
提前致谢。
最佳答案
jspInit 方法对于 Servlet 类的所有线程都是通用的。它的用途基本上是获取公共(public)资源的数据库连接和读写器对象。您的要求是针对服务器的每个单独的客户端(即不同的机器),为此您必须使用 session 对象来存储参数或使用 Java Bean 对象。
您可以引用this为了良好的知识。
关于java - jspInit 将所有浏览器请求的对象保留在内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29484744/