みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

『Eclipse 3.5 完全攻略』という本で学習途中なのですが、Se

『Eclipse 3.5 完全攻略』という本で学習途中なのですが、Servletで行き詰まってしまいました。
どなたかアドバイスをお願いいたします。

<エラー内容>
http://localhost:8080/myweb/
にアクセスしても404エラーです。
「The requested resource (/myweb/) is not available.」
といわれてしまいます。


<環境>
Eclipse 3.5
Tomcat 6.0
Workspace:CATALINA_HOME/webapps
Tomcatプロジェクトです。
プロジェクト名はmywebです。

<実行させたいjavaのファイル>
WEB-INF/srcにあります。
パッケージはhoge
クラス名はMyServlet
なので、ソースはhoge.MyServlet.java
です。

package hoge;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyServlet extends HttpServlet{

  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
      // TODO 自動生成されたメソッド・スタブ
      super.doGet(req, resp);
      resp.getWriter().println("hello");
  }
}





<Web.xml>
WEB-INF直下にあります。


<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   version="2.5">

  <servlet>
    <servlet-name>mysrv</servlet-name>
    <servlet-class>hoge.MySertvlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>mysrv</servlet-name>
    <url-pattern>/mysrv</url-pattern>
  </servlet-mapping>

</web-app>


よろしくお願い致します。

投稿日時 - 2010-05-27 21:19:17

QNo.5926499

困ってます

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

>よろしければ、設定の間違いそうなところなどを教えて頂ければ幸いです、

servlet-mappingをどれだけ整然とするかで、404エラーの回数は減らせるんじゃないかと思います。

Murachの教科書では、サーブレットクラスの名前をつける時に、
「動詞(の類型)」+「名詞」+"Servlet"
というふうに、そのクラスが
「名詞」を「動詞」する、Servletクラス
であることを明確化する命名法が用いられています。

例:
パッケージ名:email
(動詞)AddTo、 (名詞)EmailList → クラス名:email.AddToEmailListServlet

サーブレット名は、クラス名からパッケージ名をとります。
 → サーブレット名:AddToEmailListServlet

url-patternは、サーブレット名から末尾のServletをとり、先頭を小文字にしてアプリケーションルート'/' をつけます。
 → url-pattern:/addToEmailList

こういう名前の付け方を習慣化しておけば、呼び出す名前でミスする確率は減るんじゃないかと思います。

<!-- the definitions for the servlets -->
<servlet>
<servlet-name>AddToEmailListServlet</servlet-name>
<servlet-class>email.AddToEmailListServlet</servlet-class>
</servlet>

<!-- the mapping for the servlets -->
<servlet-mapping>
<servlet-name>AddToEmailListServlet</servlet-name>
<url-pattern>/addToEmailList</url-pattern>
</servlet-mapping>


あと、

http://localhost:8080/myweb/

の形でもアクセスするには、デフォルトのHTMLファイルをアプリケーションルートの下に配置し、web.xml内で welcome-file として定義する方法が用いられます。

<!-- other configuration settings for the application -->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>

投稿日時 - 2010-05-28 22:45:32

お礼

ありがとうございます。
問題も解決しました。

命名規則についても、悩んでいたので、参考になりました。

原因は、読み込むJREや、環境変数を再設定して、web.xmlも書き換えましたが、
そのとき、パソコンを再起動して、新しい環境でプロジェクトを作り直して、
Tomcatを再起動していなかったため、結果として、状況が変化しても、画面に変化が
現れなかったのに気づいていなかったのが一点。

プログラムを作る際、オーバーロードする関数doGet()をEclipseに作ってもらったところ
最初にsuper.doGet(req, resp)をしていて、そのメソッドが許可されていないため、
405エラーがでていたことが一点。

計、二点でした。

投稿日時 - 2010-05-29 13:25:05

このQ&Aは役に立ちましたか?

12人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

http://localhost:8080/myweb/
>にアクセスしても404エラーです。

http://localhost:8080/myweb/mysrv
にアクセスするように書いてないですか?

あの本(私は前の版の3.4の方を持ってます)は、ServletやJSPについて分かってから、Eclipseの詳細について知るために読むのならばいいのですが、あの本でServletやJSPについて勉強するのは良くないです。
木の幹について述べずに、枝葉末節のテクニカルなところからいきなり入っていくので、ServletとJSPの全体像が見えてきません。

それから、Tomcatプラグイン使わずに、WTPを使いましょう。
http://okwave.jp/qa/q5915704.html

Tomcatプラグイン使うと、reload="true" にしても、サーブレット変更時に必ずしも自動リロードしてくれなくて、いちいちツールバーの「Tomcat起動」アイコンをクリックしてTomcatを再起動する事になりますが、あんなバカバカしい作業に時間と労力をかけるべきではありません。

WTPを使えばTomcatを再起動せずとも変更結果が自動的に反映されるので、Tomcatをいちいち再起動して時間を浪費するようなバカバカしい事をしないで済みます。

投稿日時 - 2010-05-27 23:06:29

お礼

ご解答ありがとうございます。

http://localhost:8080/myweb/mysrv
>にアクセスするように書いてないですか?

そのとおりです。失礼しました。

WTPの情報ありがとうございました。
WTPではプロジェクトの作成はあっという間にうまくいきました。
今後は、WTP使っていきたいと思います。

ただ、今回は、初心者なりに、
純粋にサーブレットのみを動かして見たいと思って、質問させて頂きました。
よろしければ、設定の間違いそうなところなどを教えて頂ければ幸いです、

投稿日時 - 2010-05-28 06:56:27

ANo.1

Tomcatに対する設定が、mywebになっていないのだと思います。

投稿日時 - 2010-05-27 21:53:07

お礼

アドバイスありがとうございます。
具体的にどの様な設定が間違っていそうですか?
教えて頂ければ、助かります。

投稿日時 - 2010-05-28 06:58:10

あなたにオススメの質問