如何在Java servlet中以编程方式提交表单?

时间:2009-11-06 23:48:11

标签: java forms servlets

我有一个java servlet,它从域A中的一个网页获取表单请求,它将处理表单,并将结果作为请求发送到域B中的另一个网页。

我想知道如何在Java servlet中以编程方式提交表单?我试着用

javax.servlet.RequestDispatcher.forward(request, response)

但它不起作用,因为它只能转发到同一域中的资源。

4 个答案:

答案 0 :(得分:2)

尝试使用Apache HttpClient作为

tutorial代码看起来像:

HttpClient client = new HttpClient();
GetMethod method = new PostMethod(url);
int statusCode = client.executeMethod(method);
... etc 

有很多选项可以自定义它。

答案 1 :(得分:1)

尝试在域A上由Servlet返回的javascript自动提交表单。

域A上的Servlet:

public void doPost(HttpServletRequest req, HttpServletResponse resp) {
  PrintWriter p = resp.getPrintWriter();
  p.print("<form id='f' action=[URL on domain B to login]><input type='secret' name='username' value='" + username+ "'/><input type='secret' name='password' value='" + password + "'/></form>");
  p.print("<script type='text/javascript'>document.getElementById('f').submit()");
}

这不是最优雅的解决方案,但如果您正在寻找更有实力的东西,请尝试使用OpenSSO或CAS等SSO解决方案。

答案 2 :(得分:1)

您需要对新域进行自动发布。只需将请求转发给这样的JSP,

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<body onload="document.forms[0].submit()">
<noscript>
<p>
<strong>Note:</strong> Since your browser does not support JavaScript,
you must press the Continue button once to proceed.
</p>
</noscript>

<jsp:useBean id="myBean" scope="request" class="example.myBean" />

<form action="<jsp:getProperty name="myBean" property="url"/>" method="post">
<div>
<input type="hidden" name="field1" value="<jsp:getProperty name="myBean" property="field1"/>"/>
...
</div>
<noscript>
<div>
<input type="submit" value="Continue"/>
</div>
</noscript>
</form>
</body>
</html>

“myBean”包含重定向网址,字段值需要发布到其他域。

答案 3 :(得分:0)

这里有一个很大的问题:您是否希望将请求移交给其他网站,而不是进一步担心响应?或者您是否仍希望完全控制响应,以便您可以像在自己的域下一样进行呈现?这在你的主题开始时没有说清楚。

如果是第一个,那么使用上述建议的Javascript auto-submit-onload方法。如果是第二个,那么使用上述建议的HttpClient建议(或者如果你对HTTP有足够的了解,你也可以使用java.net.URLConnection)。