保留提交的JSP表单数据

我有一个Web表单(JSP),它将数据提交到托管在不同服务器上的不同应用程序。 提交表单数据后,该应用程序重定向回相同的JSP页面。 现在,我想保存输入的数据。 保留Web表单中提交的数据的不同方法有哪些。 我不想将数据存储在数据库或任何文件中。

PS:我想在请求再次重定向到同一个JSP页面时保留提交的表单数据。 因此,用户无需重新输入数据。 比如,数据可以存储在Session或Request等中。

最好的办法就是提交给你自己的servlet,然后在java.net.URLConnection帮助下,在后台激活对外部web应用程序的另一个请求。 最后,只需回到同一请求中的结果页面,这样您就可以通过EL访问请求参数。 有一个隐含的EL变量${param} ,它允许您访问请求参数,如Map其中参数名称是键。

所以使用以下表格

 

以及大致以下的servlet方法

 protected void doPost(HttpServletRequest request, HttpServletResponse response) { String foo = request.getParameter("foo"); String bar = request.getParameter("bar"); String url = "http://external.com/someapp"; String charset = "UTF-8"; String query = String.format("foo=%s&bar=%s", URLEncoder.encode(foo, charset), URLEncoder.encode(bar, charset)); URLConnection connection = new URL(url).openConnection(); connection.setUseCaches(false); connection.setDoOutput(true); // Triggers POST. connection.setRequestProperty("accept-charset", charset); connection.setRequestProperty("content-type", "application/x-www-form-urlencoded;charset=" + charset); try (OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream(), charset)) { writer.write(query); } InputStream result = connection.getInputStream(); // Do something with result here? Check if it returned OK response? // Now forward to the JSP. request.getRequestDispatcher("result.jsp").forward(request, response); } 

您应该能够访问result.jsp的输入,如下所示

 

Foo:

Bar:

就那么简单。 不需要jsp:useBean和/或讨厌的scriptlet。

在JSP中,通常使用javabean来存储表单值,然后使用jsp:useBean标记来处理这种事情。 例如,您将创建以下javabean:

 package com.mycompany; public class FormBean { private String var1; private String var2; public void setVar1(String var) { this.var1 = var; } public String getVar1() { return this.var1; } public void setVar2(String var) { this.var2 = var; } public String getVar2() { return this.var2; } } 

在您的表单jsp中,您将使用useBean标记,并且您的表单字段值将从bean获取它们的值:

  ... ...  

在你的jsp中,表单数据被发布到(然后重定向回来)你有以下代码将发布的表单数据推送到bean中。

   

另一种选择是将表单数据填充到保存页面中的会话中:

 String var1 = request.getParameter("var1"); String var2 = request.getParameter("var2"); session.setAttribute("var1", val1); session.setAttribute("var2", val2); ... 

并在您的表单中引用它(null省略检查):

 " /> 

如果我正确理解了问题(大“如果”那里),你有一个FORM,它有一个POST方法和一个直接指向远程服务器的ACTION。 当用户单击“提交”时,浏览器不涉及该事务中的主机,数据将转到“ACTION”收件人。 这将使您的选项仅限于实现与远程服务的回调关系(可能超出您的控制),设置本地代理Servlet来拦截数据并将POST转发给它的预期收件人(这将使POST来自服务器而不是客户端(这可能会导致问题)),或利用一些AJAX设计模式将表单数据发送到两个地方而不是FORM标签所指示的地方。

除此之外,您还需要具有某种forms的本地持久性,如数据库或文件。

我有帮助吗?