• ベストアンサー

web.xmlの登録について

こんにちは。 ただいまJAVAを学習中で、 http://www.atmarkit.co.jp/fjava/javatips/106jakarta018.html のサイトを参考にし、ファイルのアップロードの処理を作ろうとしています。 「サーブレットクラスの動作にはデプロイメント・ ディスクリプタ(web.xml)への登録が必須です。」 という解説があったのですが、これはどのように 設定すればよいのでしょうか? 同サイトに解説が記載されており、見よう見まねで 設定してみたのですが、うまくいきませんでした。 ファイルアップロードを実行すると 「HTTP Status 404 」エラーが表示されます。 お手数ですが、どなたかご存知の方がいらっしゃい ましたら、アドバイスよろしくお願いいたします。

  • Java
  • 回答数4
  • ありがとう数2

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

  • ベストアンサー
回答No.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   などなど… それではがんばって下さい。

hiromasa1119
質問者

お礼

pcbeginnerさん,的を得ない質問ばかりで申し訳ございません。 基礎の部分はある程度勉強していたのですが、サーブレッドの使い方 等の部分は、あまり勉強しておらず、今回の質問で改めて学ぶ事が できました。 最終的にうまくいかない原因は下記でした。 >もちろん、UploadServletクラスのソースファイルには >package ohta; >とパッケージが書いてあったのですよね? この部分を変更し、再度コンパイルしアップロード処理を行った 所、「HTTP Status 405 」エラーが出るのですが、 ファイルは正常にアップロードできるようになりました。 課題が残ってしまいましたが、この部分は何とかがんばって みようと思います。 ご丁寧な解答、本当にありがとうございました。

その他の回答 (3)

回答No.3

えっと… >下記のように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になっていますか?

hiromasa1119
質問者

補足

pcbeginnerさん、早速のご返事ありがとうございます。 なるほど、このように考えるのですね。ご指摘の通り、 classesフォルダ   Lohtaフォルダ      LUploadServletクラス でパッケージを切り、upload.jspのアクションの指定で、/servlet/myservletを参照するように指定しました。 この状態でアップロード処理を行うと、「HTTP Status 400又は500」 のエラーが表示されます。 またweb.xmlのデプロイしておらず、参考にしたサイトの ソースだけをコピーしたものを使用しました。 warファイル等を使用する目的は、作成したWEBアプリケーションを 圧縮ファイルにして配布することであると書いてあったのですが、 これと今回のデプロイするという意味は違うのでしょうか? 素人な質問で申し訳ございません。 丁寧なご回答を頂いているのに恐縮ですが、もう一度 アドバイスをいただけませんでしょうか。 よろしくお願いいたします。

回答No.2

>同サイトに解説が記載されており、見よう見まねで 設定してみたのですが、 見よう見まねで設定したのが原因ですね。 同サイトに解説が記載されているのなら、 ここで質問する前に熟読して下さい。 その上でどういった内容が分からないのかを 質問しないと他の方も答えられないと思いますよ。 web.xmlの内容もこの場合は載せないと (他の人に見せられる部分だけで構いませんので) 具体的な回答は得られません。

hiromasa1119
質問者

補足

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)
回答No.1

404エラーは指定されたURLには何もないということです。要はファイルをアップロードする前の問題で、サーブレット自体を呼び出せていないってことです。 サーブレットを呼び出すには何が必要かというと、web.xmlにマッピングを定義しなければなりません。 web.xmlの書き方は検索すればたくさん出てくるので省きます。

hiromasa1119
質問者

お礼

Bonjinさん、アドバイスありがとうございます。 どの時点で問題かということがつかめました。 web.xmlにマッピングを定義については、もう一度 最初から勉強しなおしてみます。

