jspInit将对象保留在内存中以用于所有浏览器请求

时间:2015-04-07 05:56:02

标签: java jsp

我的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不是一个好方法。

提前致谢。

2 个答案:

答案 0 :(得分:1)

jspInit方法对于servlet类的所有线程都是通用的。它的用途主要是为公共资源获取数据库连接和读写器对象。您的要求是服务器的每个客户端(即不同的计算机),为此必须使用会话对象来存储参数或使用Java Bean对象。

您可以参考this以获取良好的知识。

答案 1 :(得分:0)

可能是您希望使用session对象来存储与每个会话相关的值。

您可以添加以下会话属性:session.setAttribute("IDxxx",1),您可以从会话中检索对象int id= Integer.parseInt(session.getAttribute("IDxxx").toString())

有关jsp隐式对象的更多信息,请参阅herehere以及here