14

我有一些重要的计算代码需要应用于已经下载到浏览器 DOM 并从用户交互中捕获的数据。我不想公开这段代码。我想知道是否:

  1. 编写一个 web 服务并通过 websocket 或 HTTP 与浏览器通信。权衡是交互速度(从光滑到差)和更高的流量成本。
  2. 编写一个 Java 小程序(签名以隐藏代码),将逻辑封装在页面中并让 JavaScript 与 Java API 交互。我在其他地方读到 Java 和 JavaScript 引擎在某些情况下可能会死锁。但是,由于我只是在计算,所以这不是问题。也许,在多核机器上,我可以使用更多线程来分配我的工作。
  3. 用 JavaScript 编写。但是 JavaScript 很难测试,而且都在公众视野中。

诸如Web 上 Java 小程序的可用性和其他几个问题的问答也令人沮丧。

Java 小程序是一种死技术吗?这些天甚至没有关于这个话题的问答!此外,Java 可能并不总是与所有浏览器(台式机、平板电脑或移动设备)捆绑在一起吗?

有没有更好的方法来完成同样的事情,比如隐藏代码、利用客户端 CPU/RAM、最小化数据流量?

网页基于 JavaScript、HTML5 和 CSS。服务器只提供 JSON 和 XML。数据包为 10-20 KB 并经常更新。计算成本高昂且特定于客户端,因此我真的很想使用客户端来完成所有这些工作。

4

6 回答 6

19

我认为小程序的最大缺点是它假设您在客户端计算机上安装了JRE 。这真的是一个可行的假设吗?

当然,您也可以提供下载和安装 JRE,但是为什么要做所有这些只是为了进行一些计算呢?另一个我会问自己的问题,你的客户可以是手机、平板电脑等吗?如果是这样,也许 JavaScript 是一个更好的选择。

还有两美分 :) 你提到了“打开眼睛 JavaScript” 你应该明白保护计算代码的唯一真正方法是将计算放在服务器上。我的意思是,即使你有一个已编译的二进制代码,Java 的程序集对于熟练的攻击者来说也很容易理解。你提到的混淆(它是混淆,不签署JAR文件)使它稍微难一些,但仍然不是不可能的。

我在这里看到的唯一问题是,如果您有很多客户端同时运行计算,并且您将计算负担放在服务器上,它最终可能会崩溃。

于 2012-07-16T06:14:13.800 回答
13

截至 2015 年 9 月,他们对我来说已经死了。使用小程序有利有弊。但是 Chrome 停止支持它们,所以通过使用它们,您根本不支持桌面版 Chrome,而对于移动浏览器,它们中的哪些支持 NPAPI?

甲骨文官方公告:

Chrome 不再支持 NPAPI(Java 小程序所需的技术) 用于 Web 浏览器的 Java 插件依赖于跨平台插件架构 NPAPI,该架构已被所有主要 Web 浏览器支持了十多年。Google 的 Chrome 版本 45(计划于 2015 年 9 月发布)放弃了对 NPAPI 的支持,影响了 Silverlight、Java、Facebook Video 和其他类似的基于 NPAPI 的插件。

Java 应用程序通过 Web 浏览器作为 Web 启动应用程序(一旦启动后不与浏览器交互)或作为 Java 小程序(可能与浏览器交互)提供。此更改不会影响 Web Start 应用程序,它只会影响小程序。

如果您在使用 Chrome 访问 Java 应用程序时遇到问题,Oracle 建议您改用 Internet Explorer (Windows) 或 Safari (Mac OS X)。

更新 1 Microsoft Edge 也不支持它们。因此,对已经垂死的 Java 小程序又是一次打击。

更新 2

Mozilla 的公告

重要提示:新的 64 位版本的 Firefox for Windows 不识别或支持此插件。有关详细信息,请参阅此 Mozilla 博客文章。

是的。Java 小程序已死。

更新 3甲骨文正式用 Java 9杀死了他们。

更新 4 Java Web Start也死了。从Java 11

于 2015-11-04T14:41:43.533 回答
4

..写一个Java小程序(签名隐藏代码)

代码签名是为了保护用户,而不是我们(或保护代码)。它只是添加了额外的文件。也许您正在考虑混淆,这使得窃取代码变得更加困难。事实上,混淆的 JavaScript 代码比数字签名(但不是混淆)的 Java 类更难破译。