関連するQ&A

  • WebサイトとXML

    最近XMLを勉強している者です。 XMLはXSLTと呼ばれるファイルを作成することによってXML以外の言語へ変換できるのですよね。 一方、Webサイトはバージョンの違いこそあれ、基本的にはHTML(あるいはXHTML)で書かれていますよね。 疑問に思ったのですが、世の中にあるWebサイトの多くはXMLで書かれており、それをHTML(あるいはXHTML)に変換したものなのでしょうか? 私は基本的に手打ちで直接HTMLを書いて、それをアップロードしてWebサイトを作ってきたので、XML文書を作成してそれをHTMLに変換するというやり方に衝撃を覚えました。

  • jsp&サーブレットにてjpgやzip等のファイルを別フォルダにコピー&貼り付けの処理

    現在jsp、サーブレット、ビーンにて 画像ファイルやzipファイルなどをアップロードできるサイトを作成していまして、アップロードについては jakartaのfileuploadで特定のフォルダにアップロードする処理は上手くいったのですが、 アップロードしたファイルを、別のフォルダにコピー&貼り付けさせるような処理を行いたいと思っています。 java.ioについて調べてみると txtファイルの中身を読み込んだり書き込んだりする 処理しか見つける事ができず、つまずいております。 どなたかjpgやzip等を別フォルダへの 解説をしているサイトをご存知でしたら 教えていただけますでしょうか。 もしくはあのクラスを利用すれば出来る等でも 結構ですので、すみませんがご教授よろしくお願いします

    • ベストアンサー
    • Java
  • Tomcatのエラーページをカスタマイズする方法【すべてのWebアプリケーションに適用させたい】

    こんにちは。 各種サイトを見ても詰まってしまったため、質問させていただきます。 Tomcat 5.0.28を使用しています。 HTTPのエラーコードを受け取ったときに、独自のエラーページを 表示させるには、web.xmlを編集すればよいことまではわかっています。 個々のWebアプリの設定であれば、(アプリケーションルート)/WEB-INF/web.xml を編集することでカスタムエラーページを表示できました。 今回、Tomcatに配備しているすべてのWebアプリに対して、同じエラーページを表示させるつもりです。 この場合、$CATALINA_HOME/conf/web.xmlに同じような編集を 行えばよいということが下記サイトに書かれていました。 http://www.atmarkit.co.jp/fjava/javatips/064container011.html ここで問題なのが、web.xmlで <error-page> <error-code>404</error-code> <lcoation>/error/404.html<location> </error-page> とした場合、404.htmlはどこにおけばよいかがわからず、適切に 表示されません。 各アプリごとの場合は、アプリケーションルートの直下に errorディレクトリを作ればよいのですが・・・ conf/web.xmlに記述をした場合は、ルートはどこに おいたらよいのでしょうか。 ちなみに 1.$CATALINA_HOME/webapps/error/404/html 2.$CATALINA_HOME/webapps/ROOT/error/404.html 3.$CATALINA_HOME/error/404.html を試しましたが、いずれもうまくいきませんでした。 また1.の設定の場合、server.xmlに記述を追加して errorコンテクストを配備しています。 <Context path="/error" docBase="error" ....> 基本的な質問かもしれませんが、何卒よろしくお願いします。

  • Eclipseにおけるサーブレット作成時のエラー(TOMCAT)

    JAVA初心者です。非常に困っておりどうしてよいのかわかりません。よろしくお願いいたします! eclipseにてサーブレットを作成したのですが、実行ができません。 ---------- 環境 OS:Windows2000Server Eclipse ver2.1.1 TOMCAT ver4.1 プロジェクト名Sample 実行ファイルHelloSrvlet.java ---------- "web.xml"をエクリプスのプロジェクト下のWEB-INFに作成した場合に『HTTP Status 404』エラーが表示されてしまいます。 servlet.xmlにも<context・・・と設定はしております。web.xmlを作成しなかった場合にはadmin上でSampleがありディレクトリ構成も見えるのですが、作成するとディレクトリ構成も見えなくなります。何が悪いのかすらわからない状況です。 どなたか教えて下さい!

    • ベストアンサー
    • Java
  • XML-RPCでのブログ投稿で画像ファイルを指定のフォルダへアップロードする方法は?

    XML-RPCでのブログ投稿で画像ファイルを指定のフォルダへアップロードする方法は? 現在ブログをMovableTypeで構築して、XML-RPC経由でブログを投稿しているのですが、 同時に画像もアップロードするのですが画像ファイルを指定のフォルダへアップロードする事は可能なのでしょうか? XML-RPC経由でアップロードするソフトを使っているのですが、開発元に質問したところ 「XML-RPC経由でアップロードするだけなので、ソフト側の設定よりMT(MovableType)側での設定で解決できるはずです。」 との事でいろいろと調べてみたのですが結局分からずじまいで質問させて頂きました。 ■質問===== ・サーバー側の設定(MT側)で問題は解決できるのでしょうか? ・またソフト側で指定することは可能なのでしょうか? ============================ またどのようにしたら良いのか教えていただけないでしょうか?

  • アップロードしたがウェブブラウザにサイトが出ない

    携帯サイト作成ツール楽造2を、使いサイトを、作成してるのですが、アップロードする際にhttp404ファイル未検出と出てしまいます。レンタルサーバーは、joeswebhostingを使用しています。ffftpもインストールしてホストの設定も問題ありませんでした。データ通信AIREDGEで、作業してるので、特別な設定が必要でしょうか?どうすれば、設定したURLで、ウェブ上にサイトが、公開されるのでしょうか?教えてください。

  • web.xmlの記述

    web.xmlに次の記述をしていると、normal権限のユーザでログインするとHTTP Status 403に飛んでしまいます。 ~ <security-constraint> <web-resource-collection> <web-resource-name>Certification Area for admin</web-resource-name> <url-pattern>/f.html</url-pattern> <url-pattern>/a.html</url-pattern> <url-pattern>/c.html</url-pattern> <url-pattern>/n.html</url-pattern> <url-pattern>/s.html</url-pattern> <url-pattern>/サーブレット</url-pattern> ~ </web-resource-collection> <auth-constraint> <role-name>admin</role-name> </auth-constraint> </security-constraint> <security-constraint> <web-resource-collection> <web-resource-name>Certification Area for normal</web-resource-name> <url-pattern>/f.html</url-pattern> <url-pattern>/s.html</url-pattern> <url-pattern>/サーブレット</url-pattern> ~ </web-resource-collection> <auth-constraint> <role-name>normal</role-name> </auth-constraint> </security-constraint> <login-config> <auth-method>FORM</auth-method> <form-login-config> <form-login-page>/auth.html</form-login-page> <form-error-page>/error.jsp</form-error-page> </form-login-config> </login-config> ~ 環境 WindowsXP Home Edition Tomcat4.1.36 MySQL4.0.26 mysql-connector-java-3.1.13-bin.jar 検索もしていますが、どれも解決に結びつきません。 原因、解決法が分かる方は、ご教示ください。

  • Googleウェブマスターツール

    Googleウェブマスターツールへ XMLサイトマップを登録する為、 sitemap.xmlを作成しました。 ただ、私が利用している携帯サイト構築サービスでは、 xmlファイルを、サーバーにアップロードすることができません。 このような状況の場合、サイトマップをGoogleに登録することは 不可能なのでしょうか。 何かほかの方法があればおしえてください。

    • ベストアンサー
    • SEO
  • Web サイトにあるxmlファイルを更新する方法を教えてください。

    開発環境: Visual Studio .NET 2003 .NET Framework 1.1 言語: C# Web サイトにあるxmlファイルを更新する方法を教えてください。 自作クラスに保持した情報をシリアライズ・デシリアライズしxmlファイルで保存しようとしています。 シリアライズでxmlファイルを更新するのが上手くいきません。 ローカルPCでテストした結果は上手く動作しますが、Web サイトでテストするとエラーが出ます。 エラー内容は、 System.ArgumentException : ストリームに書き込めませんでした。 ===ソースコード始=== //URLを取得する Uri myUri = new Uri ("http://www.**********/test.xml");//URLを指定 XmlUrlResolver resolver = new XmlUrlResolver(); //XmlSerializerオブジェクトを作成 //書き込むオブジェクトの型を指定する System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer( typeof(MyData));//MyDataはオブジェクトの型 //ファイルを開く System.IO.Stream fs = (System.IO.Stream)resolver.GetEntity(myUri, null, typeof(System.IO.Stream)); //シリアル化し、XMLファイルに保存する serializer.Serialize(fs, d_MyData);//d_MyDataはオブジェクト *ココでエラーが出ます。 ===ソースコード終=== Web サイトでのフォルダ権限はフルコントロールに設定しています。

  • googleのサイトマップの拡張子はxmlでないとだめ?

    googleのサイトマップを作って、ウェブマスターツールから 送信したいのですが、サイトマップの拡張子はxmlでないとだめなのでしょうか?。 サーバーにアップロードできるファイルの拡張子が html jpg gif しかだめなところなので、困っています。

専門家に質問してみよう