仕事で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)

このQ&Aに関連する最新のQ&A

A 回答 (5件)

ちゃんと、設定すればwebポートだけ開けられます。



Cのプログラムは、コマンドラインで動くものですか?

コマンドラインで動作する時は、
サーブレットだけで、実装します。Cのプログラムは、RunTimeExec(だったかな)をしようして、コマンドを起動します。

Cのプログラムがライブラリーの時は、
RunTimeExecの変わりにJNIを使用します。

アプレットは、使用しない方が、いいでしょう。
    • good
    • 0
この回答へのお礼

ありがとうございます。
ServletEngineのインストールと設定時にポート80を指定すればよいのでしょうか?やってみます。(^ ^)

CはライブラリなのでRuntime.getRuntime().execではなくJNIを使ったほうがよいのですね…。JNIの勉強もしなければ…(^_^;)

アプレット使用しないほうがよいのはなぜですか…?クライアントに表示側はGUI画面を持っているので、GUIイメージはアプレットにしたほうがよいのかと思ったのですが、ServletにGUIの表示させたほうがいいのでしょうか?
ServletでGUIは出せないのかと何故か思いこんでたのですが、違うのでしょうか…。

あ、サーバ側にGUIおけるのだったら、ひょっとしてサーバ側にSwing置いたらSwing使った画面とかにしても大丈夫?…そんなわけないか。クライアント側はどーやって解釈するのだ(一人つっこみ)

なんか頑張ってみます…。

お礼日時:2001/01/12 11:06

nobi2000さんのarataさんへのお礼に関して一言。


ちょっと認識がずれていませんか?
もともとGUIを表示するのはClient(Applet)のはず
だからservletでGUIは必要無いと思うのですが...

nobi2000さんの質問から察するに
appletから設定のためのコマンドをservletに送る(applet-servlet通信)
servletがCのプログラムを実行(Runtime.exec)
servletが実行結果を受け取る
appletがその情報を受け取り表示する

と言う手順になりそうなのですが...
参考になれば幸いです
    • good
    • 0
この回答へのお礼

ありがとうございます。
自分がものすごく根本的に間違ってたことに気づいて恥ずかしいです。ご指摘ありがとうございます。(__)

Servlet→Server側で動く
Applet→Cliant側で動く

とわかっているつもりで全然わかっていませんでした。
「servletでGUI」って
サーバー側で「出せ!」と命令すれば、画像だけクライアント側に現れると解釈していたということですよね。

NO.#3 hogehoeさんのお答えを見て、
(hogehoeさんは「HTMLとJavaScriptで代用すればよい」という意味で「Appletを使わないほうが」とおっしゃったのに)
「Appletを使わなくてもGUI出せるからApplet使わないほうが」の意と勘違いしたのですが、
arataさんに教えていただいたURLをみて
先ほどの(Appletを使わなくてもGUI出せるから~)解釈は勘違いでは?とうすうす気づいたのに自信が持てなかったので書いたのですが、考えが足りない発言でした。

でもその勘違いを丁寧に正してくださって嬉しいです。
参考の手順をみてもやもやしていた気持ちがクリアになりました。
ありがとうございました!

お礼日時:2001/01/16 14:36

GUIですが、


HTMLとJavaScriptで実現できそうなので

アプレットを使用する時は、NNとIEでは、動作が多少違うので、
Java-PlugInをブラウザーに組み込まないといけません。
    • good
    • 1
この回答へのお礼

なるほど!ありがとうございました。
自分で勝手に変な解釈して勝手に混乱してたみたいです。ごめんなさい。

そうか、ダイアログとかだすくらいならJavaScriptで実現すれば、Servletに作らせるHTML文の中にJavaScriptのコードを組み込めばいいのですものね…。そういう使い方があるのですね!

お答えありがとうございました(^ ^)

お礼日時:2001/01/16 14:46

私もJAVAアプレット&CGIで色々やっています。



今回のご質問では、どこまで何をするか?によるかと思います。

リアルに近い形でサーバとクライアントで情報のやり取りをやるのであれば、サーブレットを勉強すれば良いかと思いますが。。。どうですか?
ご存じの通り、サーブレットはサーバー側で起動するアプレットの様なものですのでサーバー側で色々設定ができる様になっていて、他のソフトウエアとの親和性もアプレットに比べて緩和されています。

