14

ブラウザーのDOMに既にダウンロードされ、ユーザーの操作からキャプチャされたデータに適用する必要のある、重要な計算コードがいくつかあります。このコードを公開したくありません。私は疑問に思っています:

  1. Webサービスを作成し、WebSocketまたはHTTPを介してブラウザーと通信します。トレードオフは、相互作用の速度(滑らかなものから貧弱なものまで)とトラフィックコストの増加です。
  2. ページ内のロジックをカプセル化し、JavaScriptがJava APIと対話できるようにするJavaアプレット(コードを非表示にするために署名されたもの)を作成します。JavaとJavaScriptエンジンが特定のシナリオでデッドロックする可能性があることを他の場所で読みました。ただし、私はコンピューティングのみを行っているため、これは問題ではありません。たぶん、マルチコアマシンでは、さらにいくつかのスレッドを使用して作業を分割することができます。
  3. JavaScriptで記述します。しかし、JavaScriptはテストが難しく、すべてが世間の注目を集めています。

Web上でのJavaアプレットのユーザビリティやその他のいくつかのQ&Aも落胆しています。

Javaアプレットは死んだテクノロジーですか?最近、このトピックに関するQ&Aすらありません!さらに、Javaは常にすべてのブラウザ(デスクトップ、タブレット、またはモバイル)にバンドルされているとは限りませんか?

コードを非表示にしたり、クライアントのCPU / RAMを利用したり、データトラフィックを最小限に抑えたりするなど、同じことを実現するためのより良い方法はありますか?

WebページはJavaScript、HTML5、およびCSS上にあります。サーバーはJSONとXMLのみを提供します。データパケットは10〜20 KBで、頻繁に更新されます。計算は高価でクライアント固有なので、私は本当にクライアントを使用してすべてを実行したいと思います。

4

6 に答える 6

19

アプレットの最大の欠点は、クライアントマシンにJREがインストールされていることを前提としていることだと思います。それは本当に実行可能な仮定ですか?

もちろん、JREをダウンロードしてインストールすることもできますが、計算を行うためだけにこれらすべてを行うのはなぜですか?私が自問するもう一つの質問ですが、あなたのクライアントは携帯電話やタブレットなどでしょうか?もしそうなら、多分JavaScriptが一緒に行くより良いオプションです。

そしてさらに2セント:)あなたは「JavaScriptに目を開かせた」と述べました。計算コードを保護する唯一の実際の方法は、計算をサーバーに置くことであることを理解する必要があります。つまり、コンパイルされたバイナリコードがある場合でも、熟練した攻撃者にとってJavaのアセンブリは理解しやすいということです。そして、あなたが言及した難読化(JARファイルに署名しないという難読化)は、それを少し難しくしますが、それでも不可能ではありません。

ここで私が目にする唯一の懸念は、計算を同時に実行しているクライアントが多数あり、サーバーに計算の負担をかけると、最終的には崩壊する可能性があるということです。

于 2012-07-16T06:14:13.800 に答える
13

2015年9月の時点で、彼らは私に死んでいます。アプレットを使用することには賛否両論があります。しかし、Chromeはそれらのサポートを停止したので、それらを使用することで、デスクトップ用のChromeをサポートしなくなります。モバイルブラウザに関しては、NPAPIをサポートするのはどれですか。

オラクルの公式発表:

ChromeはNPAPI(Javaアプレットに必要なテクノロジ)をサポートしなくなりました。Webブラウザ用のJavaプラグインは、10年以上にわたってすべての主要なWebブラウザでサポートされているクロスプラットフォームプラグインアーキテクチャNPAPIに依存しています。GoogleのChromeバージョン45(2015年9月にリリース予定)は、NPAPIのサポートを終了し、Silverlight、Java、Facebook Video、およびその他の同様のNPAPIベースのプラグインのプラグインに影響を与えます。

Javaアプリケーションは、Webブラウザを介してWebスタートアプリケーション(起動後にブラウザと対話しない)またはJavaアプレット(ブラウザと対話する可能性がある)として提供されます。この変更はWebStartアプリケーションには影響せず、アプレットにのみ影響します。

Chromeを使用してJavaアプリケーションにアクセスする際に問題が発生した場合は、代わりにInternet Explorer(Windows)またはSafari(Mac OS X)を使用することをお勧めします。

UPDATE 1MicrosoftEdge もそれらをサポートしていません。それで、すでに死にかけているJavaアプレットに対する別の打撃。

更新2

Mozillaからの発表

重要:新しい64ビットバージョンのFirefox for Windowsは、このプラグインを認識またはサポートしていません。詳細については、このMozillaブログ投稿を参照してください。

そうそう。Javaアプレットは死んでいます。

UPDATE3OracleはJava9でそれらを公式に殺しました。

UPDATE 4 JavaWebStart 機能していません。Java11から

于 2015-11-04T14:41:43.533 に答える
4

..Javaアプレットを作成します(コードを非表示にするために署名されています)

