我的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不是一个好方法。
提前致谢。
答案 0 :(得分:1)
jspInit方法对于servlet类的所有线程都是通用的。它的用途主要是为公共资源获取数据库连接和读写器对象。您的要求是服务器的每个客户端(即不同的计算机),为此必须使用会话对象来存储参数或使用Java Bean对象。
您可以参考this以获取良好的知识。
答案 1 :(得分:0)