🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

servlet

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

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

解決済

2回答

6651閲覧

HTTPステータス 405が出てしまう

porpora_0316

総合スコア37

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

servlet

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

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

0クリップ

投稿2019/10/28 05:15

編集2019/10/28 05:41

jspとサーブレットの連携の勉強をしているのですが、405エラーが出てしまいます。

servlet

1(IndexData.java) 2 3import java.io.*; 4import javax.servlet.*; 5import javax.servlet.http.*; 6 7public class IndexData extends HttpServlet { 8 public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ 9 response.setContentType("text/html; charset=utf-8"); 10 PrintWriter out = response.getWriter(); 11 12 String view = "/WEB-INF/views/index.jsp"; 13 RequestDispatcher dispatcher = request.getRequestDispatcher(view); 14 dispatcher.forward(request, response); 15 } 16}

jsp

1(index.jsp) 2 3<%@ page language="java" contentType="text/html; charset=UTF-8" 4 pageEncoding="UTF-8"%> 5<!DOCTYPE html> 6 7<html> 8 <head> 9 <meta http-equiv="Content-Type" content="text/html" charset="UTF-8"> 10 <title>ゲーム一覧</title> 11 </head> 12 <body> 13 <h1>ログイン</h1> 14 <form action="/mywork/login" method="get"> 15 ID:<input type="text" name="id"><br> 16 パスワード:<input type="text" name="pass"><br><br> 17 <input type="submit" value="送信"> 18 </form> 19 <br><br><br> 20 <p>新規作成は<a href="/mywork/touroku">こちら</a>から!</p> 21 </body> 22</html>

上記のサーブレット・jspのリンクを押したら下記のサーブレットを呼び出すようにしたいのですが、

servlet

1(TourokuData.java) 2 3import java.io.*; 4import javax.servlet.*; 5import javax.servlet.http.*; 6 7public class TourokuData extends HttpServlet { 8 public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ 9 response.setContentType("text/html; charset=utf-8"); 10 PrintWriter out = response.getWriter(); 11 12 String view = "/WEB-INF/views/touroku.jsp"; 13 RequestDispatcher dispatcher = request.getRequestDispatcher(view); 14 dispatcher.forward(request, response); 15 } 16}

jsp

1(touroku.jsp) 2 3<%@ page language="java" contentType="text/html; charset=UTF-8" 4 pageEncoding="UTF-8"%> 5<!DOCTYPE html> 6 7<html> 8 <head> 9 <meta http-equiv="Content-Type" content="text/html" charset="UTF-8"> 10 <title>新規登録</title> 11 </head> 12 <body> 13 <form action="kakunin" method="post"> 14 ID(全角10文字):<input type="text" name="id"><br> 15 パスワード(全角20文字):<input type="text" name="pass"><br><br> 16 <input type="submit" value="送信"> 17 </form> 18 </body> 19</html>

今のままではリンクを押してもエラーとなってしまいます。

HTTPステータス 405 – Method Not Allowed
タイプ ステータスレポート
メッセージ HTTP method GET is not supported by this URL
説明 リクエストラインで受信されたメソッドは、オリジンサーバーによって認識されますが、ターゲットリソースによってサポートされていません。

Paiza Cloudを使って作成しました。
Apache Tomcat/9.0.26です。

一応405エラーについて調べましたが、formでの値の受け渡しについての答えは見つけたのですが、リンクとして貼った上でのエラーについては私の検索能力では出てきませんでした。
分かりにくいことや情報の不備などあったら申し訳ございません。

[追記]
・indexのurlはhttps://wrwrdlove.paiza-user.cloud:8080/mywork/indexです。

[web.xml] <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0" metadata-complete="true"> <servlet> <servlet-name>Login</servlet-name> <servlet-class>LoginGame</servlet-class> </servlet> <servlet-mapping> <servlet-name>Login</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping> <servlet> <servlet-name>Index</servlet-name> <servlet-class>IndexData</servlet-class> </servlet> <servlet-mapping> <servlet-name>Index</servlet-name> <url-pattern>/index</url-pattern> </servlet-mapping> <servlet> <servlet-name>Kakunin</servlet-name> <servlet-class>Kakunin</servlet-class> </servlet> <servlet-mapping> <servlet-name>Kakunin</servlet-name> <url-pattern>/kakunin</url-pattern> </servlet-mapping> <servlet> <servlet-name>Touroku</servlet-name> <servlet-class>TourokuData</servlet-class> </servlet> <servlet-mapping> <servlet-name>Touroku</servlet-name> <url-pattern>/touroku</url-pattern> </servlet-mapping> </web-app>

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

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

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

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

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

dodox86

2019/10/28 05:25 編集

「リンク」とは、index.jsp の、下のaタグのことを指していますか。 <p>新規作成は<a href="/mywork/touroku">こちら</a>から!</p>
porpora_0316

2019/10/28 05:27

はい、そちらのタグの事です。
dodox86

2019/10/28 05:33

それですと、ブラウザから "http://server/mywork/touroku"とブラウズしたのと同等です。(どうなるか、確認してみてください) "/mywork/touroku"のPATH部分を、サーブレットに結び付ける必要があるはずです。@WebServlet("/mywork/touroku") アノテーションとか。Paiza Cloudは分りませんが。 "/login" のサーブレットは呼べているのでしょうか。
porpora_0316

