- ベストアンサー
アプレットからサーバ側のプログラムを起動したいのですが…
仕事でJavaを使うことになったのですが、プロジェクト員一同Java初心者で、必死にJavaを勉強していますが、以下のことで困っています。申し訳ありません。助けてください。 UNIXサーバ側の設定とかをいじるプログラムがあるのですが、それをアプレットにして、SEさんがリモートからでも操作出来るようにしろ、と言われました。 とりあえず、Javaアプレットからサーバ側(アプレットのクラスが置いてあるのと同じマシン)のCプログラムを起動し、その結果を受け取るようにしたいのですが、Java経験者に相談したら「アプレットにはセキュリティ上の問題があるのでCGIかServletを使わないと出来ない」と言われました。 では…とServletの勉強を初め、サーバー側にServletEngineをいれてみたのですが、 ServletはHTTPポートと違うポート(8000番とか)を開けてそこにアクセスしなくてはいけないようにみえます。それならクライアント側プログラムをアプレットにし、サーバ側プログラムとSocket通信で結び、サーバ側プログラムがCプログラムを起動、としたほうが楽そうですが、ひとつしかポートを開きたくないと言われたのです。 もしかして「アプレット+Servlet が アプレット+CGI相当」じゃなく「Servlet が アプレット+CGI相当」なのでServlet用のポートだけ開けとけばいいとかいうことでしょうか? とか思っていたら、JNIでC言語のメソッドをJavaメソッド扱いするとかいう話も小耳に挟みました。それでできるのかしら? ・webポートだけを開いて ・サーバ側のCプログラムを起動してその結果を受け取る ・クライアントのマシンにあらかじめインストールしなくても、ブラウザからアクセスすると操作が対話的に出来るような ものを簡単に作ろうとしたら、一体何を勉強するべきなのでしょうか…。 Applet+CGI? Applet+Servlet? RMI? JNI…? 助けてください…(TT)
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
ちゃんと、設定すればwebポートだけ開けられます。 Cのプログラムは、コマンドラインで動くものですか? コマンドラインで動作する時は、 サーブレットだけで、実装します。Cのプログラムは、RunTimeExec(だったかな)をしようして、コマンドを起動します。 Cのプログラムがライブラリーの時は、 RunTimeExecの変わりにJNIを使用します。 アプレットは、使用しない方が、いいでしょう。
その他の回答 (4)
- jiri_t
- ベストアンサー率25% (1/4)
nobi2000さんのarataさんへのお礼に関して一言。 ちょっと認識がずれていませんか? もともとGUIを表示するのはClient(Applet)のはず だからservletでGUIは必要無いと思うのですが... nobi2000さんの質問から察するに appletから設定のためのコマンドをservletに送る(applet-servlet通信) servletがCのプログラムを実行(Runtime.exec) servletが実行結果を受け取る appletがその情報を受け取り表示する と言う手順になりそうなのですが... 参考になれば幸いです
お礼
ありがとうございます。 自分がものすごく根本的に間違ってたことに気づいて恥ずかしいです。ご指摘ありがとうございます。(__) Servlet→Server側で動く Applet→Cliant側で動く とわかっているつもりで全然わかっていませんでした。 「servletでGUI」って サーバー側で「出せ!」と命令すれば、画像だけクライアント側に現れると解釈していたということですよね。 NO.#3 hogehoeさんのお答えを見て、 (hogehoeさんは「HTMLとJavaScriptで代用すればよい」という意味で「Appletを使わないほうが」とおっしゃったのに) 「Appletを使わなくてもGUI出せるからApplet使わないほうが」の意と勘違いしたのですが、 arataさんに教えていただいたURLをみて 先ほどの(Appletを使わなくてもGUI出せるから~)解釈は勘違いでは?とうすうす気づいたのに自信が持てなかったので書いたのですが、考えが足りない発言でした。 でもその勘違いを丁寧に正してくださって嬉しいです。 参考の手順をみてもやもやしていた気持ちがクリアになりました。 ありがとうございました!
- hogehoe
- ベストアンサー率60% (3/5)
GUIですが、 HTMLとJavaScriptで実現できそうなので アプレットを使用する時は、NNとIEでは、動作が多少違うので、 Java-PlugInをブラウザーに組み込まないといけません。
お礼
なるほど!ありがとうございました。 自分で勝手に変な解釈して勝手に混乱してたみたいです。ごめんなさい。 そうか、ダイアログとかだすくらいならJavaScriptで実現すれば、Servletに作らせるHTML文の中にJavaScriptのコードを組み込めばいいのですものね…。そういう使い方があるのですね! お答えありがとうございました(^ ^)
- vcmshiro
- ベストアンサー率44% (32/72)
私もJAVAアプレット&CGIで色々やっています。 今回のご質問では、どこまで何をするか?によるかと思います。 リアルに近い形でサーバとクライアントで情報のやり取りをやるのであれば、サーブレットを勉強すれば良いかと思いますが。。。どうですか? ご存じの通り、サーブレットはサーバー側で起動するアプレットの様なものですのでサーバー側で色々設定ができる様になっていて、他のソフトウエアとの親和性もアプレットに比べて緩和されています。 アプレットは、クライアントマシンでのセキュリティーに大きく依存してしまうので色々できない事があります。 私は今、JAVAで占いやアンケートなどを行わせてその結果をサーバに保存だけしたいので、アプレット&CGIで色々やっています。 似たような悩みを最初は抱えておりましたが、CGIをC言語で開発しコンパイルした実行コードをサーバ上で動作させてしまうのが一番簡単では無いでしょうか? 但し、サーバーは自分で管理し設定しなければなりません。 そして、DLLなどで共通の動的ライブラリーも作ったり二重起動せずスレッドなどで対応できるソフトウエアにしておけば、メモリも少なく、起動も早いソフトになります。(その分デバックし難くなりますが・・・) ご参考まででした。
お礼
ありがとうございます。 CGIのほうが簡単ですか…。CGIのほうがいい気がしてきました。 サーバの管理設定はCGIを使ったときもServletを使ったときもいっしょですよね…?たぶん… 共通のライブラリ…? スレッド対応…?ってCGIってアクセスごとにプロセス立ちあがるのですよね…?ごめんなさい。なんかイメージがつかめませんでした。(TT)
- arata
- ベストアンサー率49% (139/279)
Applet、Servlet間の通信についてですが、下記のURLを参照してください。
お礼
ありがとうございます。 今みてみました。 これはTextAreaとかのGUI画面もつためにApplet、Servletの通信してるのですよね…?やっぱりServletではGUIだせないのでしょうね…。
お礼
ありがとうございます。 ServletEngineのインストールと設定時にポート80を指定すればよいのでしょうか?やってみます。(^ ^) CはライブラリなのでRuntime.getRuntime().execではなくJNIを使ったほうがよいのですね…。JNIの勉強もしなければ…(^_^;) アプレット使用しないほうがよいのはなぜですか…?クライアントに表示側はGUI画面を持っているので、GUIイメージはアプレットにしたほうがよいのかと思ったのですが、ServletにGUIの表示させたほうがいいのでしょうか? ServletでGUIは出せないのかと何故か思いこんでたのですが、違うのでしょうか…。 あ、サーバ側にGUIおけるのだったら、ひょっとしてサーバ側にSwing置いたらSwing使った画面とかにしても大丈夫?…そんなわけないか。クライアント側はどーやって解釈するのだ(一人つっこみ) なんか頑張ってみます…。