teratail header banner
teratail header banner
質問するログイン新規登録
servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

解決済

1回答

1885閲覧

HTTPステータス 405 - Method Not Allowedが出てこまっています。

退会済みユーザー

退会済みユーザー

総合スコア0

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

0クリップ

投稿2019/08/30 11:25

編集2019/08/31 01:09

0

0

「はじめてのJSP&サーブレット」をEclipse4.6を使って勉強しています。
同じ著者によるコードがネット上にあります。
リンク内容

サーブレットとJSPファイルを連携して、データベースを検索表示して、
変更処理、新規登録、削除などをできるTODO管理アプリケーションを作成しています。
MariaDB,HediSQLを使っています。構成は以下の通りとなっており、
必要なファイルはリンクを参照していただければ幸いです。
イメージ説明
となっています。

DetailServlet.java, InputServlet.java,SearchServlet.java、は正常に実行されます。

InputServlet.javaを実行し、新規に登録をしてエンターで RegisterServlet.javaが実行されて正常(文字化けありますが)に表示されます。

RegisterServlet.javaを単独でEclipseで実行するとHTTPステータス 405 - Method Not Allowedが出て困っています。
それでprotected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
メソッド(ネットを参考に)を後のほうに追加して実行しました。
ブラウザははhttp://localhost:8080/10_todo_400_405/todo/registerという表示で、
白い画面で何も表示されていませんが、エラーは消えました。
一昨日までは、何か画面に表示されていたような気がします。間違っているのか、これで正常なのかわからないので、教えていただきたいのですがよろしくお願いします。

//RegisterServlet package todo.web; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import todo.dao.TodoDAO; import todo.dto.Todo; /** * 登録処理を行う。 */ @WebServlet("/todo/register") public class RegisterServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // リクエストパラメータを受け取り、DTOに格納する準備をする。 int id = Integer.parseInt(request.getParameter("id")); String title = request.getParameter("title"); String task = request.getParameter("task"); String inputLimitdate = request.getParameter("limitdate"); String userid = request.getParameter("userid"); int status = Integer.parseInt(request.getParameter("status")); // DTOへ格納する。登録される期限(limit)はTodoクラスではinputLimitになる。 Todo dto = new Todo(); dto.setId(id); dto.setTitle(title); dto.setTask(task); dto.setInputLimitdate(inputLimitdate); dto.setUserid(userid); dto.setStatus(status); // 入力チェックを行う。 boolean checkResult = dto.valueCheck(); // もし入力チェックエラーがあった場合は、エラーメッセージを表示し、再入力させるため元の詳細画面へ戻る if (! checkResult ) { request.setAttribute("errorMessages", dto.getErrorMessages()); // タスク1件のvoをリクエスト属性へバインド request.setAttribute("dto", dto); // 詳細画面を表示する RequestDispatcher rd = request.getRequestDispatcher("/detail.jsp"); rd.forward(request, response); return; } String message = ""; try(TodoDAO dao = new TodoDAO()) { // 更新または登録処理を行う // idが0のときは新規登録、id>=1のときは更新 if (id == 0) { dao.registerInsert(dto); message = "タスクの新規登録処理が完了しました。"; } else { dao.registerUpdate(dto); message = "タスク[ " + id + " ]の更新処理が完了しました。"; } setMessage(request, message); } catch (Exception e) { throw new ServletException(e); } // 登録完了→一覧画面を表示する RequestDispatcher rd = request.getRequestDispatcher("/todo/search"); rd.forward(request, response); } /** * JSPで表示するメッセージを設定する。 * * @param request * サーブレットリクエスト * @param message * メッセージ文字列 */ protected void setMessage(HttpServletRequest request, String message) { request.setAttribute("message", message); } }
//InputServlet.java package todo.web; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import todo.dto.Todo; /** * 新規登録の入力画面を表示する。 */ @WebServlet("/todo/input") public class InputServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // voの作成 Todo dto = new Todo(); // 新規登録であることを判別するためid=0としている。 dto.setId(0); // タスク1件のvoをリクエスト属性へバインド request.setAttribute("dto", dto); // 詳細画面を表示する RequestDispatcher rd = request.getRequestDispatcher("/detail.jsp"); rd.forward(request, response); } }
HTTPステータス 405 - Method Not Allowed Type ステータスレポート メッセージ HTTPのGETメソッドは、このURLではサポートされていません。 説明 The method received in the request-line is known by the origin server but not supported by the target resource

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

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

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

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

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

m.ts10806

2019/08/30 12:06

>以前同じような症状で質問しているんですが その質問のURLをご提示ください。 同様のものかどうかは提示されないことには判断できません。
退会済みユーザー

退会済みユーザー

2019/08/30 13:08

すみません。うまく動きました。あとで修正します。RegisterServlet_402.javaを単独でテストするとエラーになるんですが、今から仕事です明日修正と質問をさせていただきます。
m.ts10806

2019/08/30 22:39 編集

経緯を自身で回答として、いったんこの質問は自己解決として置いてください。
退会済みユーザー

退会済みユーザー

2019/08/31 00:48

わかりました。
退会済みユーザー

退会済みユーザー

2019/08/31 00:49

単独のテストはこれでいいんですかね。
m.ts10806

2019/08/31 00:51

単独のテストと言うのがどのように実行されてるのかわからないです。 あと_402のように数字をつけているのは何でしょう。そのようなファイル名ではないと思いますけど
退会済みユーザー

退会済みユーザー

2019/08/31 00:56

すみません。参考書のページを入れていましたが、すべて参考書の通り変更しました。まだあちこち解らないところがありますので、また質問させていただきます。
m.ts10806

2019/08/31 01:04

紛らわしいのでやめたほうがいいですね。 回答者はその参考書よりも現在のコードから判断するので(ほとんどの場合、書籍みながら回答することはないです。回答者となると参考書通りにそのまま打つこともないので)
退会済みユーザー

退会済みユーザー

2019/08/31 01:14

コードを必要な分入れると10000を超えるのでこのようにしたんですが、おしゃるとおりです。 RegisterServlet.javaのテストの方法と、実行結果が間違ってないかしりたいのですが、 教えていただきませんか。
guest

回答1

0

ベストアンサー

DetailServlet_396.java, InputServlet_398.java,SearchServlet_377.java、は正常に実行されます。

InputServlet_398.javaを実行し、新規に登録をしてエンターで RegisterServlet.javaが実行されて正常(文字化けありますが)に表示されます。

RegisterServlet.javaを単独でEclipseで実行するとHTTPステータス 405 - Method Not Allowedが出て困っています。
それでprotected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
メソッド(ネットを参考に)を後のほうに追加して実行しました。
ブラウザははhttp://localhost:8080/10_todo_400_405/todo/registerという表示で、
白い画面で何も表示されていませんが、エラーは消えました。
一昨日までは、何か画面に表示されていたような気がします。間違っているのか、これで正常なのかわからないので、教えていただきたいのですがよろしくお願いします。

投稿2019/08/31 00:49

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問