2019/10/28 05:38

申し訳ございません。loginのurlを少し間違えていました。 しかし、あちらも"/mywork/login"に訂正するときちんと飛べました。
dodox86

2019/10/28 05:48

普通のa hrefタグでは何かリクエストに差異が出て、ダメなのかな。(すみません、この辺明るくないです) ブラウザからいきなり"http://server/mywork/touroku" としても呼べませんか。 少し異なりますが、同じトピックの質問回答がありました。https://teratail.com/questions/149406 こちらの回答がより高度で、適切かもしれません。
porpora_0316

2019/10/28 06:08

IPアドレスが見つかりませんと出てエラーとなってしまいます。
dodox86

2019/10/28 06:10

URL中の<server>の部分は、ちゃんと該当のサーバーのアドレスにしてください。
porpora_0316

2019/10/28 06:18

サイト自体のurlがhttps://wrwrdlove.paiza-user.cloud:8080/mywork/index まずサーバー名をwrwrdloveに置き換えたら同じようにIPアドレスが見つからないと表示されました。 次にwrwrdlove.paiza-user.cloudに置き換えたらPlease use HTTPS(SSL) instead of HTTP to access the URL.と表示されました。
dodox86

2019/10/28 06:25

あー、、なるほど。Paiza Cloudの中で閉じてそうなネットのようですね。外部(家や会社のPC)からはアクセスできなさそうです。いずれにせよ言えるのは、/mywork/touroku/ とサーブレットを結び付ける設定が必要なはずです。
porpora_0316

2019/10/28 07:33

質問ばかりで申し訳ないのですが、paizacloudにかかわらず他の開発環境ではどのようにしたら/mywork/touroku/とサーブレットを結び付けられますか?
dodox86

2019/10/28 07:41

それはいくつかあると思います。設定ファイルであるweb.xmlでのマッピングとか、ソースコード上の@WebServletアノテーションとか。 Javaやサーブレット、tomcatなどの環境(バージョン)にもよると思いますが、サーブレットの環境を構築する上で必要な知識だと思います。
dodox86

2019/10/28 07:45

反対に考えると、"/mywork/touroku"と勝手に考えたPATHが、TourokuDataと言う名前のサーブレットに勝手に割り当てられたら、不思議に思えませんでしょうか。
porpora_0316

2019/10/28 07:48

一応、web.xmlでは <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0" metadata-complete="true"> <servlet> <servlet-name>Login</servlet-name> <servlet-class>LoginGame</servlet-class> </servlet> <servlet-mapping> <servlet-name>Login</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping> <servlet> <servlet-name>Index</servlet-name> <servlet-class>IndexData</servlet-class> </servlet> <servlet-mapping> <servlet-name>Index</servlet-name> <url-pattern>/index</url-pattern> </servlet-mapping> <servlet> <servlet-name>Kakunin</servlet-name> <servlet-class>Kakunin</servlet-class> </servlet> <servlet-mapping> <servlet-name>Kakunin</servlet-name> <url-pattern>/kakunin</url-pattern> </servlet-mapping> <servlet> <servlet-name>Touroku</servlet-name> <servlet-class>TourokuData</servlet-class> </servlet> <servlet-mapping> <servlet-name>Touroku</servlet-name> <url-pattern>/touroku</url-pattern> </servlet-mapping> </web-app> このように設定してありますが、web.xmlでのマッピングとはこの設定のことでしょうか?
dodox86

2019/10/28 07:59

(その設定が生きているのであれば)そうです。ご自分で書かれたのではないのでしょうか? 一応、"/touroku"とTourokuDataクラスのサーブレットは結び付いているようには見えますが。あとは、tourokuDataサーブレットが呼ばれているのか。呼ばれているのであれば、JSPへの転送 String view = "/WEB-INF/views/touroku.jsp"; RequestDispatcher dispatcher = request.getRequestDispatcher(view); dispatcher.forward(request, response); } がうまくいかず、ステータス405エラーになっているのか。getで転送しているっぽいので。
dodox86

2019/10/28 08:03

そこらあたりから調査してみると良いと思います。
dodox86

2019/10/28 08:04

とは言っても「HTTPステータス 405 – Method Not Allowed HTTP method GET is not supported by this URL」と言っているので、GETじゃ駄目よ、と言うことなのですが。
guest

回答2

0

ベストアンサー

記載されているソースコードならびにweb.xmlの設定で動作させたところ、問題なくGETメソッドで遷移し、JSPが表示されます。

Webアプリケーションが正しくデプロイされているかを確認された方が良いでしょう。
また、myworkがすでに利用されているアプリケーションなのか、ドメインを含めてURLが違うことはないか、など。

投稿2019/10/28 08:10

A-pZ

総合スコア12011

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

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

0

様々なご意見ありがとうございました。
なぜかは分かりませんが、本日Tomcatを再起動したら無事にリンク先へ飛べるようになりました。
何故昨日は再起動しても何をしてもダメだったのかは不明のままですが、もし次に同じような事になったらこの意見を参考にしたいと思います。

投稿2019/10/29 04:01

porpora_0316

総合スコア37

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問