• ベストアンサー

サーブレットの実行について

本を読んでjavaの勉強をしているのですが、本が 古いせいか、サーブレットの実行がうまくいきません。 いろいろ検索し下記サイトを参考にして、 http://www.hellohiro.com/servlet.htm まずTomcat(apache-tomcat-4.1.36)をダウンロードし、 下記のように環境変数を設定しました。 JAVA_HOME-- C:\j2sdk1.4.2_16 CLASSPATH-- .;%JAVA_HOME%lib\tools.jar PATH -- C:\j2sdk1.4.2_16\bin そしてファイルをコンパイルし、本のとおりに Tomcat下にYJKSample\06\web-INF\classesとフォルダを作成、 コンパイルしたクラスファイルをclasses内に置き、 http://localhost:8080/YJKSample/06/servlet/Sample1 と指定してみましたがうまくいきません。 ところがサイトのとおりにTomcat\webapps\examples\WEB-INF\classes 下にクラスファイルを置いて、 http://localhost:8080/examples/servlet/Sample1 と指定するとうまくいきました。 本を読み進めるにあたって、やり方がかなり違ってくるため できれば本のとおりにやりたいのですが、うまくいく方法は ないでしょうか? 何がいけないのかわからず頭を痛めています。 どなたかお知恵をいただけると幸甚です。 ちなみにOSのバージョンはWindows XP HomeEditionです。 どうぞよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • HIRSYU
  • ベストアンサー率51% (45/87)
回答No.5

Tomcat\YJKSample\06\web-INF\classes に設置するなら、<Context>のdocBase属性を絶対パスにしてみてはどうでしょう? 例) <Context path="/YJKSample/06" docBase="C:/Tomcat/YJKSample/06" debug="0" reloadable="true">

sorer38
質問者

お礼

お返事遅くなり申し訳ありません。 おかげ様で、やっと原因がわかりました。 絶対パスにしてもダメでしたが、 これをきっかけにserver.XMLでの記述を見直してみました。 すると <Context>~</Context>と囲むべきところを、 最後に</Context>をつけるのを見逃していました。 初歩的なプログラミングミスです。。 著者もこの</Context>をつけていなかったので、 惑わされてしまったようです。 試行錯誤したおかげでServer.xmlの<Context>~</Context>と web.xmlの設定が少しわかりました。 気にかけていただき本当にありがとうございました。 大変助かりました。

その他の回答 (5)

  • auty
  • ベストアンサー率58% (284/486)
回答No.6

