【问题标题】:Call a Java method from Javascript从 Javascript 调用 Java 方法
【发布时间】:2010-08-30 08:21:56
【问题描述】:

每次单击 HTML 按钮时都需要调用 Java 方法。基本上,当我单击按钮时,我需要将一些文本发送到 Java 类。我已经尝试过小程序来实现这种行为,但没有成功。

谢谢

更新 解决方案:Java Web 服务

【问题讨论】:

  • 小程序有什么特别不工作的地方?你在做什么处理?可以在服务器端完成吗?

标签: javascript java web-services


【解决方案1】:

您的问题涉及多种技术。我将尝试逐步为您提供一些指导。

当你编写一个Java 类时,它被部署在服务器端。当你编写一个 JavaScript 函数时,它被部署在客户端

服务器端 Java 类可以作为 Web 应用程序部署在应用程序服务器中(例如Apache tomcat),并通过 URL 公开。这样做的接口是编写所谓的Servlet。 servlet 只不过是部署在同一应用程序服务器上的另一个 Java 类。这个 servlet 类可以调用您的 Java 方法。 (注意:还有其他技术(例如 JSP 或 Java 服务器页面)最终会被重新设计为 servlet。)

关于 servlet 的工作原理有abundant literature,但简而言之,一旦部署到应用服务器中,当从浏览器调用应用程序 URL 时,就可以调用 servlet 内部的代码。

所以,步骤如下:

  1. 为部署在应用服务器上的应用程序从浏览器调用 URL。例如,您调用http://localhost:8080/myapp/doSomething
  2. 您的 Web 应用程序 (myapp) 有一个 部署描述符 (web.xml) 和它自己的 URL 映射。通过引用这个描述符,你的 webapp 意识到对于 URL: "/doSomething" 它应该调用 MyServlet(你的 servlet 部署在服务器上)
  3. 您的 servlet (MyServlet) 现在将实现一些标准的doXXX 方法(用于 GET、POST 等操作)。
  4. 在 doXXX 方法的这个实现中,您可以调用您的 Java 类方法
  5. 一旦您的 servlet 完成执行,它会向 servlet 的输出流写入一个响应,然后应用程序服务器将其通过 http 流回您的浏览器。现在,在您的回复中,您可以选择编写任何您想要的内容 - 当您调用 URL 时,您可以在浏览器上使用这些内容。

说了以上步骤后,您可以从 JavaScript 调用 URL 并使用 AJAX 等技术获得响应。

如果你的函数不返回值,而只是“做某事”,那么你真的不关心响应,但是,使用 AJAX,你也可以检查响应上的状态查看在服务器端执行您的函数时是否发生任何异常

【讨论】:

    【解决方案2】:

    还有更好的办法,

    DWR 是一个 Java 库,它支持 服务器上的 Java 和 JavaScript 中的 浏览器进行交互和调用每个 其他尽可能简单。

    DWR 是 Java 的 Easy Ajax

    demo

    DWR 将生成 JavaScript 以 允许网络浏览器安全地调用 几乎就像是 在本地运行。它可以编组 几乎任何数据,包括 集合、POJO、XML 和二进制 图像和 PDF 文件等数据。全部 需要的是安全策略 这定义了允许的内容。

    使用反向 Ajax,DWR 允许 Java 在服务器上运行以使用客户端的代码 将更新发布到的侧 API 任意组的浏览器。这 允许交互 2 种方式 - 浏览器 调用服务器和服务器调用 浏览器。 DWR 支持 Comet、Polling 和 Piggyback(用 正常请求)作为发布到的方式 浏览器。

    DWR 提供与 Dojo 的集成, TIBCO GI, Scriptaculous in the 浏览器,以及 Spring、Struts、 Guice、Hibernate 等 服务器。

    【讨论】:

    • 这应该让我重回正轨,我认为......看起来真的很简单谢谢=]
    • 不客气,Daniel,如果是这样,您可以随时接受它作为答案。
    【解决方案3】:

    您不能从 Javascript 调用 Java 方法。

    但是,您可以使用 Javascript 向将为您运行 Java 方法的服务器发出 HTTP 请求。

    【讨论】:

    • @josefx - 这就像在说“你可以在太空中呼吸.......除了你需要很多特定且昂贵的装备”。
    【解决方案4】:

    Real Gagnon post,你总是可以从javascript调用小程序主类的公共方法。

    但如今,此类代码已被弃用,取而代之的是对 Java 服务器后端的 REST 调用。

    【讨论】:

      【解决方案5】:

      您知道,您必须为此创建一个 Web 应用程序吗?为此,您需要一个应用程序服务器(例如 Tomcat)。使用 Web 应用程序,您可以 - 粗略地说 - 将服务器上的操作的 URL 放入包含输入框的表单的操作属性中。 Action 将是方法的 Java 类(取决于您使用的框架)。

      查看 Java Servlet 规范或无数 Java Webapp 框架之一。

      【讨论】:

      • 好吧,我是这个 java-javascript 交互的新手,但谢谢我应该研究一下
      【解决方案6】:

      我不知道这个 Java 在哪里运行。是在浏览器上,还是在服务器上?如果服务器不直接调用任何东西,则使用某种异步调用来获取响应 - JSON、DWR、GWT RPC、Soap、Ad Hoc XML 等。

      如果代码作为小程序在浏览器中运行,则 Java 插件提供允许 Java 调用 JS 和 JS 调用 Java 的入口点。 Java 对象可以调用 JS 中的方法,将它自己的回调接口作为参数传递。一旦 JS 有了那个接口,就可以进行两种方式的通信。 Flash 和 Silverlight 也可以进行类似的操作。

      本文档解释了如何 - http://download-llnw.oracle.com/javase/1.4.2/docs/guide/plugin/developer_guide/java_js.html

      【讨论】:

        【解决方案7】:

        是的,这是可能的。您可以通过 http 请求和响应来调用 java 方法并获取响应..

        【讨论】:

        • 你能分享一个最小的例子吗?
        猜你喜欢
        • 2016-03-26
        • 1970-01-01
        • 1970-01-01
        • 2015-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多