从 Javascript 调用 Java 方法的选项

发布于 2024-11-18 07:44:54 字数 130 浏览 2 评论 0原文

从 Javascript 调用“特定”Java 方法并具有回调等的各种选项有哪些?

例如,我知道一个正在使用 DWR。但是想知道是否还有其他可以使用的库,或者是否可以通过 AJAX 本身来完成。

推荐的方法是什么?

What are the various options to call a "specific" Java method from Javascript and have callback, etc?

E.g. One i know is using DWR..But wanted to know if there are any other libraries that can be used OR if this can be done by AJAX itself..

What is the recommended approach?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

谁的年少不轻狂 2024-11-25 07:44:54

简而言之,除了 Java applet 与 JavaScript 运行在同一页面上下文中的可能例外之外,JavaScript 无法直接调用 Java 方法,反之亦然。 DWR 不会直接从 JavaScript 调用任何 Java 方法,它会向服务器发送 AJAX 请求,并使用自己的中间层来检测请求和响应处理,使其看起来像是在调用 Java 方法。

但无论如何,让客户端中的 JavaScript 代码和服务器上的 Java 代码相互通信的典型方法是在服务器上定义一个向客户端公开的 API。然后,客户端可以使用公开的 API 发出请求(使用 AJAX 或您喜欢的任何其他机制)。客户端不会直接调用任何 Java 方法,而是向服务器上的给定 URL 发送请求,该请求会映射回某些 Java 代码。大多数流行的 JavaScript 框架都提供了简化 AJAX 请求处理和回调的便捷方法。

如果出于某种原因,您想要相当于能够调用任意类中的任意方法并将结果返回给您的功能,那么您可以定义一个 API 方法,该方法将类名和方法名作为参数,然后使用反射来执行方法调用。这可能非常接近 DWR 服务器端部分正在做的事情。

Put simply, with the possible exception of a Java applet running in the same page context as the JavaScript, there is no way for JavaScript to directly call a Java method, or vice-versa. DWR isn't calling any Java methods directly from JavaScript, it's sending an AJAX request to the server and using its own intermediate layer to instrument the request and response processing such that it looks as if it is calling Java methods.

But anyways, the typical approach for getting JavaScript code in the client and Java code on the server to talk to one another is to define an API on the server that is exposed to the client. The client can then make requests (using AJAX or whatever other mechanism you prefer) using the exposed API. The client isn't calling any Java methods directly, instead it's sending a request to a given URL on the server, which gets mapped back to some bit of Java code. Most popular JavaScript frameworks provide convenience methods for simplifying AJAX request handling and callbacks.

If for some reason you want functionality equivalent to being able to call an arbitrary method in an arbitrary class and have the result returned to you, then you could define an API method that takes as parameters a class name and a method name and then uses reflection to perform the method invocation. This would probably be very close to what the server-side portion of DWR is doing.

抠脚大汉 2024-11-25 07:44:54

我知道您可以在使用 Mozilla Rhino 时执行此操作,但我猜测您正在谈论浏览器运行时环境,因此也许此响应不是很有帮助。

I know you can do this when using Mozilla Rhino, but I'm guessing that you're talking about a browser run-time environment, so maybe this response isn't very helpful.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文