- ベストアンサー
web.xmlの登録について
こんにちは。 ただいまJAVAを学習中で、 http://www.atmarkit.co.jp/fjava/javatips/106jakarta018.html のサイトを参考にし、ファイルのアップロードの処理を作ろうとしています。 「サーブレットクラスの動作にはデプロイメント・ ディスクリプタ(web.xml)への登録が必須です。」 という解説があったのですが、これはどのように 設定すればよいのでしょうか? 同サイトに解説が記載されており、見よう見まねで 設定してみたのですが、うまくいきませんでした。 ファイルアップロードを実行すると 「HTTP Status 404 」エラーが表示されます。 お手数ですが、どなたかご存知の方がいらっしゃい ましたら、アドバイスよろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
-----------------引用--------------------------- なるほど、このように考えるのですね。ご指摘の通り、 classesフォルダ Lohtaフォルダ LUploadServletクラス でパッケージを切り、upload.jspのアクションの指定で、/servlet/myservletを参照するように指定しました。 -----------------引用--------------------------- えっと… もちろん、UploadServletクラスのソースファイルには package ohta; とパッケージが書いてあったのですよね? であれば、パッケージを切った階層に置くので正しいですが、 そうでなければ、classesの下で構いません。(もちろん、web.xmlも修正しないといけません。) それか、package ohota;を追記して、コンパイルし直して、パッケージの下に置くかいずれかですね。 というわけで、 クラスのパッケージ(package) 階層としてのパッケージ web.xml の3つのつじつまを合わせましょう。 -----------------引用--------------------------- またweb.xmlのデプロイしておらず、参考にしたサイトの ソースだけをコピーしたものを使用しました。 -----------------引用--------------------------- ソースファイルをコピーしたとありますが、 まんま ですか? @ITの記事を見る限りではソースのpackageは… 階層と全然違うpackageになっていましたが… -----------------引用--------------------------- warファイル等を使用する目的は、作成したWEBアプリケーションを 圧縮ファイルにして配布することであると書いてあったのですが、 これと今回のデプロイするという意味は違うのでしょうか? -----------------引用--------------------------- そうです。それが「デプロイ」です。 (と自分も思っています。) では具体的にどういうことかというと、 (…ちょっと面倒だな…) 階層を作って、jspや、クラス、web.xmlなど を配置します。 それをzip形式で圧縮して、拡張子をwarにします。 それを配布します。 で、配布の方法ですが、使用するサーバーによって違いますけど、 Tomcatなどはwebappにwarファイルを置いてTomcatを再起動すれば、 起動時にTomcatがwarファイルを解凍してくれます。 (このときにこのアプリを認識してくれるようになります。) で、ここからはちょっと厳しいこと書きます。 @ITのJava Tipsという記事はjavaの小技集みたいな感じです。 どうも質問者さんは小技集を見るよりはもっと、WEBアプリの基本から学んだ方がいいと思います。 もし使用しているサーバーがTomcatであれば、 http://www.hellohiro.com/ ↑のサーブレット編を参考にしてHello Worldから試して、(基本すぎかな?) それからjspを使ったりした方がいいと思います。 少なくとも jspA→サーブレット→jspB とある画面から入力して、その値をサーブレットで加工して、jspBに表示する。 というような簡単なものを作ってから挑戦した方がいいでと思います。 (@ITにももっと基本的な記事もありますので…。) ちょっと飛びすぎかなと。(^^;A …javaの基本は大丈夫ですよね??? 何が基本か?って聞かれると困りますが… 普通にコンパイルして、クラス作って、 実行したりとかは大丈夫ですよね??? 今までそれ前提で話してましたが… ちょっと心配になったので…。 あっ、あと最後にですが、 (もっと早く言えばよかったですが、) 自身の環境も書いておいた方が回答し易いです。 例: WindowXP SP2 Tomcat5.x J2SE1.4 などなど… それではがんばって下さい。
その他の回答 (3)
- pcbeginner
- ベストアンサー率46% (261/560)
えっと… >下記のようにweb.xmlを 記述し、「WEB-INF」フォルダの下にコピーしました。 っていうのは、サーバー単純にコピーしたのではなく、 ちゃんとwarファイル(もしくはear)を作成して、 ちゃんとデプロイした。 ということでいいですよね? 「ちゃんとデプロイした。」 という仮定で話を進めます。 <servlet-name>myservlet</servlet-name> <servlet-class>ohta.UploadServlet</servlet-class> というのは、 このアプリケーションでは ohtaパッケージのUploadServletというクラス を myservletという名前で使用します。 という意味です。 ところが、フォルダ、ファイルの構成を見ると classesフォルダの直下にUploadServletクラスがいます。 パッケージが切られていないですね…。 あと、 <servlet-name>myservlet</servlet-name> <url-pattern>/servlet/myservlet</url-pattern> というは、 myservletというサーブレットが /servlet/myservletというURLでアクセスできる。 という意味です。 ですのでupload.jspのアクションの指定が上記URLになっていますか?
補足
pcbeginnerさん、早速のご返事ありがとうございます。 なるほど、このように考えるのですね。ご指摘の通り、 classesフォルダ Lohtaフォルダ LUploadServletクラス でパッケージを切り、upload.jspのアクションの指定で、/servlet/myservletを参照するように指定しました。 この状態でアップロード処理を行うと、「HTTP Status 400又は500」 のエラーが表示されます。 またweb.xmlのデプロイしておらず、参考にしたサイトの ソースだけをコピーしたものを使用しました。 warファイル等を使用する目的は、作成したWEBアプリケーションを 圧縮ファイルにして配布することであると書いてあったのですが、 これと今回のデプロイするという意味は違うのでしょうか? 素人な質問で申し訳ございません。 丁寧なご回答を頂いているのに恐縮ですが、もう一度 アドバイスをいただけませんでしょうか。 よろしくお願いいたします。
- pcbeginner
- ベストアンサー率46% (261/560)
>同サイトに解説が記載されており、見よう見まねで 設定してみたのですが、 見よう見まねで設定したのが原因ですね。 同サイトに解説が記載されているのなら、 ここで質問する前に熟読して下さい。 その上でどういった内容が分からないのかを 質問しないと他の方も答えられないと思いますよ。 web.xmlの内容もこの場合は載せないと (他の人に見せられる部分だけで構いませんので) 具体的な回答は得られません。
補足
pcbeginnerさん、アドバイスありがとうございます。 今回別のサイト等を参考にし、下記のようにweb.xmlを 記述し、「WEB-INF」フォルダの下にコピーしました。 ------------------------------------------------- <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <servlet> <servlet-name>myservlet</servlet-name> <servlet-class>ohta.UploadServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>myservlet</servlet-name> <url-pattern>/servlet/myservlet</url-pattern> </servlet-mapping> </web-app> ------------------------------------------------- またフォルダやファイルの構成として、 ohtaフォルダ LWEB-INFフォルダ Lclassesフォルダ L UploadServlet.class Llibフォルダ Lweb.xml Lupload.jsp となっております。 この状態で、upload.jspにアクセスし、ファイルのアップロード 処理を行うと、「HTTP Status 404」のエラーが返って きます。 サーブレッドへのパスの指定方法がこれで正しいのか が疑問であります。 私の現段階のスキルでは、この状態からどこが問題が あるのかが分からなく悩んでおります。 お手数をおかけしますが、ご指摘よろしくお願いいたします。
- Bonjin
- ベストアンサー率43% (418/971)
404エラーは指定されたURLには何もないということです。要はファイルをアップロードする前の問題で、サーブレット自体を呼び出せていないってことです。 サーブレットを呼び出すには何が必要かというと、web.xmlにマッピングを定義しなければなりません。 web.xmlの書き方は検索すればたくさん出てくるので省きます。
お礼
Bonjinさん、アドバイスありがとうございます。 どの時点で問題かということがつかめました。 web.xmlにマッピングを定義については、もう一度 最初から勉強しなおしてみます。
お礼
pcbeginnerさん,的を得ない質問ばかりで申し訳ございません。 基礎の部分はある程度勉強していたのですが、サーブレッドの使い方 等の部分は、あまり勉強しておらず、今回の質問で改めて学ぶ事が できました。 最終的にうまくいかない原因は下記でした。 >もちろん、UploadServletクラスのソースファイルには >package ohta; >とパッケージが書いてあったのですよね? この部分を変更し、再度コンパイルしアップロード処理を行った 所、「HTTP Status 405 」エラーが出るのですが、 ファイルは正常にアップロードできるようになりました。 課題が残ってしまいましたが、この部分は何とかがんばって みようと思います。 ご丁寧な解答、本当にありがとうございました。