我有一个java servlet,它从域A中的一个网页获取表单请求,它将处理表单,并以另一种形式将结果作为请求发送到域B中的另一个网页。如何在Java servlet中以编程方式提交表单?
I想知道如何在Java servlet中以编程方式提交表单?我试图使用
javax.servlet.RequestDispatcher.forward(request, response)
但它不起作用,因为它只能转发到同一个域中的资源。
我有一个java servlet,它从域A中的一个网页获取表单请求,它将处理表单,并以另一种形式将结果作为请求发送到域B中的另一个网页。如何在Java servlet中以编程方式提交表单?
I想知道如何在Java servlet中以编程方式提交表单?我试图使用
javax.servlet.RequestDispatcher.forward(request, response)
但它不起作用,因为它只能转发到同一个域中的资源。
从tutorial代码尝试看起来像:
HttpClient client = new HttpClient();
GetMethod method = new PostMethod(url);
int statusCode = client.executeMethod(method);
... etc
有选项吨的自定义它。
尝试一个JavaScript自动提交通过的Servlet域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解决方案。
含义Servlet域A将返回JS,该JS在其onLoad中有一个自动提交,它会将它提交给域B Isiu?唯一的问题是客户端(浏览器)会显示什么? – 2009-11-07 00:04:05
可以通过表单的CSS设置可见性来隐藏表单。 – lsiu 2009-11-07 00:10:07
您需要对新域进行自动发布。只需将请求转发给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”包含了重定向URL,需要发布到其他域的域值。
谢谢。这种方法应该可以在PC上的浏览器上工作,但问题是我的客户端是手机,并且其浏览器不允许自动提交表单,除非用户明确点击按钮或链接来触发提交。 – Sapience 2009-11-09 14:52:02
大问题在这里:你是否想把请求交给其他站点而不用担心进一步的响应?或者您是否仍想完全控制响应,以便您可以像在自己的域中完成一样呈现?这在你的主题开始时没有明确说明。
如果第一个,然后使用上述Javascript自动提交上载的方法。如果第二个,然后使用上述HttpClient
建议(或者如果你知道HTTP足够好,你也可以使用java.net.URLConnection
)。
是一个好主意,但它取决于原始海报的要求。使用Apache HttpClient使服务器为客户端提供服务。因此,请求Servlet页面的实际客户端没有登录。 – lsiu 2009-11-06 23:52:54
非常感谢。将转发到域B上的另一个页面吗?我目前不知道如何转发将在域A中的servlet中工作。 – Sapience 2009-11-06 23:53:29
@Isui;哦,我明白了,这是有道理的。 @Sapience:不,它不会。您可以尝试提交表单,然后在回复中写下旧学校重定向(HTTP-EQUIV = Refresh等等)。但正如Isiu指出的那样,您的最终客户端将无法被第二台服务器识别。该服务器应该允许您以编程方式启动远程会话。 – OscarRyz 2009-11-06 23:58:32