如何记住以前保存的表单数据以用于后续请求

我在servlet(page1)中有下面的代码,我想按下Save转到第二个servlet(page2),读取以page1forms写的内容并将它们附加到这样的无线电组中:

Question [i]: question (i increases every time a question is added in page2) radiobutton1 (radio1) radiobutton2 (radio2) radiobutton3 (radio3) 

关键是每次填写下面的表格时,数据都应添加到先前保存的数据之下。

你能为servlet page2建议一些示例代码吗?

非常感谢。

 out.println("
"); out.println("
"); out.println("
"); out.println("
"); out.println("
"); out.println("");

您可以使用或会话范围来记住以前保存的数据。 例如

  

要么

 request.getSession().setAttribute("question1answer", 42); 

传递的数据是随后的可用请求

 String question1answer = request.getParameter("question1answer"); 

要么

 Integer question1answer = (Integer) request.getSession().getAttribute("question1answer"); 

隐藏输入的缺点是它产生了很多样板代码,并且最终用户可以很容易地猜测/操纵它。 会话范围的缺点是它在同一会话中的所有请求之间共享(因此当最终用户在多个浏览器窗口/选项卡中打开相同页面时可能会发生干扰)。 为了最好地结合这两个世界,您可以在第一次请求时生成一个长且唯一的密钥,您将其用作密钥以将所有关联数据存储在会话范围中,并将该密钥作为隐藏请求参数传递。

例如在第一次请求中

 String key = UUID.randomUUID().toString(); request.setAttribute("key", key); List answers = new ArrayList(); request.getSession().setAttribute(key, answers); // ... answer.add(question1answer); 

并以HTML格式

  

以及随后的所有要求

 String key = request.getParameter("key"); request.setAttribute("key", key); List answers = (List) request.getSession().getAttribute(key); // ... answers.add(question2answer); // question3answer, question4answer, etc.