- PR -

applet とservlet間通信に関して

1
投稿者投稿内容
未記入
会議室デビュー日: 2004/03/19
投稿数: 5
投稿日時: 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オブジェクトの引数をサーブレットと認識していないような感じが
します。どなたか解決策をご存知の方は教えてください。お願いします。
ふーばー
大ベテラン
会議室デビュー日: 2003/06/05
投稿数: 163
投稿日時: 2004-03-19 15:36
前者は、HTML内の アプレット(class or jar)へのパスがあやしい。
後者は、パスに「Program Files」が含まれているのがあやしい。

「Program Files」とか「My Documents」などのディレクトリは使わない
というか関係しないようにするのがヘンなトラブルに巻き込まれないための
防御策です。(今回のはこれじゃないかもしれませんが)
JW
常連さん
会議室デビュー日: 2004/01/14
投稿数: 49
投稿日時: 2004-03-19 18:19
引用:

未記入さんの書き込み (2004-03-19 15:30) より:
 Tomcatプロジェクトで作成したプロジェクト(プロジェクト名 Test)
 下のWebINF/srcの下のデフォルトパッケージ下にApplet、
 Servlet(TestServlet.java)を作成し、プロジェクト直下にhtmlファイル
 を置いています。Tomcatを起動させ、
http://localhost:8080/Test/TestApplet.html
のようにブラウザでアクセスしたところ、appletがうまくロードされません。



Appletのコンパイル後のクラスをWEB-INF/classes に入れてますか?
Appletのクラスファイルも、プロジェクト直下に置けばいいです。
(codebaseが変な場所を指していなければ)

引用:

  また、AppletViewerプラグインではAppletは表示されるのですが、文字入力実行
後、サーブレットを通信する時にjava.io.FileNotFoundException: C:\Program
Files\eclipse\workspace\Test\WEB-INF\classes\TestServlet
(指定されたファイルが見つかりません。)  というエラーが表示されます。



> 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
投稿数: 5
投稿日時: 2004-03-19 19:12
いろいろご助言有難うございます。
とりあえず、指摘のとおりのことをやってみます。
また、結果は後日でお知らせします。
未記入
会議室デビュー日: 2004/03/19
投稿数: 5
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)