コード署名はユーザーを保護するためのものであり、私たちのものではありません(またはコードを保護するためのものです)。単に余分なファイルを追加するだけです。おそらくあなたは難読化を考えているので、コードを盗むのが少し難しくなります。実際、難読化されたJavaScriptコードは、デジタル署名された(難読化されていない)Javaクラスよりも解読が困難です。

コードを保護するためのここでの唯一の実際の解決策は、サーバーに重要な部分を残すことです。JavaScriptは、ユーザー/ブラウザー/サーバーの相互作用のすべてではないにしてもほとんどを処理できる可能性があるため、Javaアプレットがこれで果たす可能性のある唯一の役割は、返された(計算された)データを視覚化することです。それでも、HTML5キャンバスで結果を表示する方法を探していると思います。

だからあなたの質問への答え...

Javaアプレット-今日は間違った選択ですか?

はい、このユースケースでは。アプレットは、サーバー上で行われているうんざりする作業で、純粋なJavaScript/Canvasで提供できるものにほとんどまたはまったく追加しません。

于 2012-07-16T05:21:29.563 に答える
1

JohnDemetriouは非常に良い情報を提供しました。

さらに、現在(2017年7月)、FirefoxとInternet Explorer(およびSafariは不明)のみがアプレットの使用を許可しています。次の3つの要件を満たしている場合は、これらを使用できます。

  1. Javaコントロールパネルで例外として.classアプレットファイルにアクセスするHTMLサイトを許可します
  2. Javaは、ブラウザがサポートするバージョン(おそらく最新バージョン)に更新されます。
  3. .classファイルはHTMLファイルと同じ場所にあります。

ブラウザにHTMLコンテンツの場所を入力して、Javaアプレットにアクセスします。それでも、Javaを実行するかどうかを要求するプロンプトが表示される場合があるので、そのまま受け入れます。

この情報は、アプレットを実行する方法があることを人々に知らせるためだけに提示しました。ただし、アプレットが無効になっている理由があります。それらは多くのセキュリティリークを許容します。それらを使用して、テクノロジーを学び、洞察を得てください。他の場所ではお勧めしません。

于 2017-07-04T14:10:42.190 に答える
-2

クライアントマシンを使用する必要がある場合、つまり、生体認証ソリューションやハードウェアなどを使用する場合は、アプレットが常に適しています。

しかし、化粧品や計算能力だけが必要な場合は、コードをリファクタリングし、できるだけ少ない条件で軽くてクリーンにするのがより良い方法だと思います。別のサーバーマシン(DBとIISなど)がある場合は、いくつかのビューまたはストアドプロシージャを使用すると役立つ場合があります。

唯一の解決策がアプレットであるプロジェクトに閉じ込められています...別の選択肢はActiveXでしたが、それは私のクライアントをInternet Explorerにロックし、私たちはそれを望んでいません。

于 2012-07-17T14:05:14.507 に答える
-2

さて、まず第一に、Javaアプレットは成長しているテクノロジーであり、死ぬことはありません。第二に、ブラウザとユーザーのインストールは減少しています。インストールの減少を使用してJavaが死にかけていると主張する人もいますが、プラグインがインストールされているよりもJavaアプレットの実際の使用がはるかに少ないため、その主張は誤りです。

しかし、あなたの説明では、私はおそらくアプレットを選びません。これは、ユーザーベースで使用する強力なテクノロジーであり、使用するために必要なものは何でもインストールすることがわかっています。ゲームやイントラネットサイトなどに適しています。イントラネットでは、IT部門は、アプレットを使用する必要のあるすべてのデスクトップでアプレットが機能することを確認できます。

しかし、あなたの場合、私はVaadinを使用します。JavaScriptを使用してJavaアプリケーションをWebアプリケーションに変換します。さらに、Vaadinの主な機能であるコードを保護します。ほとんどのコードはサーバー上でJavaコードとして実行され、GUIフロントエンドのみがブラウザーで実行されます。

その結果、Vaadinはアプレットよりもはるかに低速です(JavaScriptのため)。また、サーバー上でのコードの実行に大きく依存しているため、他のほとんどのWebフレームワークよりもはるかに低速です。もちろん、これは、計算がJavaScriptに変換されず、クライアントコンピューターに送信されないことも意味します。

ただし、強力なSwingAPIにアクセスすることはできません。Vaadinには独自のSwingのようなAPIがあり、Swingで実行できることのごく一部しかカバーしていません。しかし一方で、Swingが実行できることを実行できるWebフレームワークは他にありません。

あなたのすべての願いを叶える方法は本当にありません。計算にクライアントを使用する場合は、計算を公開します。それを回避する方法はありません。C++でネイティブアプリケーションを作成したとしても。それでもリバースエンジニアリングして計算を抽出することができます。したがって、サーバーで計算を実行し、ユーザーに請求する方法を見つけることをお勧めします。Vaadinを使用する場合は、まさにそれを実行します。

一方、クライアントで計算を実行したい場合は、実際にはJavaアプレットを使用する必要があります。計算に関しては、JavaはJavaScriptよりもはるかに高速です。FlashはJavaScriptよりも高速ですが、Javaはそれでもはるかに高速です。

于 2014-09-29T14:54:07.227 に答える