基本的な方針を立てる必要があると思います。 ・その本をあきらめる。 ・TomcatとJavaを最新のヴァージョンにする。  以上2つの項目は、これらのソフトの更新が非常に頻繁に行われていることにより仕様が たびたび変更されており、古いものを使うことは混乱を招くことになるからです。慣れ ないうちは戸惑うばかりです。  今回特に関係するのは、invokerサーブレットに関してだと思われます。これは、初心者的 には手っ取り早く実行できるものですが、現在、非推奨となりコメントアウトされています。 引用されている様に、「web.xmlでサーブレットマッピングを行う」方法に統一したほうが よいでしょう。(若干手間はかかりますが。)   <url-pattern>/servlet/*</url-pattern> を使った呼び出し方は、あきらめることになります。  今回の成果としては、まずweb.xmlの設定の仕方をおぼえて、自分のコンテキストを作れるようになり ましょう。  今後も、ソフトの更新・仕様の変更は続きますが、経験がこれらを乗り越える助けになるでしょう。 ----------------------------- たか

sorer38
質問者

お礼

ご回答ありがとうございます。 NO.5でも回答しましたように、何とか実行できるように なりました。 調べてみましたところ、確かにTomcatとJavaそれぞれのバージョン によってサポートが違うようですね。 まだVBやSQLしか経験がないですが、この点が 他のプログラム言語よりややこしいな、と思いました。。 ごめんなさい、勉強を始めたばかりでinvokerのことについては よくわかりません。 サーブレットマッピングは今回参考にしたサイトでも 推奨されていたので勉強してみます。 今回は、本の中では <url-pattern>/servlet/*</url-pattern>で呼び出すやりかたが しばらく続くようなのでinvokerの部分をコメントアウト して使えるようにしました。 この点、気に留めておいて本が終われば元に戻すようにします。 今回xmlは初めて触れたのでまださっぱりですが、 ご指摘の通り、これからさらなる勉強が必要ですね^^; でもがんばります! 気にかけていただきありがとうございました。 この場を借りて皆様にお礼申し上げます。 今後まだわからないことがありましたらまたお知恵を 貸してくださると幸いです。

  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.4

> CLASSPATH-- .;%JAVA_HOME%lib\tools.jar これも、ありえない。 なんちゅう本じゃ??? hellohiroのサイトは、ふつうのまともなことしか書いてないよ。 ここに書かれてあるとおりに、サーブレットを配置すべきだと思うよ。 お手持ちの本は、なにしろおかしいよ、

sorer38
質問者

お礼

気にかけていただき、ありがとうございます。 確かに、hellohiroのサイトの通りにやるとすんなりと うまくいくので、 この本の説明がやはり中途半端だとは思います。 区別のためにYJKSample\06~とフォルダを作成しても うまくいかないのならあきらめて、 サイトの通り、 Tomcat\webapps\examples\WEB-INF\classesに そのまま配置して実行しようかな、と思います。。

回答No.3

TomcatはデフォルトでTomcat配下のwebappsにサーブレット等のWEBアプリケーションを配置するはずです。 あとはTomcatが自動認識してくれたようなしないような・・・ 認識してくれなかったらserver.xmlを修正で動くと思いますよ。

sorer38
質問者

お礼

ご回答ありがとうございます。 本の説明ではwebapps下にYJKSample\06\web-INF\classesと フォルダを作成し、 confフォルダのserver.xml中に <Context path="/YJKSample/06" docBase="YJKSample/06" debug="0" reloadable="true"> を加えて実行する手順なのですが・・ わざわざYJKSample\06~とフォルダを作成するのは、著者が わかりやすく区別しようと思ってのことだと思います。 (06というのも本の中での「第6章」のことですので) これでうまくいくはずがないのであれば、 Tomcat\webapps\examples\WEB-INF\classes にクラスファイルをそのまま配置して実行するしか ないかな、とは思っています。 よろしくお願いいたします。

  • HIRSYU
  • ベストアンサー率51% (45/87)
回答No.2

server.xmlの設定が抜けている可能性もありますね

sorer38
質問者

お礼

ご回答ありがとうございます。 本の通り、以下の2点を設定しましたが、かえって動かなく なったので、設定を元に戻しました。今は何も設定 していません。(サイトの通りのみにやるとうまくいきます) ・confフォルダのserver.xml中に <Context path="/YJKSample/06" docBase="YJKSample/06" debug="0" reloadable="true"> を付け加える。 ・confフォルダ内のweb.xmlの中で、invokerに関する<!--と-->を削除。 Tomcat\webapps\examples\WEB-INF\classes下に置くと うまくいくのに・・ 本の通りにやると Tomcat\YJKSample\06\web-INF\classes下に置くのですが これらはすべて自分で作成するフォルダなので、ファイルが コンパイルしたクラスファイルしかありません。 このため何かが足りないんだとは思うのですが・・

sorer38
質問者

補足

申し訳ありません、 Tomcat\YJKSample\06\web-INF\classes ではなく、 Tomcat\webapps\YJKSample\06\web-INF\classes の間違いだったので訂正致します。 これで実行しても、失敗しています。 よろしくお願いいたします。

  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.1

> Tomcat下にYJKSample\06\web-INF\classesとフォルダを作成 これは、ありえないと思う。たぶん、あなたの誤読。or,著者が大馬鹿。

sorer38
質問者

お礼

ご回答ありがとうございます。 何度も読み返してみましたが、確かに本に書かれてある通りに やっていますので、著者の設定の部分の説明が、どうも 浅いんだと思います。。

関連するQ&A