アプレットは、クライアントマシンでのセキュリティーに大きく依存してしまうので色々できない事があります。

私は今、JAVAで占いやアンケートなどを行わせてその結果をサーバに保存だけしたいので、アプレット&CGIで色々やっています。

似たような悩みを最初は抱えておりましたが、CGIをC言語で開発しコンパイルした実行コードをサーバ上で動作させてしまうのが一番簡単では無いでしょうか?
但し、サーバーは自分で管理し設定しなければなりません。

そして、DLLなどで共通の動的ライブラリーも作ったり二重起動せずスレッドなどで対応できるソフトウエアにしておけば、メモリも少なく、起動も早いソフトになります。(その分デバックし難くなりますが・・・)



ご参考まででした。
    • good
    • 0
この回答へのお礼

ありがとうございます。
CGIのほうが簡単ですか…。CGIのほうがいい気がしてきました。

サーバの管理設定はCGIを使ったときもServletを使ったときもいっしょですよね…?たぶん…

共通のライブラリ…?
スレッド対応…?ってCGIってアクセスごとにプロセス立ちあがるのですよね…?ごめんなさい。なんかイメージがつかめませんでした。(TT)

お礼日時:2001/01/12 11:15

Applet、Servlet間の通信についてですが、下記のURLを参照してください。



参考URL:http://www.t3.rim.or.jp/~yoko-k-h/java/servlet/p …
    • good
    • 0
この回答へのお礼

ありがとうございます。
今みてみました。

これはTextAreaとかのGUI画面もつためにApplet、Servletの通信してるのですよね…?やっぱりServletではGUIだせないのでしょうね…。

お礼日時:2001/01/12 11:18

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qimport java.applet.Applet;について

ソースの先頭にimport java.applet.Applet;と書かれたソースをコンパイルすると、ローカルのjava.applet.Appletを読み込んで*.classを作るのだと思うのですが、java.applet.Appletが見つかりません。
普通はどのあたりにあるのでしょうか?

Aベストアンサー

java.applet.AppletクラスはJavaの実行環境(JRE)、またはJavaの開発環境(J2SE)のライブラリとして標準でインストールされています。

具体的には、下記のディレクトリの"rt.jar"に含まれています。(Windowsの場合)

■JRE
 C:\Program Files\Java\<Javaのバージョン>\lib

■J2SE (C:\j2sdk1.4.2にインストールした場合)
 C:\j2sdk1.4.2\jre\lib

通常は、コンパイル時には上記のJ2SE側の rt.jar を使ってコンパイルされるので java.applet.Appletクラスの存在を意識しなくても良いです。
また、実行時には上記のJRE側の rt.jar が使用されます。

ですから、コンパイル時、あるいは実行時にそれぞれのディレクトリに rt.jar がないとエラーが発生します。

ちなみに rt.jar の中身を確認したいのであれば、下記のコマンドをコマンドプロンプトから実行し、出力先のファイルをテキストエディタで開くと確認できます。

 cd C:\j2sdk\jre\lib   ← ディレクトリ移動

 jar tvf rt.jar > C:\Temp\result.txt ← rt.jarの中身をテキストファイルに出力

 notepad C:\Temp\result.txt   ← メモ帳で出力結果を表示


 出力結果のファイルには、java.applet.Appletであれば "java/applet/Applet" のように "." が "/" に置き換わって出力されています。

java.applet.AppletクラスはJavaの実行環境(JRE)、またはJavaの開発環境(J2SE)のライブラリとして標準でインストールされています。

具体的には、下記のディレクトリの"rt.jar"に含まれています。(Windowsの場合)

■JRE
 C:\Program Files\Java\<Javaのバージョン>\lib

■J2SE (C:\j2sdk1.4.2にインストールした場合)
 C:\j2sdk1.4.2\jre\lib

通常は、コンパイル時には上記のJ2SE側の rt.jar を使ってコンパイルされるので java.applet.Appletクラスの存在を意識しなくても良いです。
また、実行時...続きを読む

QServletでJNIを利用するには

こんにちは servletで利用するのを試していますが
出来ないので教えてください。
下のサイトのJNI を参考にしています。
http://www.hellohiro.com/native.htm

行った作業は、以下の通りです。
servlet のjava側の側では
import HelloWorldJNI.*; //JAR-FILEにしている

HelloWorldJNIjni = new HelloWorldJNI();
jni.sayHelloWorld();
として書いている。
・作成したDLLをPATHが通るように設定。
 サンプルのclassをHelloWorldJNI.jarとして
・CLASSPATHを通るように設定。
・WebLogicを起動し処理を実行すると
 java.lang.NoClassDefFoundError: HelloWorldJNI
 となります。

間違いや足りない箇所があれば、ご指摘頂ければと思います。
よろしくお願います。

Aベストアンサー

これだけだと、よくわかりませんが、
単にJAVA側でパッケージ宣言がされていないだけのようなきがします。

「import HelloWorldJNI.*;」
とするのなら、
HelloWorldJNIクラス自身も当然、
package HelloWorldJNI;
になっていないと駄目ですよ?

※あなたの参照されているサイトでは、自分自身をインスタンス化しているので、ちょっと勘違いするかも。

参考URL:http://www.alles.or.jp/~torutk/oojava/maneuver/2001/jni/jni.html

QJavaアプレットからウェブサーバ上のEXEを実行できる?

JavaアプレットからRuntime.exec()を使って同ディレクトリ内のEXEを呼び出し、
EXEが出力したファイルをアプレットで読み込む、
というのをウェブサーバ上で(というかウェブブラウザから)やりたいのですが、
それはできるのでしょうか。
試しにブラウザから実行してみたところ、コンソールに以下のエラーが出力され失敗しました。


Exception in thread "AWT-EventQueue-4" java.security.AccessControlException: access denied (java.io.FilePermission <<ALL FILES>> execute)
    at java.security.AccessControlContext.checkPermission(Unknown Source)
    at java.security.AccessController.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkExec(Unknown Source)
    at java.lang.ProcessBuilder.start(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    以下略


サーバ環境は以下です。
Windows 7 64bit pro
XAMPP for windows ver 1.7.2

Apacheの設定次第でできるのでしょうか。

JavaアプレットからRuntime.exec()を使って同ディレクトリ内のEXEを呼び出し、
EXEが出力したファイルをアプレットで読み込む、
というのをウェブサーバ上で(というかウェブブラウザから)やりたいのですが、
それはできるのでしょうか。
試しにブラウザから実行してみたところ、コンソールに以下のエラーが出力され失敗しました。


Exception in thread "AWT-EventQueue-4" java.security.AccessControlException: access denied (java.io.FilePermission <<ALL FILES>> execute)
    at java.secu...続きを読む

Aベストアンサー

どういうケースか分かりませんが、とりあえず、できません。
アプレットからEXEファイルを実行することはできません。
理由は簡単で、セキュリティーホールになるから。

EXEをクライアント上、サーバー上、どちらで実行しようとしているのかいまいち分かりませんが、クライアント上ではたとえば、アプレットからexeを起動できてしまうと、cmd.exeのようなものを実行させてクライアントコンピューターそのものを乗っ取ることができてしまいますので、できないようになっています。
サーバー上で実行しようとしても、アプレットはクライアントサイドで実行されていますので、直接サーバー上の実行ファイルを実行することはできません。

例外としては、アプレット等からCGI化したサーバー上のファイルは実行可能です。その場合はHTTPリクエストを発行しますが、おそらく、やりたいこととは違いますよね。

Qアプレットを実行すると、×が表示され、Javaアプレットの読み込みに失敗しました。のメッセージが表示されます。

Java JDK5をインストールしました。

C:\Program Files\Javaに
jdk1.5.0_06
jre1.5.0_06
がインストールされています。

コンパイルは、PATHにC:\Program Files\Java\jdk1.5.0_06\binを追加すれば、できるようになりました。


Javaアプレットの読み込みに失敗しました。のメッセージが表示されます。


// 図形の表示

import java.applet.*;
import java.awt.*;

public class Test_0002 extends Applet{
public void paint(Graphics g){
g.fillOval(0, 0, 200, 100);
}
}

Aベストアンサー

HTMLのソースとclassファイル(またはjarファイル)の配置はどうなっていますか?
読み込みに失敗したのなら、classファイルが読み込めていない可能性が高いです。

QJAVAアプレット(簡易計算機)のプログラム

足し算を行うだけのプログラムを組むことができたのですが、
四則演算を行いたいと考えています。
下記のようなプログラムでは、ボタンが=のボタンなのですが、
そのボタンを+,-,*,/の4つにおきかえて、各ボタンを押したときに
各ボタンの処理を行うのはどのようにすればいいのでしょうか?
分かる方、ご教授よろしくおねがいします。
import java.applet.Applet;
import java.awt.*; // java.awtパッケージのインポート
import java.awt.event.*;

public class SampleD10L2 extends Applet {

private Button btn_culc; // +ボタン
private TextField txt_A, txt_B, txt_answer; // 数値入力用テキストボックス
public void init() {
// ボタンのインスタンスを作成
btn_culc = new Button("=");
// ボタンのイベント処理を定義
btn_culc.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
// txt_Aに入力された値 + txt_Bに入力された値を計算
int intAnswer = Integer.parseInt(txt_A.getText()) + Integer.parseInt(txt_B.getText());
// 答えをtxt_answerに表示
txt_answer.setText(Integer.toString(intAnswer));
}
});

// コンポーネントの初期化
txt_A = new TextField("0", 3);
txt_B = new TextField("0", 3);
lbl_plus = new Label(" + ");
txt_answer = new TextField("0", 5);

// コンポーネントを追加
this.add(txt_A); // 自分自身のaddメソッドを呼び出す(this.は省略可能)
this.add(lbl_plus);
this.add(txt_B);
this.add(btn_culc);
this.add(txt_answer);
}
}

足し算を行うだけのプログラムを組むことができたのですが、
四則演算を行いたいと考えています。
下記のようなプログラムでは、ボタンが=のボタンなのですが、
そのボタンを+,-,*,/の4つにおきかえて、各ボタンを押したときに
各ボタンの処理を行うのはどのようにすればいいのでしょうか?
分かる方、ご教授よろしくおねがいします。
import java.applet.Applet;
import java.awt.*; // java.awtパッケージのインポート
import java.awt.event.*;

public class SampleD10L2 extends Applet {

...続きを読む

Aベストアンサー

足し算ができたのだからほかの演算も同じことをすればいいだけです。

1.
private Button btn_culc; // +ボタン

↑を四則演算分追加する。
private Button btn_minus; // -ボタン
private Button btn_multi; // *ボタン
private Button btn_div; // /ボタン

2.
btn_culc = new Button("=");
// ボタンのイベント処理を定義
btn_culc.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
// txt_Aに入力された値 + txt_Bに入力された値を計算
int intAnswer = Integer.parseInt(txt_A.getText()) + Integer.parseInt(txt_B.getText());
// 答えをtxt_answerに表示
txt_answer.setText(Integer.toString(intAnswer));
}
});

init内の↑処理を追加したボタン分追加し、足し算の部分を書き換える。

btn_minus= new Button("-");
// ボタンのイベント処理を定義
btn_culc.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
// txt_Aに入力された値 - txt_Bに入力された値を計算
int intAnswer = Integer.parseInt(txt_A.getText()) - Integer.parseInt(txt_B.getText());
// 答えをtxt_answerに表示
txt_answer.setText(Integer.toString(intAnswer));
}
});

(*と/の処理も同じように追加すること。)

3.
this.add(btn_culc);

追加したボタンの数だけaddする。
this.add(btn_minus);
this.add(btn_multi);
this.add(btn_div);

これだけです。

足し算ができたのだからほかの演算も同じことをすればいいだけです。

1.
private Button btn_culc; // +ボタン

↑を四則演算分追加する。
private Button btn_minus; // -ボタン
private Button btn_multi; // *ボタン
private Button btn_div; // /ボタン

2.
btn_culc = new Button("=");
// ボタンのイベント処理を定義
btn_culc.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
// txt_Aに入力された値 + txt_Bに入力された値を計算
int intAnswer...続きを読む


このカテゴリの人気Q&Aランキング

おすすめ情報