2013-01-02 56 views
1

我有一個web應用程序,當前在網頁上託管一個applet。該applet連接到Tomcat Servlet併發送請求。對於某些環境來說,如果我的解決方案可以在客戶端上使用Javascript而不是Java applets,那將會更加方便。但是這需要Javascript將POST發送到Tomcat Servlet。JavaScript可以向Web容器Servlet發送HTTP請求嗎?

網頁由同一個Web服務器提供 - 實際上是同一個Tomcat實例。但是applet發送請求到一個不同的Servlet。

JavaScript基本上需要定期查詢Servlet並根據響應調用JavaScript函數。

會這樣嗎?

如果是這樣,任何關於如何入門的指針?

+0

聽起來像它會看起來像跨站腳本給我。 – duffymo

+0

我不確定你爲什麼強調「不同的servlet」。這裏沒有火箭科學。通常使用ajax應該這樣做。難道你不是真的意味着servlet實際上運行在不同的域上嗎?例如。 JavaScript在foo.com上運行,servlet在bar.com上運行?在這種情況下,跨站點腳本的答案確實適用。否則,只適用標準的ajax手段。 – BalusC

回答

1

是的,JavaScript可以發送POST請求到任意的Web服務器。如果您擁有對servlet的控制權,您可以通過設置access-control-allow-origin屬性來避免所有跨站點腳本限制。

AJAX是Web社區中的一個術語,指的是JavaScript + HTTP請求。我向MDN推薦這個AJAX tutorial。我也推薦jQuery's AJAX library


即使服務器設置正確,某些版本的Internet Explorer也會給您帶來麻煩。這裏有一個JS功能,我使用支付所有的瀏覽器:

/** 
* Wraps jQuery's AJAX, adds X-Domain support for IE 
*/ 
function xDomainAJAX (url, settings) { 
    if ($.browser.msie && parseInt($.browser.version, 10) >= 8 && XDomainRequest) { 
    // use ms xdr 
    var xdr = new XDomainRequest(); 
    xdr.open(settings.type, url + '?' + $.param(settings.data)); 
    xdr.onprogress = function() {}; 
    xdr.onload = function() { 
     settings.success(xdr.responseText); 
    }; 
    xdr.onerror = settings.error; 
    xdr.send(); 
    } else { 
    // use jQuery ajax 
    $.ajax(url, settings); 
    } 
} 
0

支持「CORS」 Cross-origin resource sharing服務器上就會讓你的瀏覽器端腳本來調用其他服務器。

還有一些舊方法,如JSONP或在主頁上的IFrame中的目標域上具有頁面,並通過window.PostMessage/IFrame名稱在2頁之間進行通信。

如果你不需要響應 - POST或GET可以執行到任何域。

0

這絕對有可能。我建議使用jQuery,因爲它具有易於使用的功能:http://api.jquery.com/jQuery.post/。 請注意,此鏈接有使用$ .post()和$ .ajax()的示例。兩者都是有效的,$ .post只是$ .ajax的簡寫版本。

注意在這兩個例子中,你給它一個回調函數來處理響應。