我有一个网络表单(JSP),它将数据提交到托管在不同服务器上的不同应用程序。提交表单数据后,该应用程序重定向回同一 JSP 页面。现在,我想保存输入的数据。以网络形式保留提交的数据有哪些不同的方法。我不喜欢将数据存储在数据库或任何文件中。
PS:当请求再次重定向到同一JSP页面时,我想保留提交的表单数据。因此,用户无需重新输入数据。例如,数据可以存储在 Session 或 Request 等中。
您能做的最好的事情就是提交到您自己的 servlet,这反过来会在后台向外部 Web 应用程序发出另一个请求,而无需任何帮助java.net.URLConnection
。最后只需在同一请求中回发到结果页面,以便您可以通过以下方式访问请求参数EL http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JSPIntro7.html。有一个隐式 EL 变量${param}
这使您可以访问请求参数,例如Map
其中参数名称是关键。
所以用下面的形式
<form action="myservlet" method="post">
<input type="text" name="foo">
<input type="text" name="bar">
<input type="submit">
</form>
大致如下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
如下
<p>Foo: <c:out value="${param.foo}" /></p>
<p>Bar: <c:out value="${param.bar}" /></p>
就那么简单。不需要jsp:useBean
和/或讨厌的脚本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)