来自Web应用程序的硬件支持

Lee*_*lla 6 javascript java applet refactoring

我有一个运行的Web应用程序,支持某些特定的硬件.这是通过以下步骤实现的:

  1. 用户运行一个小型安装程序,将java文件(以及其他几个)放在客户端计算机上.主要部分是一个名为"hardwareManager"的jar
  2. 用户访问网络应用.Web应用程序运行一个Java applet,由于安装期间放置的.java.policy文件,该applet具有与浏览器沙箱外部的客户端计算机进行交互的权限.
  3. applet检查以确保hardwareManager正在运行,如果没有则运行命令来启动它.
  4. 用户与Web应用程序交互,该应用程序通过javascript将命令发送到applet.然后,applet将命令写入客户端计算机上的文本文件.硬件管理器不断监视文本文件,硬件管理器运行它读入的任何命令.

这很有效,但看起来很笨重.关于如何改进,我有几点想法,但我不知道哪些,甚至值得尝试.

将hardwareManager设置为socketServer并让applet直接连接到它而不是通过文本文件会更好吗?这甚至可能吗?

有没有办法完全消除applet并让javascript直接与hardwareManager对话?也许通过将hardwareManager编写为本地http服务器?它应该运行什么端口?这里的javascript xss限制适合吗?

par*_*tje 2

使用 Java Web Start 启动 Java 应用程序会不会那么笨重。这将消除守护进程或安装 Java 硬件管理器的需要。

另一种选择是使用 Java 中的内置浏览器。我认为这不是一个选择,因为您严重依赖 Javascript(我想提供丰富的客户端体验)。

如果您已经必须在客户端计算机上安装某些内容,为什么选择使用 Web 应用程序?

经验之谈:我们有一个 Java EE 应用程序,需要打印到客户端的 PoS 打印机。我们安装了一个小型“同步器”应用程序,它通过 SSH 连接并同步所有客户端文件。然后,它加载 JAR 并执行程序。该程序通过 RMI 与服务器连接,并订阅 JMS 队列以接收打印分配。

应用于您的案例:为什么不让您的 Java 应用程序直接连接到服务器?您可以使用 HTTP、SOAP 甚至基于 RMI 的 JMS。然后,您可以从服务器(而不是从有限的 JavaScript Web 浏览器环境)启动硬件命令。通过这种方式,您可以获得大量功能:身份验证、命令缓冲,甚至可以在多个客户端之间共享硬件。

示意图:

                   <----AJAX------> Web browser
ApplicationServer                  
                   <---HTTP/SOAP--> Java hardware manager application
Run Code Online (Sandbox Code Playgroud)

您可以使用 Java Web Start 启动 Java 应用程序,这允许您自动更新应用程序(而不需要向每个客户端传递新的安装程序)。