2

我正在创建一个 Rails 应用程序,在它上面应该有一个 Java Applet。

我的问题是小程序必须与 Rails 部分紧密集成。我必须能够获得所有用户的列表、更新图像等... Internet 上提供的关于如何将小程序与 Rails 一起使用的信息非常少。所以请给我一些提示。最好的方法是什么?

  1. 向小程序发送参数?
  2. 使用小程序中的 Rails REST 接口?
  3. 以某种方式使用 JRuby?
  4. 其他....?

谢谢!

4

3 回答 3

2

你能提供更多细节吗?与此同时,这是我对你的问题的看法:

  1. 向小程序发送参数?

您的 rails 应用程序将能够为小程序提供服务,但一旦提供服务,我认为您将能够向它发送消息(但是您将能够响应来自它的消息,这可能是您的要求)。

  1. 使用小程序中的 Rails REST 接口?

你自己已经回答了那个问题。REST 是一种接口设计,因此可以从任何可以发出 HTTP 请求的地方访问。诀窍是正确构造 URL,以便 rails 知道您想要做什么。在http://guides.rubyonrails.org/routing.html有关于配置 rails 路线(REST 和非 REST)的很好的信息

  1. 以某种方式使用 JRuby?

您可以为此使用 jruby,但您不需要这样做。您的服务器(rails)和客户端(浏览器/小程序)通过 http 相互通信,因此不需要使用相同的语言或在相同的 VM 上运行。

希望有帮助....

于 2009-05-25T02:36:06.970 回答
1

我认为您可能没有找到任何关于 Applet 和 Rails 的具体内容的原因是它们在不同级别上运行,并且并不真正相互依赖。看起来 Rob 试图澄清一些事情,所以我将再采取一步,以确保我们都在同一页面上。

Rails 的工作是通过 Web 服务器生成 HTML/XML/Javascript/图像并将其提供给用户的 Web 浏览器以进行渲染。该 HTML 的一部分将是一个 APPLET(或可能是 OBJECT)标签,它指示浏览器加载小程序。通常,这会指示浏览器调用 Java 插件并让它处理加载小程序。然而,一旦加载并运行,即使小程序显示在浏览器中的当前网页上(或者甚至可能在另一个窗口中),它实际上并不十分了解它所在的网页。在大多数情况下,小程序不关心浏览器或它们“属于”的页面。因此,如果一个小程序需要更多信息,或者需要请求数据,它通常只会向它来自的服务器发送一个 HTTP 请求。然后它会解析数据并自行更新。

我假设您可能需要单击或输入小程序中的某些内容,并且该数据用于更新 Rails 为浏览器提供的网页。使用小程序,您几乎有两种选择:

  1. 使用 Web 服务器应用程序共享状态信息
  2. 如http://java.sun.com/products/plugin/1.3/docs/jsobject.html所示,使用 JSObject 使用 Java 到 Javascript 通信

老实说,选项 2 有很多警告,除非您完全控制所有潜在用户系统上的浏览器和 Java 版本,否则我永远不会使用它。即使那样,我也会担心会破坏它的更新。

基本上,选项 1 让 Applet 和 Javascript/HTML 定期轮询 Web 服务器 (Rails),以查看是否有任何更新或请求需要响应以进行数据交换。如果用户更新了小程序,它会通过 URL 请求/发布向 Web 服务器发送消息,并且网页的下一个查询(可能通过类似 AJAX 的调用)将看到新数据,并且网页将更新它。

我希望这会有所帮助。

于 2009-05-25T09:10:58.110 回答
0

两个非常棒的答案。我非常感谢他们,谢谢!

阅读您的帖子让我意识到最好的选择是使用 HTTP 请求到 Rails REST 接口。但是,我看到这种方法有一些缺点。但我没有看到任何更好的解决方案。小程序应具备的一项功能是能够浏览和搜索所有产品,这可能很多。为每次搜索发送一个 HTTP 请求会很昂贵。也许我可以通过在小程序启动时加载所有产品来解决这个问题。然后浏览和搜索会很快。或者也许做一些不错的缓存。因此,一旦找到它们,我就不会再取它们了。

关于在网上找不到很多关于此的信息。我明白你的观点。但是......我仍然认为应该有更多。我的意思是,在我的情况下,我真的很想要一个特定于 Rails 的库来帮助我发送请求以更正 url。糟糕的是,Java 并不是那么动态。自动做一些事情有点困难,比如在 Ruby 和 Rails 中。也许我会为此写一个小库。我的意思是,无论如何我都必须写它。那么为什么不做一个图书馆呢?有些人可能会使用它。

于 2009-05-25T18:40:56.733 回答