- ベストアンサー
Tomcatでプログラムが動作しません。
Apache tomcatの事なのでオープンソースかこちらにご相談させていただこうか悩みましたがこちらにさせていただきました。 開発環境: Windows XP SP3 Professional java 2 SDK 1.5.0_16 Jakarta Tomcat 5.5.26 です。 現在javaのservletとJSPをtomcatで勉強している者です。 http://www.javaroad.jp/opensource/index.html#tomcat http://www.thinkit.co.jp/cert/article/0708/2/6/2.htm http://www.javadrive.jp/servlet/index.html などを参考にしてTomcatを使い自分で作成したservletやJSPを動作させようとしたのですが 404エラー(存在しないファイル)が排出されるだけで実行できません。 試しに上記のページが提供しているプログラムやweb.xml及びservlet.xml(javaroad.xml)を 配備しましたが404エラーが排出されるだけで動作しません。(編集するたびにTomcatを再起動させています) http://localhost:8080/のトップページとROOTフォルダに上記のサイトのJSPを配備したものは 表示されますのでtomcatは動作していると思いますが、残念ながらどこが間違っているのか検討がつきません。 似たような事例に http://questionbox.jp.msn.com/qa1321207.html?StatusCheck=ON という物を見つけました。 同じように「JSP Examples」と「Servlet Examples」は404エラーが排出されます。 どのようにすれば宜しいのでしょうか、どうかご教授願います。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 ace_getさんが作成したServletも動作したと言うことで 最初の質問は解決したようですね。 よかったです。 さて、以下ですが >その他のサーブレット(XMLに定義していない)は実行できませんでした。 結論から言うと、残念ながらweb.xmlに記述しないと動作しません。 持っている本にも載っていると思いますが、 ServletとURLパターンの紐付きはweb.xmlで定義するので、 web.xmlで定義していないものは実行されません。 でも、ace_getさんが思うようにいちいち定義しては面倒ですよね。 そこで、各画面毎のロジックを定義したクラスを別に用意し、 Servletは主にそれらのクラスを呼び出すことを行うようにします。 この特定のServletのみをweb.xmlに定義するようにすることで この煩雑な作業を軽減するようにします。 ウェブアプリケーションを作成していくとわかりますが、 いろいろ煩雑な作業がでてきます(入力チェック、エラー処理とか・・・)。 なので、通常はフレームワークと呼ばれるものを利用し、これらの処理を任せて、 我々は実際にやりたいロジックのみを記述するようにします。 っと、これはもう少しいろいろやっているとわかってくると思います。 次に、 >お勧めの本(Linuxに対応していればいいのですが)を教えていただければ幸いです。 Amazonで「サーブレット はじめて」や「サーブレット 入門」で検索してら何冊かでてきました。 これらでよいと思います。 あとは、ace_getさんのやりたいことに合致する内容の本を確認して購入すると良いと思います。 ちなみに、だいたいJavaの開発を行うときは統合開発環境を利用すると思います。(私はEclipseを使っています。) これを利用すれば、簡単に開発ができるのでこの説明が載っている本が良いかもしれないですね。 っま、最近の入門書は一通りのものはCDに同封されていると思いますが。 具体的にこの本!とは言えないですが少しでも参考にしてもらったらと思います。 では、頑張ってください。
その他の回答 (6)
- musawa
- ベストアンサー率33% (1/3)
すみません、割り込むようであれなんですが↑のxmlにいちいち記述しない方法というのは昔のinvoker設定のような物でしょうか? とりあえず下のようにweb.xmlに記述すれば http:/localhost:8080/ルートディレクトリ/servlet/classesに配置したクラス名 でマッピングしなくても作動するように出来ます。 大元はconf内のserver.xmlで下と同じようなものがコメントアウトしてありますので、そちらを弄ってみても良いかもしれません。 <servlet> <servlet-name>invoker</servlet-name> <servlet-class> org.apache.catalina.servlets.InvokerServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>invoker</servlet-name> <url-pattern>/servlet/*</url-pattern> </servlet-mapping>
補足
invokerの設定は http://www.thinkit.co.jp/cert/article/0708/2/6/2.htm にあるように一旦解除しなくてはならないのでしょうか。 詳しく教えていただけるとうれしいです。
- 1qaz_2wsx
- ベストアンサー率100% (3/3)
こんばんは、jspが動作したみたいですね。よかったです。 さて、Servletが動作しないと言うことですが、 どのようなURLを指定しましたか? URL(のパターン)とServletの紐付はweb.xmlに定義しますよね。 web.xmlの定義がANo.2の回答で記述しているとおりだとすると、 以下のURLで対象のサーブレットが動作すると思いますがどうですか? http://localhost:8080/javaroad/Hello さて、ace_getさんはjavaを勉強しようとしている心意気は高く評価しますが、 勉強方法を効率のよいものにしたほうが良いと思いますよ。 ace_getさんの周りにJavaを理解している人がいるのなら、 Webのサイトを便りに勉強してもよいかもしれないですが、 誰も教えてくれる人がいないなら、 入門書を購入し、まずは本に記述されている通りに実装してみるところから始めるとよいと思います。 一番初めは全てがわからないと思うので、 サイトで勉強していると情報が古かったりして、無駄に時間がかかったりします。 ある程度、知識がついてくると判断がつくのですけどね。 本1冊読み切ったときには、自分が何で悩んでいるかが分かるようになるので こういう場に質問するときでも、すぐにレスがついて解決すると思います。 頑張ってくださいね。
補足
ご指摘のとおり http://localhost:8080/javaroad/Hello でHelloServletは実行できましたが、 その他のサーブレット(XMLに定義していない)は実行できませんでした。 できれば、テストとしてXMLに定義しない方法でも実行できればいいのですが 教えていただけないでしょうか。(dogetを使ってます<servlet-apiのパッチは定義済み>) また、本なのですが購入した本が古いらしく実行環境がtomcat4.0.6の物を購入してしまいました。 tomcat5.5.Xの物を探していますが見つかりませんでした、 厚かましいお願いですが、できれば、 お勧めの本(Linuxに対応していればいいのですが)を教えていただければ幸いです。 ちなみにApacheの本は持っています。
- 1qaz_2wsx
- ベストアンサー率100% (3/3)
こんにちは。JSP Examplesサンプルが動作したようでひとまずよかったですね。 さて、前回コンテキストの設定ファイルの定義方法が間違っていますよと明記しました。 これもうろ覚えですが、コンテキストの設定ファイルのdocBase属性に webappsディレクトリ内に配置しているものを指定するとエラーになったと記憶しています。 webappsディレクトリに直接アプリケーションを配置する場合、conf\Catalina\localhostに コンテキストの設定ファイルは必要ありません。 現在、私の指示通りにしているならば、 C:\Program Files\Apache Software Foundation\Tomcat 5.5\conf\Catalina\localhostには Javaroad.xmlがないと思いますので、 今の状態で、Tomcatを起動させるとwebapps内にあるJavaroadアプリケーションが起動されると思います。 どうでしょうか? なんらかの設定が間違っていたとしても、404ではなくなるはずです。
補足
はい、 C:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps\javaroad\jspdir にあるJSPファイルは動くようになりましたが javaroad\WEB-INF\classes のclassファイルは404エラーが排出されます。
- 1qaz_2wsx
- ベストアンサー率100% (3/3)
こんにちは。1qaz_2wsxと言います。 まずは、JSP Examplesを動作させるところからはじめませんか? その後に、ace_getさんが作成したものの動作を確認しましょう! まず、ace_getさんが作成したJavaroad.xmlの指定は間違っています。 たぶんTomcat起動時のJavaroadアプリをロードするところでエラーになっていると思います。 とりあえず、C:\Program Files\Apache Software Foundation\Tomcat 5.5\conf\Catalina\localhostの Javaroad.xmlを削除するか、退避してください。 (※どこが間違っているかは次回の回答で説明しますね。) 次に、jsp-examplesアプリケーションが以下のディレクトリにあるか確かめてください。 C:\Program Files\Apache Software Foundation\Tomcat 5.5\wabapps配下に "jsp-examples"のディレクトリは存在しますか? おそらく、存在していないのではないですか? このjsp-examplesはexe形式のTomcatには同封されていなかったように思います(・・・うろ覚え)。 Tomcatは以下のサイトから取得したと思いますが、 http://tomcat.apache.org/download-55.cgi exe形式のTomcatを取得し、インストールしたのではないでしょうか? zip形式のTomcatを取得すると、jsp-examplesが同封されていますので、 これを、C:\Program Files\Apache Software Foundation\Tomcat 5.5\wabappsに配置してみてください。 Tomcatを起動後に http://localhost:8080/jsp-examples/ にアクセスすると"JSP Samples "のページが表示されるのではないでしょうか?
補足
返事が遅れて申し訳ありません。 ご指南のとおりに致しましたところ、JSP Sampleが表示されました。
- HIRSYU
- ベストアンサー率51% (45/87)
server.xmlやweb.xmlの中身と場所(Path) 後は、表示させたいJSPとServletの場所(Path)など提示してはどうでしょうか? 情報不足のために憶測で答えるしかできませんので。
補足
私が見たサイトではTomcat5.0以降はservler.xmlは変更せずに C:\Program Files\Apache Software Foundation\Tomcat 5.5\conf\Catalina\localhostに Javaroad.xmlというファイルを作成するとありましたのでそうしました。 内容: <Context path="/javaroad" docBase="C:\Program Files\Apache Software Foundation \Tomcat 5.5\webapps\javaroad" reloadable="false"/> 次にC:\Program Files\Apache Software Foundation\Tomcat 5.5\webappsに javaroadというディレクトリを作ります。 その直下にWEB-INFというディレクトリを作り、そこに以下のweb.xmlを作成しました。 内容: <?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <servlet> <servlet-name>Hello</servlet-name> <servlet-class>HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Hello</servlet-name> <url-pattern>/Hello</url-pattern> </servlet-mapping> </web-app> 表示させたいディレクトリなどは作成した際に参考にしたサイトの引用で説明いたします。 1. C:\Program Files\Apache Software Foundation\Tomcat 5.5\wabapps配下に、ルートディレクトリjavaroadを作成します。 2. ルートディレクトリ配下にJSPファイルを格納するディレクトリjspdirを作成し、HelloJsp.jspファイルを設置します。 3. ルートディレクトリ配下にWEB-INFディレクトリ、その配下にclassesディレクトリ、libディレクトリを作成します。 4. classesディレクトリにHelloServlet.javaをコンパイルしてできたHelloServlet.classファイルを設置します。 5. WEB-INFディレクトリ配下にweb.xmlファイルを作成します。 この際に作成したJspdirディレクトリに作成したHelloJsp.jspと classesディレクトリにHelloServlet.classを作動させたいのです。 また、テスト時に作成したclassファイルをweb.xmlにイチイチ記述せずにテストを行いたいです。
- ttschool
- ベストアンサー率28% (18/64)
Tomcatのバージョンが違うだけで、配置するファイルのディレクトリが違います。 あなたのバージョンにあった、サイトでもう一度確認してください。
補足
仰るとおり検索を行い何度も同じようにTomcat 5.5を紹介している サイトを参考に設定しておりますがいっこうに自分で作ったフォルダに アクセスしても404と返ってくるだけです。 Googleで検索して得たサイトを参考にしましたが結局解決いたしませんでした。
補足
せっかく回答していただいたのに申し訳ないのですが、 少し遠出をして本屋さんに行ってみたところ ソフトバンククリエイティブの「基礎からのサーブレットServlet/JSP 改訂版」 と言う本を買いました。 環境もTomcat5.5.20とのことで決定しました。 Eclipseなどの統合開発環境にも対応しているとの事ですので これをバイブルにしようと思います。