保护代码的唯一真正解决方案是将重要部分留在服务器上。JavaScript 可能处理大部分(如果不是全部)用户/浏览器/服务器交互,因此 Java 小程序可能在其中发挥的唯一作用是可视化返回的(计算的)数据。即使这样,我也可能会寻找在 HTML 5 Canvas 中显示结果的方法。

所以你的问题的答案...

Java 小程序 - 今天是一个错误的选择吗?

是的,对于这个用例。与在服务器上完成的繁重工作相比,在纯 JavaScript/Canvas 中可以提供的内容上,applet 几乎没有添加任何内容。

于 2012-07-16T05:21:29.563 回答
1

John Demetriou 提供了非常好的信息。

此外,现在(2017 年 7 月)只有 Firefox 和 Internet Explorer(也许 Safari 不确定)允许使用小程序。如果您满足以下三个要求,则可以使用它们:

  1. 您允许访问 .class 小程序文件的 HTML 站点作为 Java 控制面板中的例外
  2. Java 更新到浏览器支持的版本(很可能是最新版本)
  3. .class 文件与您的 HTML 文件位于同一位置!

您可以通过在浏览器中键入 HTML 内容的位置来访问 Java 小程序。您仍然可能会收到提示,询问是否运行 Java,因此请接受。

我只提供这些信息只是为了让人们知道有一种方法可以运行小程序。但是,小程序被禁用是有原因的。它们允许许多安全漏洞。仅使用它们来学习他们的技术并获得一些见解。不建议在其他地方使用它们。

于 2017-07-04T14:10:42.190 回答
-2

嗯,首先,Java 小程序是一项不断发展的技术,而且还远未消亡。其次,浏览器和用户安装量正在下降。一些人使用下降的安装量来声称 Java 正在消亡,但这种说法是错误的,因为 Java 小程序的实际使用量总是比已安装的插件少得多。

但是根据您的描述,我可能不会选择小程序。这是一项强大的技术,我将与我知道会安装他们需要的任何东西以使用它的用户群一起使用。它适用于游戏、内网站点等。在内网上,IT 部门可以确保小程序在所有需要使用它的桌面上运行。

但在你的情况下,我会使用Vaadin。它使用 JavaScript 将 Java 应用程序转换为 Web 应用程序。此外,它可以保护您的代码,这是 Vaadin 的主要功能。您的大部分代码将作为 Java 代码在服务器上运行,并且只有 GUI 前端在浏览器中运行。

因此,Vaadin 比 applet 慢得多(因为 JavaScript)。它也比大多数其他 Web 框架慢得多,因为它严重依赖于在服务器上运行代码。这当然也意味着您的计算不会被翻译成 JavaScript 并传输到客户端计算机。

但是,您将无法访问强大的Swing API。Vaadin 有自己的类似于 Swing 的 API,它只涵盖了 Swing 可以做的一小部分。但另一方面,没有其他 Web 框架可以做 Swing 可以做的事情。

真的没有办法满足你所有的愿望。如果您使用客户端进行计算,您将公开您的计算。没有办法解决这个问题。即使您用 C++ 编写本机应用程序也不会。它仍然可以进行逆向工程并提取您的计算。因此,我建议您在服务器上运行您的计算,并找到一种向用户收费的方法。如果您使用 Vaadin,这正是您所做的。

另一方面,如果您想在客户端上进行计算,您确实应该使用 Java 小程序。在计算方面,Java 比 JavaScript 快得多。Flash比 JavaScript 快,但 Java 仍然快得多。

于 2014-09-29T14:54:07.227 回答
-2

当您必须使用客户端机器时,小程序总是一个不错的选择,即:使用生物识别解决方案或硬件之类的东西。

但如果你只需要装饰或计算能力,我想更好的方法是重构代码,使其轻巧干净,条件尽可能少。如果您有单独的服务器机器(例如 DB 和IIS ),也许使用一些视图或存储过程应该会有所帮助。

我被锁定在一个项目中,唯一的解决方案是小程序......另一个选择是ActiveX,但它将我的客户端锁定到 Internet Explorer 并且我们不想要它。

于 2012-07-17T14:05:14.507 回答