【问题标题】:Can JavaScript send an HTTP request to web container Servlet?JavaScript 可以向 Web 容器 Servlet 发送 HTTP 请求吗?
【发布时间】:2012-12-17 03:57:17
【问题描述】:

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

网页由同一个 Web 服务器提供服务 - 实际上是同一个 Tomcat 实例。但是小程序将请求发送到不同的 Servlet。

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

这可能吗?

如果是这样,有什么关于如何开始的指示吗?

【问题讨论】:

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

标签: javascript http servlets


【解决方案1】:

是的,JavaScript 可以向任意 Web 服务器发送 POST 请求。如果您可以控制 servlet,则可以通过设置 access-control-allow-origin 属性来避免所有跨站点脚本限制。

AJAX 是网络社区中的一个术语,指的是 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);
  }
}

【讨论】:

    【解决方案2】:

    在服务器上支持“CORS”Cross-origin resource sharing 将让您的浏览器端脚本调用其他服务器。

    还有一些较旧的方法,如 JSONP 或在主页的 IFrame 中在目标域上设置页面,通过 window.PostMessage / IFrame 名称在 2 个页面之间进行通信。

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2018-10-24
        • 1970-01-01
        • 1970-01-01
        • 2015-03-21
        • 2012-01-13
        • 1970-01-01
        • 1970-01-01
        • 2013-10-29
        • 1970-01-01
        相关资源
        最近更新 更多