- - PR -
applet とservlet間通信に関して
1
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-03-19 15:30
Appletを呼び出すHTMLファイル、Applet内でServletを指すURLオブジェクトを
生成し、Appletで入力された文字をサーブレット処理させる有る書籍のサンプル プログラムを実行させようとしています。 Apllet内で、通信先のサーブレット URL url = new URL(getCodeBase(), "TestServlet?str=" + URLEncoder.encode(inString.getText()));により生成し、引数を渡しています。 Tomcatプロジェクトで作成したプロジェクト(プロジェクト名 Test)下のWebINF/srcの下のデフォルトパッケージ下にApplet、Servlet(TestServlet.java)を作成し、プロジェクト直下にhtmlファイルを置いています。Tomcatを起動させ、 http://localhost:8080/Test/TestApplet.html のようにブラウザでアクセスしたところ、appletがうまくロードされません。 また、AppletViewerプラグインではAppletは表示されるのですが、文字入力実行 後、サーブレットを通信する時にjava.io.FileNotFoundException: C:\Program Files\eclipse\workspace\Test\WEB-INF\classes\TestServlet (指定されたファイルが見つかりません。) というエラーが表示されます。 エクスプローラーで確認したところ確かに、TestServlet .classは存在します。 ちなみに、Servlet単独のプログラムは、問題なく動作するようですが、エラーメッセージからurlオブジェクトの引数をサーブレットと認識していないような感じが します。どなたか解決策をご存知の方は教えてください。お願いします。 | ||||||||
|
投稿日時: 2004-03-19 15:36
前者は、HTML内の アプレット(class or jar)へのパスがあやしい。
後者は、パスに「Program Files」が含まれているのがあやしい。 「Program Files」とか「My Documents」などのディレクトリは使わない というか関係しないようにするのがヘンなトラブルに巻き込まれないための 防御策です。(今回のはこれじゃないかもしれませんが) | ||||||||
|
投稿日時: 2004-03-19 18:19
Appletのコンパイル後のクラスをWEB-INF/classes に入れてますか? Appletのクラスファイルも、プロジェクト直下に置けばいいです。 (codebaseが変な場所を指していなければ)
> appletviewer TestApplet.html とやって実行しているなら、getCodeBase() がローカルディスクの カレントディレクトリを指すのでそうなりますね。 # うーん、Program Files以下にEclipseをインストールしてるのか… クラスファイルの位置を調整した後、 > appletviewer http://localhost:8080/Test/TestApplet.html なら、getCodeBase()が http://localhost:8080/Test/ になるはずです。 [ メッセージ編集済み 編集者: JW 編集日時 2004-03-19 18:20 ] | ||||||||
|
投稿日時: 2004-03-19 19:12
いろいろご助言有難うございます。
とりあえず、指摘のとおりのことをやってみます。 また、結果は後日でお知らせします。 | ||||||||
|
投稿日時: 2004-03-22 13:33
ふーぱーさん、JWさん、その後、うまく行きました。サンプルでは、パスの詳細に説明
がなく、私も、Java初心者でして、パス内のディレクトリ名とパッケージ名が分かり ませんでした。 とりあえず、サンプルプログラムのとおり、パッケージ(Test)を作り、HTMLファイルはプロジェクト直下、アプレットクラスファイルはプロジェクト(プロジェクト名 Test)直下にパッケージ名と同じディレクトリ(Test)を作成し、そこに置きました。HTML内では CODEBASE = "." CODE = "Test.TestApplet.class" アプレット内では、 URL url = new URL(getCodeBase(), "/Test/servlet/Test.TestServlet?str=" + URLEncoder.encode(inString.getText())); で行いました。パッケージ名と同じディレクトリ(Test)を作成するのは、なんか気持ちが悪いので、 パッケージなし(Eclipseではデフォルトパッケージとなる)で行う場合でできないか いうことで、 CODEBASE = "." CODE = "TestApplet.class" URL url = new URL(getCodeBase(), "/Test/servlet/TestServlet?str=" + URLEncoder.encode(inString.getText())) で動作確認できました。基本的にパスの定義を知らないままやったのが問題でした。 ついでながら、JavaサーバーやAppletのディレクトリ構成に関して、参考となるHPや文献がありましたら教えていただけないでしょうか? | ||||||||
1
