我有一個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