Java小程序——今天是不是一个错误的选择

Java applets - is it a wrong choice today?

本文关键字:一个 错误的选择 是不是 程序 今天 Java      更新时间:2023-09-26

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

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

Q&诸如Java小程序在网络上的可用性和其他一些也令人沮丧。

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

有没有更好的方法来实现同样的功能,比如隐藏代码,利用客户端CPU/RAM,最大限度地减少数据流量?

网页采用JavaScript、HTML5和CSS。服务器只提供JSON和XML。数据包的大小为10-20KB,并且经常更新。计算是昂贵的,而且是特定于客户端的,所以我真的很想使用客户端来完成所有这些。

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

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

还有两美分:)你提到了"大开眼界的JavaScript"您应该明白,保护计算代码的唯一真正方法是将计算放在服务器上。我的意思是,即使你有一个编译的二进制代码,Java的汇编对于一个熟练的攻击者来说也很容易理解。您提到的模糊处理(它是模糊处理,而不是对JAR文件进行签名)使它稍微困难一些,但仍然不是不可能。

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

截至2015年9月,它们对我来说已经死了。使用小程序有好处也有坏处。但Chrome已经停止支持它们了,所以使用它们你根本不支持桌面版的Chrome,而当涉及到移动浏览器时,它们中的哪些支持NPAPI?

Oracle官方公告:

Chrome不再支持NPAPI(Java小程序所需的技术)用于web浏览器的Java插件依赖于跨平台插件体系结构NPAPI,已得到所有主要web浏览器的支持十多年来。谷歌Chrome 45版(计划发布2015年9月)放弃了对NPAPI的支持,影响了Silverlight、Java、Facebook视频和其他类似的基于NPAPI的插件。

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

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

更新1Microsoft Edge也不支持它们。这是对已经奄奄一息的Java小程序的又一次打击。

更新2

Mozilla 发布

重要提示:适用于Windows的新64位版本的Firefox识别或支持此插件。查看此Mozilla博客文章详细信息。

所以是的。Java小程序已经死了。

UPDATE 3Oracle正式用Java 9杀死了他们。

UPDATE 4Java Web Start也已失效。从Java 11

编写Java小程序(签名以隐藏代码)

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

保护代码的唯一真正解决方案是将重要部分留在服务器上。JavaScript可能可以处理大部分(如果不是全部的话)用户/浏览器/服务器交互,因此Java小程序在其中可能扮演的唯一角色是可视化返回(计算)的数据。甚至,我可能会寻找在HTML5画布中显示结果的方法。

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

Java小程序——今天的选择是错误的吗?

是的,对于这个用例。小程序在服务器上完成繁重的工作时,几乎没有或根本没有添加纯JavaScript/Ccanvas提供的内容。

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

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

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

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

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

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

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

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

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

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

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

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

但是,您将无法访问功能强大的Swing API。Vaadin有自己的Swing-like API,它只涵盖了Swing所能做的一小部分。但另一方面,没有其他web框架可以做Swing所能够做的。

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

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

相关文章: