我有一个Web表单(JSP),它将数据提交到不同的应用程序,托管在不同的服务器上.提交表单数据后,该应用程序重定向回相同的JSP页面.现在,我想保存输入的数据.保留Web表单中提交的数据的不同方法有哪些.我不想将数据存储在数据库或任何文件中.
PS:我想在请求再次重定向到同一个JSP页面时保留提交的表单数据.因此,用户无需重新输入数据.比如,数据可以存储在Session或Request等中.
最好的办法就是提交给你自己的servlet,这个servlet反过来在后台激发对外部web应用程序的另一个请求java.net.URLConnection.最后,只需回到同一请求中的结果页面,这样您就可以通过EL访问请求参数.有一个隐式的EL变量${param},它允许您访问请求参数,例如Map其中参数名称是键.
所以用下面的表格
<form action="myservlet" method="post">
<input type="text" name="foo">
<input type="text" name="bar">
<input type="submit">
</form>
Run Code Online (Sandbox Code Playgroud)
以及大致以下的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);
}
Run Code Online (Sandbox Code Playgroud)
您应该能够result.jsp按如下方式访问输入
<p>Foo: <c:out value="${param.foo}" /></p>
<p>Bar: <c:out value="${param.bar}" /></p>
Run Code Online (Sandbox Code Playgroud)
就那么简单.不需要jsp:useBean和/或讨厌的小脚本.
在 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; }
}
Run Code Online (Sandbox Code Playgroud)
在表单 jsp 中,您将使用 useBean 标记,并且表单字段值将从 bean 获取其值:
<jsp:useBean id="formBean" class="com.mycompany.FormBean" scope="session"/>
...
...
<input type="text" name="var1" value="<%=formBean.getVar1()%>" />
Run Code Online (Sandbox Code Playgroud)
在您的 jsp 中,表单数据被发布到(然后重定向回来),您将有以下代码将发布的表单数据推送到 bean 中。
<jsp:useBean id="formBean" class="com.mycompany.FormBean" scope="session"/>
<jsp:setProperty name="formBean" property="*"/>
Run Code Online (Sandbox Code Playgroud)
另一种选择是将表单数据填充到保存页面的会话中:
String var1 = request.getParameter("var1");
String var2 = request.getParameter("var2");
session.setAttribute("var1", val1);
session.setAttribute("var2", val2);
...
Run Code Online (Sandbox Code Playgroud)
并在您的表单中引用它(省略空检查):
<input type="text" name="var1" value="<%= session.getAttribute("var1") %>" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32811 次 |
| 最近记录: |