質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Q&A

解決済

1回答

4452閲覧

HTTPステータス405

chintao1224

総合スコア155

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

0グッド

0クリップ

投稿2017/01/08 05:35

編集2017/01/08 06:09

jspとサーブレットで初めてjavaとeclipseを使って作っています。
参考にしているサイトは、http://si.comp.ae.keio.ac.jp/web_app_dev_material/simple/dev_servlet/dev_servlet_login/index.htmlです。

初期の初期で躓いてしまいました。

サイトの通りに作ってみたのですが、ログイン画面まで動かすところまでなんですが、サイト上ではHTTPステータス500が出るみたいですが、なぜかHTTPステータス405が出ています。

これまで躓きまくってworkspaceの中のフォルダをリネームして、再度eclipseを起動してプロジェクトを削除して再度作り直しを繰り返しています。

これが原因なのでしょうか?
残骸が残っているのでしょうか?

サイトのようにHTTPステータス500を出した後、ログイン画面を表示したいです。

どうすれば良いでしょうか?

コードはサイトと全く同じです。

よろしくお願いします。

Todoの部分をAppに変えていました。

AppServlet.java

1package app; 2 3import java.io.IOException; 4 5import javax.servlet.RequestDispatcher; 6import javax.servlet.ServletException; 7import javax.servlet.http.HttpServlet; 8import javax.servlet.http.HttpServletRequest; 9import javax.servlet.http.HttpServletResponse; 10 11/** 12 * TODO管理をおこなうサーブレット。 13 * (ログイン画面のみ) 14 */ 15public class AppServlet extends HttpServlet { 16 17 /** 18 * シリアルバージョンUID(おまじない) 19 */ 20 private static final long serialVersionUID = 1L; 21 22 /** 23 * JSPのベースディレクトリ。 24 */ 25 private static final String JSP_BASE = "/WEB-INF/jsp/"; 26 27 28 29 /** 30 * 構築します。 31 */ 32 public AppServlet() { 33 ; 34 } 35 36 @Override 37 protected void doGet(HttpServletRequest req, HttpServletResponse resp) 38 throws ServletException, IOException { 39 // 要求からactionパラメータを取得 40 String action = req.getParameter("action"); 41 42 String forward = null; 43 if("login".equals(action)) { 44 // ログイン画面の処理 45 // login.jspへフォワードする 46 forward = JSP_BASE + "login.jsp"; 47 }else{ 48 // 不正なアクションの場合 49 throw new ServletException("不正なリクエストです"); 50 } 51 52 // JSPへのフォワード 53 RequestDispatcher dispatcher = req.getRequestDispatcher(forward); 54 dispatcher.forward(req, resp); 55 } 56 57}

web.xml

1<?xml version="1.0" encoding="ISO-8859-1"?> 2<web-app xmlns="http://java.sun.com/xml/ns/j2ee" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 5 version="2.4"> 6 <servlet> 7 <servlet-name> 8 trans 9 </servlet-name> 10 <servlet-class> 11 app.AppServlet 12 </servlet-class> 13 </servlet> 14 15 <servlet-mapping> 16 <servlet-name> 17 trans 18 </servlet-name> 19 <url-pattern> 20 /trans 21 </url-pattern> 22 </servlet-mapping> 23 24</web-app>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

matobaa

2017/01/08 05:41

ちょっと状況がよくわからないですね。直感ですがdoGetを正しく実装できていないのかも。 ワークスペースから todoServlet.java 全体を質問にコピーしてもらえませんか。
matobaa

2017/01/08 06:30

修正ありがとうございます。EclipseのTomcat対応は何をお使いでしょうか。
chintao1224

2017/01/08 06:42

本を見て設定しました。Tomcatバージョン:バージョン6.x Tomcatホーム:C:\servletbook\apache-tomcat コンテキスト宣言モード:コンテキスト・ファイル コンテキスト・ディレクトリ:C:\servletbook\apache-tomcat\conf\Catalina\localhost あとeclipseの文字コードはutf-8にしています
_kato

2017/01/08 08:18

405エラーが発生するURLは、どんなURLでアクセスしていますか?
chintao1224
guest

回答1

0

ベストアンサー

http://localhost:8080/trans/trans
のURLで404エラーが発生するとのことですので、
ファイルが見つかっていないようです。

URLの最初の"trans"はコンテキストパスですが、
通常Tomcatのプロジェクト名で設定した名前(サンプルだと"todotest")に
なりますが、ここは正しい名前を指定していますでしょうか?

確認するには、プロジェクトのプロパティから、「Tomcat」という項目の中の
コンテキスト名の項目がそれにあたります。

2番目のtransは、コンテキスト内のURLになりますので、web.xmlに記述した
サーブレットの名前やクラス名が間違っていないか今一度確認してみて下さい。

※どうしても原因がわからなければ、サンプルのサイトのソースを全く変更せずに
試してみてはいかがでしょうか?動作が確認できてから、少しずつソースを変更して
いけばどこで、うまく動かなくなったかもわかると思います。

投稿2017/01/08 09:06

_kato

総合スコア149

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chintao1224

2017/01/08 09:28

>確認するには、プロジェクトのプロパティから、「Tomcat」という項目の中の >コンテキスト名の項目がそれにあたります。 プロパティのコンテキスト名は/transです。 >2番目のtransは、コンテキスト内のURLになりますので、web.xmlに記述した >サーブレットの名前やクラス名が間違っていないか今一度確認してみて下さい。 web.xmlはupしたのと変わりありません。 >※どうしても原因がわからなければ、サンプルのサイトのソースを全く変更せずに >試してみてはいかがでしょうか?動作が確認できてから、少しずつソースを変更して >いけばどこで、うまく動かなくなったかもわかると思います。 CDからインストールしたときインストール先を今回変えて404になったのですが、これが原因になっていることはないでしょうか?
_kato

2017/01/08 09:38

Eclipseのメニューの、"ウインドゥ" - ”設定” メニュー内の、「Tomcat」という設定の中の Tomcatホームが、Tomcatプラグインで使用されるTomcatのパスですが、 インストールされた場所とあっていますか?
_kato

2017/01/08 10:05

プロジェクトのプロパティから、「Tomcat」という項目の中の 一番下の ウェブ・アプリケーションルートとするサブディレクトリはどうなっていますか? ※これは、プロジェクトのフォルダーのどこがコンテキストルートになるかを 示しますが未指定の場合はプロジェクトフォルダの直下に"WEB-INF"フォルダが あることになります。 例えば、WEB-INFフォルダと同じ階層に、index.htmlを作成してみて、適当なhtml を書いて、http://localhost:8080/trans/index.html でアクセスするとその内容が 表示されるでしょうか? また、Tomcatを一度停止して、プロジェクトのプロパティから、「Tomcatプロジェクト」 のメニュの、「コンテキスト定義の除去」を実行後、同じく「コンテキスト定義の更新」を 実行したうえで、Tomcatを再度起動して動作確認してみて改善しないでしょうか?
_kato

2017/01/08 10:13

うまく動かない場合は、Tomcat起動時にコンソールに出力されるログを確認してみて下さい。transというプロジェクトを起動する設定が読み込まれているログが出力されているか、何か問題があった場合はエラーが出力されていたりします。 ※わからなければ、コンソールのログも可能な範囲でご開示ください。
chintao1224

2017/01/08 10:28

>プロジェクトのプロパティから、「Tomcat」という項目の中の 一番下の >ウェブ・アプリケーションルートとするサブディレクトリはどうなっていますか? /になっています。 >例えば、WEB-INFフォルダと同じ階層に、index.htmlを作成してみて、適当なhtml >を書いて、http://localhost:8080/trans/index.html でアクセスするとその内容が >表示されるでしょうか? 404が表示されます。http://localhost:8080/trans/trans/index.htmlでも404が出ます。 >また、Tomcatを一度停止して、プロジェクトのプロパティから、「Tomcatプロジェクト」 >のメニュの、「コンテキスト定義の除去」を実行後、同じく「コンテキスト定義の更新」を >実行したうえで、Tomcatを再度起動して動作確認してみて改善しないでしょうか? コンテキスト定義の除去はどこからやるのでしょうか?コンテキスト定義の更新はどこからやるのでしょうか?
_kato

2017/01/08 10:43

>コンテキスト定義の除去はどこからやるのでしょうか? 失礼しました。プロジェクトを右クリックしたメニューの中に「Tomcatプロジェクト」という メニューがあり、そのメニューを展開した中にあります。 「Tomcatプロジェクト」のメニューがない場合は、プロジェクトがそもそもTomcat プロジェクトになっていないことも考えられます。 プロジェクトのプロパティから、「Tomcat」という項目の中の一番上の、 「Tomcatプロジェクト」のチェックボックスはオンになっていますか? なっていなければ、オンにしたのち、上記のメニューが表示されるはずですので、 コンテキスト定義の除去・更新を実行してみて下さい。
chintao1224

2017/01/08 10:56

コンテキスト定義の除去とコンテキスト定義の更新をやったらできました。ちなみにhttp://localhost:8080/trans/trans?action=loginで表示されました。これをhttp://localhost:8080/TransApp/trans?action=loginにするにはどうすればよいのでしょうか?
_kato

2017/01/08 11:00

一度、Tomcatを停止して、プロジェクトのプロパティから、 「Tomcat」という項目の中の コンテキスト名の項目を「TransApp」に変更します。 もう一度、上記のコンテキスト定義の除去とコンテキスト定義の更新をして、 Tomcatを起動すると、http://localhost:8080/TransApp/trans?action=login でアクセスできるようになります。
chintao1224

2017/01/08 11:13

できました。web.xmlは変える必要はないのでしょうか?
_kato

2017/01/08 11:25

質問欄に提示された、web.xmlは、 ”こういうURLでアクセスがあった場合は、このサーブレットに処理をさせる”を書いたものです。 <servlet-mapping>タグは、"/trans"というURLの場合は、 "trans"という定義のサーブレットに処理をさせるという意味です。 "trans"という定義のサーブレットの実体は、<servlet>タグに書かれている "app.AppServlet"サーブレット(appパッケージの、AppServeletクラス)になります。 <servlet-mapping>と<sevlet>タグは、タグの中の<servlet-name>で紐づいています。 現時点で正しい動作をしている(ログイン画面が表示される)のであれば、web.xmlの設定は 問題ないということなので、変える必要はありません。
chintao1224

2017/01/08 11:37

いろいろと教えていただき非常にありがとうございました。 助かりました。 ありがとうございました。
_kato

2017/01/08 12:05

http://d.hatena.ne.jp/suusuke/20071111/1201101892 ここのページの「ソース・パス」の設定か、「ソース・パス」の設定と 同じ並びにある、JVMの設定で「デバッグモードで起動しない」にチェックが 入っていないか確認してみてはいかがでしょうか? 通常、http://localhost:8080/TransApp/trans?action=login を入力すると、AppServletのdoGetが呼び出されているはずです。 doGetの中にブレークポイントを設定してみて下さい。
chintao1224

2017/01/08 12:39

>ここのページの「ソース・パス」の設定か、「ソース・パス」の設定と >同じ並びにある、JVMの設定で「デバッグモードで起動しない」にチェックが >入っていないか確認してみてはいかがでしょうか? すみません。ここの場所が分からなくて。。。 教えてもらえないでしょうか?
_kato

2017/01/08 12:48

Eclipseのメニューの、"ウインドゥ" - ”設定” メニュー内の、「Tomcat」という設定の ひとつ下の階層に「JVM設定」や「ソース・パス」という設定項目があると思います。
chintao1224

2017/01/08 12:53

JVM設定のところはチェックされてなくて、ソース・パスのところはソースパスを自動的に算出とtransにチェックが入っています。ただそーす・パスのtransの方は使用不可になっています。
_kato

2017/01/08 13:03

その設定で問題なさそうですが、自動算出を外すと、使用不可が解除されるので、明示的に"trans"がチェックされている状態にしてみてはどうでしょうか? あと、ブレークポイントが正しく設定されているか再確認してみて下さい。 表示上設定されているように見えても正しく設定されていない場合もあります。 Eclipseを再起動、ソースを一度閉じて開きなおすなどして確認してみて下さい。
chintao1224

2017/01/08 13:33

>その設定で問題なさそうですが、自動算出を外すと、使用不可が解除されるので、明示的に >"trans"がチェックされている状態にしてみてはどうでしょうか? この設定でうまく行きました。 ありがとうございました。 もう一つだけ教えてください。 ログイン画面表示後、ログインボタンはpostでsubmitしてるんですが、デバッグでブレイクしててもdoPostが呼ばれていないみたいです。 404が出てて、/TransApp/transが利用できないみたいなエラーが出てしまいます。 trans→TransAppにしたのが原因なのでしょうか?
chintao1224

2017/01/08 19:20

htmlの問題でした。actionにappと書いていました。お騒がせしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問