• ベストアンサー

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

本を読んで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です。 どうぞよろしくお願いします。

  • Java
  • 回答数6
  • ありがとう数7

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

  • ベストアンサー
  • 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

  • サーブレットが実行できない

    似たような質問が何件かあるのですがそちらを読んでも解決できないので、質問させてください。 java servlet初心者なのですが、 http://www.hellohiro.com/servlet.htm のサイトをもとにサーブレット環境を自分のパソコンで作ろうとしています。 とりあえず ・Tomcat5.5.23をダウンロード ・http://localhost:8080でページが表示されることを確認 ・HelloWorldServlet.classを作る。 まで正常にできました。 その後、 [Tomcatのフォルダ]\webapps\examples\WEB-INF\classes にHelloWorldServlet.classをコピーし、 http://localhost:8080/examples/servlet/HelloWorldServlet  を実行したところ 404エラーが発生しました。 もともとwebappsファイル下にexamplesというファイルがなかったのですが、これは正常なのでしょうか? jsp-examplesファイルとservlets-examplesファイルがあったのでその中の \WEB-INF\classes下にHelloWorldServlet.classを入れてみたり、 webapps下に\examples\WEB-INF\classesを作って、その中にそのclassファイルを入れてみたりといろいろやってみたのですが、 まったくエラーは変わりません。 何が悪いのかわからないのですが、 何かアドバイスをいただけないでしょうか? お願いします。

    • ベストアンサー
    • Java
  • サーブレット実行について

    コンパイルしてクラスファイルをつくって、トムキャット起動してURLからhttp://localhost:8080/YJKSample06/servlet/Sample10 と入力したら↓の様な画面が出ちゃいました。 HTTPステータス 404 - /YJKSample06/servlet/Sample10 type ステータスレポート メッセージ /YJKSample06/servlet/Sample10 説明 The requested resource (/YJKSample06/servlet/Sample10) is not available. Apache Tomcat/5.5.9 Sample10クラスとSample1クラスは同じ場所にあり、Sample1の方は        いらっしゃいませ!         お選びください。          りんご          みかん          いちご みたいな感じで画面表示されます。 Sample1とSample10は同じ場所にあり、Sample10もコンパイルされてクラスができたってことはソースに間違いなかったのでは??と、思うのです。 この違いに何かご存知の事がありましたらお教えいただけたらうれしいです。 過去この様なことを経験なさってる方のアドバイスもお待ちいたしております。 どうか宜しくお願いいたします。 情報が足りないようでしたら補足させていただきます。

    • ベストアンサー
    • Java
  • サーブレットの実行について

    サーブレットの実行について http://www.hellohiro.com/servlet.htm こちらを参考しながら設定してみたのですが、 アクセスしても404エラーでページが表示されません。 Tomcatをインストールし http://localhost:8080 にてindex.jspが表示されることは確認できました。 Tomcat起動後 http://localhost:8080/manager/htmlからアプリケーションjavahelloを設定しました。 そして サーブレットファイル(A.class)を[Tomcatのフォルダ]\javahello\WEB-INF\classesの下にコピーし、 http://localhost:8080/javahello/servlet/A とブラウザにしてすると404エラーになってしまいます。 何か設定が足りていないのでしょうか? どなたか教えてください。よろしくお願いします。 環境 Windows XP Tomcat 5.5

    • ベストアンサー
    • Java
  • 全然分かりません・・

    J2SEとtomcat5.0をインストールし、C:\j2sdk1.4.2_11とC:\Tomcat5としてインストールしました。 環境変数は変数名/変数値 CATALINA_HOME/C:\Tomcat5 CLASSPATH/.;%JAVA_HOME%\lib\tools.jar;C:\Tomcat5\common\lib\servlet-api.jar JAVA_HOME/C:\j2sdk1.4.2_11 PATH/%JAVA_HOME%\bin と設定しました。 普通にJAVAなども使えてtomcatも起動できるのですが、 http://www.hellohiro.com/servlet.htmで、HelloWorldServlet.javaをDL、コンパイルしclassを作って、C:\Tomcat5\webapps\servlets-examples\WEB-INF\classesなどに置いたのですが、 http://localhost:8080/examples/servlet/HelloWorldServletを実行しても HTTPステータス 404 - /examples/servlet/HelloWorldServletのエラーとなってしまいます。 色々なサイトを回って試したのですが、http://f44.aaa.livedoor.jp/~takamura/www/tomcat.htmlのサイトを参考に、 http://localhost:8080/のTomcat Administrationからログインして説明通りにやろうとしたら、CATALINA_HOMEの間違ったうちにやってしまったのかわかりませんが、コンテキストは既に存在しています、となってしまったりしました。 そのへんはやる必要なかったのかもしれませんが、tomcat5.0の場合は、 C:\Tomcat5\conf\Catalina\localhostに、C:\Tomcat5\webapps\の中に作成した自分で決めた名前のxmlを作成したりするらしいのですが、わかりやすく解説してあるサイトはありますでしょうか・・? tomcatを起動している最中に、http://localhost:8080/に続くアドレス で自分で用意したclassとxmlから、一番簡単なサーブレットを動かしてみたいです。よろしくお願いします。

  • servlet (resin) について

    tomcatとresinって、そんなに違うのですか? resinでプログラムを動かしたいのですが、動いてくれません… tomcatの場合、webappsの下に自分の好きなディレクトリを作れば(test)その中のWEB-INF/classes にクラスファイル(TEST.class)を置けば、  http://localhost:8080/test/servlet/TEST で動きますが、resinも同じようにしようと思って、test/WEB-INF/classes/の下にTEST.java を置いて(コンパイルしてくれると聞いたのでJAVAファイルを置きました) http://localhost:8080/test/servlet/TEST を見ても、/test/servlet/TEST was not found on this server. と怒られました… どうすればいいのでしょう??

  • java servlet tomcat エラー

    サーブレット用のクラスファイルがwebページ (http://localhost:8080/examples/servlet/HelloWorldServlet) で見ることができないんですがなんででしょうか? http://localhost:8080にはアクセスできるからtomcatは正常に起動してるんですが。 ちなみにファイル HelloWorldServlet.class はtomcat 6.0\webapps\examples\WEB-INF\classesに保存してあります。 エラー内容は下記のようになっています。 ーーーーーーーーーーーーーーーーーーーーーーーーーーー HTTPステータス 404 - /examples/servlet/HelloWorldServlet type ステータスレポート メッセージ /examples/servlet/HelloWorldServlet 説明 The requested resource (/examples/servlet/HelloWorldServlet) is not available. ーーーーーーーーーーーーーーーーーーーーーーーーーーー

  • サーブレットファイル 404

    OS はWindows 8で、JDK 6 、Tomcat 6です。 今朝からサーブレットやjspのリンクを叩いても 「 ~を開くことが出来ません。インターネットサイトのレポートによるとリクエストしたアイテムが見つかりませんでした。(HTTP/1.0 404) 」 としか出なくなりました。昨日までは表示されていたんですが・・・ http://localhost:8080/で左上に猫のロゴがあるページは表示されます。 例としてSample1.javaがありますが、 アドレスはhttp://localhost:8080/自分のフォルダ/servlet/Sample1で このサーブレットファイルはC:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\自分のフォルダ\WEB-INF\classesにあります。  web.xml(C:\Users\自分の名前\Desktop\プログラム\Java基本\java_prc\YJK_ish\WEB-INFの直下に有) を確認しても <servlet> <servlet-name>Sample1</servlet-name> <servlet-class>Sample1</servlet-class> </servlet> <servlet-mapping> <servlet-name>Sample1</servlet-name> <url-pattern>/servlet/Sample1</url-pattern> </servlet-mapping> と入っています。 一応8080でバッティングさせないようにPHPで使う方のApache のサーバーもhttpd -k stopで止めておきました。 考えられる原因は何でしょうか? 他に確かめる方法は無いのでしょうか?

    • ベストアンサー
    • Java
  • TOMCATでのサーブレット環境構築

    初心者です。 Tomcat4.1を使ってサーブレットを動かしたいと思います。 manage/installを使ってWebアプリをインストールするところまではわかりました。 ディレクトリ[c:\java\test\]の配下に [WEB-INF\classes\]というディレクトリを掘って そこにtest.javaとそれをコンパイルしたtest.classがあります。 この状態で http://localhost:8080/manager/install?path=/test&war=file:c:/java/test といれ、testというwebアプリをインストールしました。 listでも確認し、登録されていました。 しかし http://localhost:8080/test/servlet/test とやっても動作しません。 HTTP 404エラーがでます。 (description The requested resource (/test/servlet/test) is not available.) 何が足らないのでしょうか?ご指示をお願いします。 できればわかりやすく解説してあるサイトとかを教えていただければありがたいです。 ちなみにサンプルではいってたexamplesのサーブレットは動作します。 環境はWindows2000です。

    • ベストアンサー
    • Java
  • Javaサーブレットを読み込んでくれません…

    現在、社内での新プロジェクトの為にJSPの研修を行っています。 開発環境 ・Windows2000 Service Pack 4 ・JDK 1.5.0_06 ・Tomcat 5.5.20 JDKとTomcatのインストールは正常に終了し、http://localhost:8080/は正常に見ることが出来ました。 その後、<Tomcat-Home>/webapps/ROOT/entryフォルダを作成し、 ・entry/WEB-INF/ ・entry/WEB-INF/classes/ 以上二つのフォルダを作成して、WEB-INFフォルダ直下にweb.xmlファイルを作成しています。 classesフォルダの中にHelloServlet.classを置き、web.xmlファイルの中身を書き換えてTomcatを再起動させてみたのですが、http://localhost:8080/entry/HelloServletとURLを打ってみても見ることが出来ません。 何か間違っているのか、設定不足なのか…教えていただければ幸いです、よろしくお願いいたします。 ************<web.xml>************ <web-app> <servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/HelloServlet</url-pattern> </servlet-mapping> *********************************

    • ベストアンサー
    • Java
  • サーブレットでコンパイルがうまくいきません。

    質問させて下さい。サーブレットでコンパイルがうまくいきません。 どうか教えて下さい。 エラーはこのとおりです。ディレクトリはC:\Program Files\Tomcat5\webapps\entry\WEB-INF 実行しました。 c:\>set classpath CLASSPATH=C:\Program Files\Tomcat5\common\lib\servlet-api.jar c:\>cd C:\Program Files\Tomcat5\webapps\entry\WEB-INF C:\Program Files\Tomcat5\webapps\entry\WEB-INF>javac src/HelloServlet.java -d classes エラー: src/HelloServlet.java を読み込めません。 エラー 1 個

専門家に質問してみよう