Java Applets - 今天它是一个错误的选择吗?

问题描述 投票:11回答:6

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

  1. 编写Web服务并通过websocket或http与浏览器进行通信。权衡是交互速度(从光滑到差)和更高的流量成本。
  2. 编写一个Java Applet(签名隐藏代码),封装逻辑在页面中,让JavaScript与Java api交互。我在别处读到Java和JS引擎在某些情况下会陷入僵局。但是因为我只是计算,所以这不是问题。也许,在多核机器上,我可以使用更多的线程来分配我的工作。
  3. 用JavaScript编写。但JavaScript很难测试,而且这一切都在公众眼中。

Qazxswpoi和其他几个问答也令人沮丧。

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

是否有更好的方法来实现相同的隐藏代码,利用客户端CPU / RAM,最小化数据流量?

网页在Javascript / html5 / css上。服务器只提供JSON / XML。数据包为10-20KB并经常更新。计算是昂贵的和客户端特定的,所以我真的想使用客户端来做所有这些。

非常感谢。

java javascript applet
6个回答
16
投票

我认为applet的最大缺点是它假设你在客户端机器上安装了JRE。这真的是一个可行的假设吗?当然,您也可以提供下载和安装JRE,但为什么只为进行一些计算而烦恼呢?我会问自己的另一个问题,您的客户可以是手机,平板电脑等吗?如果是这样,也许Java Script是一个更好的选择。

而另外5美分:)你提到'开启眼睛java脚本'你应该明白,保护你的计算代码的唯一真正方法是将计算放在服务器上。我的意思是,即使你有一个编译的二进制代码,java的程序集对于熟练的攻击者也很容易理解。你提到的混淆(它的混淆,而不是签名jar)使它稍微困难但仍然不是不可能的。

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

只是我的想法,希望这将有助于您在这里选择最佳方向......


10
投票

截至2015年9月,他们已经死了。使用applet有利有弊。但Chrome停止支持他们,因此使用它们只是不支持Chrome for desktop,而且涉及移动浏览器,哪些支持NPAPI?

官方oracle公告:

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

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

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

编辑

Microsoft Edge也不支持它们。这是对已经死亡的Java Applets的又一次打击。

编辑2

来自Mozilla的公告

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

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

编辑3 Oracle用Java 9正式杀死了usability of Java applets in the web


2
投票

..编写一个Java Applet(签名隐藏代码)

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

保护代码的唯一真正解决方案是将重要部分留在服务器上。 JS可能可以处理大多数(如果不是全部)用户/浏览器/服务器交互,因此Java applet可能在其中扮演的唯一部分是可视化返回的(计算的)数据。即便如此,我也许会想办法在HTML 5 Canvas中显示结果。

所以问题的答案..

Java Applets - 今天它是一个错误的选择吗?

这个用例是的。 applet在纯JS / Canvas中提供的内容很少或根本没有增加,而在服务器上进行了繁重的工作。


1
投票

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

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

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

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

我只提供这些信息只是为了让人们有办法运行applet。但是,由于某种原因,applet被禁用,它们允许许多安全漏洞。仅使用它们来学习他们的技术并获得一些见解。他们不推荐在其他地方。


-1
投票

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

但是,如果你只需要化妆品或计算能力,我想更好的方法是重构代码,让它变得轻盈和干净,尽可能减少条件。如果您有单独的服务器计算机(例如DB和IIS),也许使用某些视图或SP应该会有所帮助。

我被锁定在一个项目,唯一的解决方案是applet,...另一个选择是ActiveX,但它将我的客户端锁定到IE,我们不想要它。


-2
投票

首先,Java Applet是一项不断发展的技术,远未消亡。其次,浏览器和用户安装正在下降。有些人使用衰落的安装来声称Java正在死亡,但这是假的,因为Java Applet的实际使用总是比安装的插件少得多。

但是根据你的描述,我可能不会选择Applets。这是一个强大的技术,我将与用户群一起使用,我知道可以安装他们需要的任何东西以便使用它。它适用于游戏,内部网站等。在Intranet上,IT可以确保applet适用于需要使用它的所有桌面。

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

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

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

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

另一方面,如果你想在客户端上进行计算,你真的应该使用Java Applets。在进行计算时,Java比JavaScript更快。 Flash比JavaScript更快,但Java仍然更快。

© www.soinside.com 2019 - 2024. All rights reserved.