JavaScript可以向web容器Servlet发送HTTP请求吗?

JavaScript可以向web容器Servlet发送HTTP请求吗?,javascript,http,servlets,Javascript,Http,Servlets,我有一个web应用程序,当前在网页中托管一个小程序。小程序连接到Tomcat Servlet并发送请求。如果我的解决方案可以在客户端使用Javascript而不是Java小程序,那么对于某些环境来说会更方便。但这需要Javascript向TomcatServlet发送POST 这些网页由同一个web服务器提供服务——实际上是同一个Tomcat实例。但是小程序向另一个Servlet发送请求 Javascript基本上需要定期查询Servlet,并根据响应调用Javascript函数 那可能吗 如果

我有一个web应用程序,当前在网页中托管一个小程序。小程序连接到Tomcat Servlet并发送请求。如果我的解决方案可以在客户端使用Javascript而不是Java小程序,那么对于某些环境来说会更方便。但这需要Javascript向TomcatServlet发送POST

这些网页由同一个web服务器提供服务——实际上是同一个Tomcat实例。但是小程序向另一个Servlet发送请求

Javascript基本上需要定期查询Servlet,并根据响应调用Javascript函数

那可能吗


如果是这样,有关于如何开始的任何指针吗?

是的,JavaScript可以向任意web服务器发送POST请求。如果您可以控制servlet,则可以通过设置
访问控制允许源属性来避免所有跨站点脚本限制

AJAX是web社区中的一个术语,指JavaScript+HTTP请求。我向MDN推荐这个。我也推荐


即使服务器设置正确,某些版本的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);
  }
}

是的,JavaScript可以向任意web服务器发送POST请求。如果您可以控制servlet,则可以通过设置
访问控制允许源属性来避免所有跨站点脚本限制

AJAX是web社区中的一个术语,指JavaScript+HTTP请求。我向MDN推荐这个。我也推荐


即使服务器设置正确,某些版本的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);
  }
}
在服务器上支持“CORS”将允许您通过浏览器端脚本调用其他服务器

还有一些较旧的方法,如JSONP或在主页上的IFrame中的目标域上创建页面,并通过window.PostMessage/IFrame name在两个页面之间进行通信

如果您不需要响应,POST或GET可以执行到任何域。

在服务器上支持“CORS”,将允许您通过浏览器端脚本调用其他服务器

还有一些较旧的方法,如JSONP或在主页上的IFrame中的目标域上创建页面,并通过window.PostMessage/IFrame name在两个页面之间进行通信


如果您不需要响应,POST或GET可以对任何域执行。

这绝对是可能的。我建议使用jQuery,因为它在一个易于使用的函数中具有以下功能:。 请注意,此链接有使用$.post()和$.ajax()的示例。两者都是有效的,$.post只是$.ajax的简写版本


注意,在这两个示例中,您都为它提供了一个回调函数来处理响应。

这绝对是可能的。我建议使用jQuery,因为它在一个易于使用的函数中具有以下功能:。 请注意,此链接有使用$.post()和$.ajax()的示例。两者都是有效的,$.post只是$.ajax的简写版本


请注意,在这两个示例中,您都为它提供了一个回调函数来处理响应。

听起来像是跨站点脚本编写。我不确定您为什么强调“不同的servlet”。这里没有火箭科学。只需使用ajax就可以了。你不是说servlet实际上运行在不同的域上吗?例如,JavaScript在foo.com上运行,servlet在bar.com上运行?在这种情况下,跨站点脚本的答案确实适用。否则,只适用于标准的ajax方法。对我来说,听起来像是跨站点脚本。我不确定你为什么强调“不同的servlet”。这里没有火箭科学。只需使用ajax就可以了。你不是说servlet实际上运行在不同的域上吗?例如,JavaScript在foo.com上运行,servlet在bar.com上运行?在这种情况下,跨站点脚本的答案确实适用。否则,只适用标准的ajax方法。