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

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

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

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

servlet

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

Tomcat

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

Q&A

解決済

1回答

4789閲覧

Eclipseのtomcatでずっと404エラーになってしまう。

lvngk

総合スコア0

Java

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

servlet

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

Tomcat

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

0グッド

0クリップ

投稿2021/05/07 02:16

編集2021/05/07 09:55

イメージ説明### 前提・実現したいこと
プログラミング初心者です。現在、すっきりわかるサーブレット&JSPを読みながらeclipseでjavaの勉強を行っています。
一番最初に書いてあるサーブレットクラスを作り、tomcatのサーバーを使い、ブラウザから自分のプロジェクトを開くという作業を行っています。
サーバー作成、プロジェクト作成まではうまくいったのですが、ブラウザからhttp://localhost:8080で検索すると、何度やっても404エラーが出てしまいます。

実現したいことはブラウザからhttp://localhost:8080でtomcatのサーバーにつなげ、http://localhost:8080/example/SampleServletでSampleServletクラスにつなぐということです。

初歩的な問題で、もしかすると答えが載っているサイトがあるのかもしれないのですが、見つけることができませんでした。どうかご指導お願いします。

発生している問題・エラーメッセージ

タイプ ステータスレポート メッセージ /example/SampleServlet 説明 オリジンサーバーは、ターゲットリソースの現在の表現を見つけられなかったか、またはそれが存在することを開示するつもりはありません。
import java.io.IOException; import java.io.PrintWriter; import java.text.SimpleDateFormat; import java.util.Date; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class e */ @WebServlet("/SampleServlet") public class SampleServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public SampleServlet() { super(); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String[] luckArray = {"超すっきり", "すっきり", "最悪"}; int index = (int)(Math.random() * 3); String luck = luckArray[index]; Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("MM月dd日"); String today = sdf.format(date); response.setContentType("text/html; charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>すっきり占い</title>"); out.println("</head>"); out.println("<body>"); out.println("<p>" + today + "の運勢は「" + luck + "」です</p>"); out.println("</body>"); out.println("</html>"); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }

試したこと

プロジェクトの新規作成、サーバーの新規作成、プロキシの確認、セキュリティの確認、コントロールパネルからのPathの確認、http://127.0.0.1で検索、が試したことです。

補足情報(FW/ツールのバージョンなど)

コンパイラー準拠レベル11、tomcat v9.0サーバー
コンテキストパスの確認をしたほうがいいと他のサイトには載っていたのですが、exlipseの中のcontext.xmlを確認してみたところ、どこがおかしいのかがわかりませんでした。コンテキストパスの確認の仕方も教えていただけると助かります。

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

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

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

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

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

K_3578

2021/05/07 03:26 編集

頻出の問題なので正直過去質問漁れば解決しそうではあるが・・・。 まぁ404なんでそもそもパスが合ってないんじゃないかな、 とりあえずサーブレットのソース載っけてください。
K_3578

2021/05/07 02:28

後、exlipseなんてIDEは無いです。「Eclipse」ですね
lvngk

2021/05/07 03:14

返答ありがとうございます。本当に助かります。 今ソースコードを乗せました やっぱり頻出の問題なので解決しそうだとは思ったのですが、まだほとんど知識がないので自分所に当てはめて考えてみると、何が何やらで解決することができませんでした。 助けてもらえるとありがたいです。
K_3578

2021/05/07 03:25 編集

まぁteratailでもこの手の質問頻出ですからねー。同じ原因の質問もあるかもしれませんよ。 因みにコンパイルエラー等は出ていませんか? あ、あとコードブロック化してくれたのは有難いのですが出来ればエラーメッセージと別の コードブロックにして頂けると助かります。
lvngk

2021/05/07 03:49

調べてみたのですが、まだ原因を見つけることができていなくうまくいかなかったです。 コンパイルエラーは出ていません。 知識がない未熟者ですいません。
K_3578

2021/05/07 03:55

コードブロックの分割感謝します。 あまり卑下されても困りますので、問題の解決に要点を置きましょう。 書籍通りにTomcatのバージョンは設定されましたか?
lvngk

2021/05/07 04:07

はい、設定しました 補足情報のところに書き忘れてしまったのですが、Wec content の中にあるHello.htmlという名前のhtmlファイルにはブラウザからhttp://localhost:8080/example/Hello.htmlで調べるとアクセスできます。
lvngk

2021/05/07 04:11

exlipseで実行することは可能ですが、ブラウザからlocalhostで検索すると404エラーが出てしまいます
K_3578

2021/05/07 04:48

先程申し上げましたが、exlipseではなくEclipseです。 一応現状を確認したいので、画面のスクリーンショット等を挙げて貰うことは可能でしょうか? Eclipseの画面だけ映して貰って個人情報などは隠すようになさってください。
lvngk

2021/05/07 05:48

写真を添付させていただきました。 個人情報などは載っていないと思うのですがこれで大丈夫でしょうか?
K_3578

2021/05/07 06:05

動的Webプロジェクト、exampleはローカルホストのTomcatv9.0サーバーに追加されていますか?
lvngk

2021/05/07 06:28

追加されています。
K_3578

2021/05/07 06:31

多分同様の過去質問見る限りなんですが、 // TODO Auto-generated method stub response.getWriter().append("Served at: ").append(request.getContextPath()); ↑は書籍に書いてありましたか?
lvngk

2021/05/07 06:36

その部分は書籍には書かれてはいなかったです。 Exlipseの動的プロジェクトを作成したときにデフォルトで書かれていたものです
K_3578

2021/05/07 06:39

多分関係ないとは思いますけど、一応、消して貰ってもいいですか? 恐らく動作には関係ないと思われますので。
lvngk

2021/05/07 06:43

分かりました。 消しておきました。
dodox86

2021/05/07 06:49

tomcatのバージョンが違うようですが、過去のこちらの質問回答と状況が似ているようです。 [JAVA eclipse Servletが実行できない] https://teratail.com/questions/46575
K_3578

2021/05/07 06:59

>dodox86さん 自分もその質問と同じかなーと思ったんですけどそれだったらコンパイルエラー出てると 思うんですよね。
dodox86

2021/05/07 07:15

提示のコードには1行目にpackage example;がありますが、Eclipseの画像の方にはそれがありません。どちらが正しいのか(書籍に沿っているのか)分かりませんが、だいじょうぶですか。
lvngk

2021/05/07 07:19

掲載していただいたurlとの違いは、ライブラリーにApache Tomcatv9.0が通っていることとエディタの左側に×が付いていないとことです。 今もう一度Exlipseで実行を行ってみたところ ローカルホスト の Tomcat v9.0 サーバー で必要な幾つかのポート (8005, 8080, 8009) がすでに使用中です。サーバーはすでに別のプロセスで稼働中であるか、システム・プロセスがそのポートを使用中である可能性があります。このサーバーを始動するには、他のプロセスを停止するか、ポート番号を変更する必要があります。 こういったエラーメッセージが出ました。 ブラウザでも変わらず実行することができません
lvngk

2021/05/07 07:20

package化は行っていません。 そちらの記述は誤りです。すいません
K_3578

2021/05/07 07:27 編集

>こういったエラーメッセージが出ました。 ほんじゃあそのエラーメッセージの対処法ググったら良いんじゃない? 使用中なんだったらポート番号変えればとは思うけど
dodox86

2021/05/07 07:29

> 今もう一度Exlipseで実行を行ってみたところ 替わってしつこく指摘させてもらいますが、Eclipseです。(笑) > ローカルホスト の Tomcat v9.0 サーバー で必要な幾つかのポート (8005, 8080, 8009) がすでに使用中です。 の件は(私自身は最近経験していないので確証はないですが)デバッグに伴ってサーバーの再起動をしていると正常に終了しなくなったりポート使いすぎで再利用できなくなったりする場合があります。手っ取り早く、そのマシンを再起動してください。
K_3578

2021/05/07 07:39

>Eclipse なんで私が指摘しても気付かないのにdodox86さんが指摘したら気付くのか()
lvngk

2021/05/07 07:47

すいません。修正したつもりでいたのですがまた間違えてしまっていました。 このエラーを検索したところポートの変更とnetstatコマンドでのポート確認をして、タスクマネージャーからPIDを調べるというものが出てきて試しました。 タスクマネージャーにそのポート番号のPIDがありませんでした。おそらくこれが原因だと思うのですがどう対処すればよいのでしょうか? 申し訳ないのですが教えていただけると助かります。
K_3578

2021/05/07 07:53

私もこれなった事あるけどポート埋まってるのが原因じゃなかった気がする、 dodox86さんのコメントみたいに一度マシンを再起動してみた方が良いかもしれないです。
lvngk

2021/05/07 07:57

再起動も試してみたのですが、特に変化はありませんでした。
dodox86

2021/05/07 07:58

tomcatが何らかの状態でブロックして終了できない、あるいはプロセスを雑に見て終了できているように思えるけど、ポートがLISTEN状態のまま、ということはあるかもです。ちゃんと調べないと分かりません。
dodox86

2021/05/07 08:00

ん?特に変化が無いというのは何に対してですか?「ポートが使用済み」と言う件に関してですか?それとももとの問題、404が解消していない、と言うことに対してですか?
lvngk

2021/05/07 08:08

ポート番号を変更した>実行するとポートが使用中と出てしまう http://localhost:(変更後のポート番号)でブラウザで検索をする>404がでる コマンドプロンプトでポート番号のPIDを検索>タスクマネージャーにそのポート番号のPIDが存在していない というのが今の状況です。 現在自分でも調べているのですが、原因が見つからない状態です
dodox86

2021/05/07 08:39 編集

Windows なのですよね。Windowsを再起動してもそうなってしまうのですよね。tomcatは何か、apacheと既に連携させていたり、マシン/Windowsの起動と同時にWindowsのサービスなどで自動起動するようにしているのですか? そうでないと解せないです。また、タスクマネージャーは簡易表示にしているのではないですか? 詳細表示で、全プロセスを表示させるようにしてみてください。
lvngk

2021/05/07 09:10

本に書いていないこと以外のことはしていないため、連携などはしていないと思います。 タスクマネージャーは詳細設定で確認しています。 もう一度再起動したところ、ブラウザにhttp://localhost:(変更後のポート番号)example/SampleServletで検索をかけたら、このプロジェクトの結果が正常に表示されました。 しかし、localhost(変更後のポート番号)で調べると404エラーが出ます。 プロジェクトを開くことができたのでよかったのですが、404エラーが出てしまうのがよくわかりません。この逆のパターンを質問しているのはみたことがあるのですがどういった理由なのかが検討が付きません。できればこの部分もご指導いただけると助かります。
dodox86

2021/05/07 09:43 編集

> もう一度再起動したところ、ブラウザにhttp://localhost:(変更後のポート番号)example/SampleServletで検索をかけたら、このプロジェクトの結果が正常に表示されました。 それはそれでまた解せない。原因不明の自己解決モノです。ポート番号以外は変えていないのですよね。反対に、今、現状でTCPポート番号8080は使っていないかたちであるはずですが、 http://localhost:8080/ で何かしらアクセスできてしまったりしませんか。そうであると、別のtomcat、または8080番を使っているWEBサーバーがいるということになります。 http://localhost:(変更後のポート番号)/ で404は当然で、ルート"/"やPATH無しのアクセスをホスティングしていないからです。要は「コンテンツ無し」、です。
lvngk

2021/05/07 09:57

http://localhost:8080/で検索したところ このサイトにアクセスできませんlocalhost で接続が拒否されました。 次をお試しください 接続を確認する プロキシとファイアウォールを確認する ERR_CONNECTION_REFUSED と表示されました。 現在行ったのは、ご指摘いただいたコードの修正と、ポート番号の変更です。依然としてタスクマネージャーにはPIDが存在しません。
dodox86

2021/05/07 10:05

> http://localhost:8080/で検索したところ > このサイトにアクセスできませんlocalhost で接続が拒否されました。 これであればポート変更が生きています。それでOKです。 「8080で動いているtomcatが2つ以上いて、その為、思っているのとは別の方のプロジェクトに作用していてコードの修正が反映されていなかったのでは?」との疑念からのコメントでした。コードの修正が思い当たることで、「/example/SampleServlet」のPATHでアクセスできるのであれば、 解決として良いのでは?と言う気がします。
dodox86

2021/05/07 10:10

あまり本筋と関係無い指摘ですが、 > http://localhost:8080/で検索したところ 一般的にはこれを「検索する」とは言いません。「ブラウズ(閲覧)する」とか「アクセスする」でしょうか。実際にはGETメソッドのHTTPリクエストが送られる操作です。「検索」とは、GETやPOSTのパラメータに基づいてサーバー側が行う処理を指します。
lvngk

2021/05/07 11:05

>これであればポート変更が生きています。それでOKです。 「8080で動いているtomcatが2つ以上いて、その為、思っているのとは別の方のプロジェクトに作用していてコードの修正が反映されていなかったのでは?」との疑念からのコメントでした。コードの修正が思い当たることで、「/example/SampleServlet」のPATHでアクセスできるのであれば、 解決として良いのでは? 納得できました。ポートを変更したことで8080で動いてい二つ以上のサーバーではなく、新しく作ったポート番号のサーバーに修正が反映されるようになったため、こちらで保持しているサーバーがブラウザに作用することができるようになった。という解釈でよろしいでしょうか? ブラウズ(閲覧)するというのですね。ご指摘ありがとうございます。 この問題の解決法や、言葉の使い方など長い時間ご指導いただきありがとうございます。
dodox86

2021/05/07 11:15

> ポートを変更したことで8080で動いてい二つ以上のサーバーではなく、新しく作ったポート番号のサーバーに修正が反映されるようになったため、こちらで保持しているサーバーがブラウザに作用することができるようになった。という解釈でよろしいでしょうか? えーと、もしかしたら少し認識が違うかもしれません。経緯としては、もともと8080で設定していた訳です。その時点では404エラーだった。で、違うポートに変更して、「/example/SampleServlet」のPATHでも404エラーにならず、正常にアクセスできるようになった訳です。ここまで合っていますか? 「コードを変えた」のがどの時点だったのか、コメントが長くなっているので私には分かりません。 違うポート番号に変えたあと、8080で再度アクセスを試してみてと書いたのは、間違っても複数のtomcatが動いていないか、を確認するためです。動いていなければそれでOKです。 「package expample;」がどこで入ってどこで消えていたのか分かりませんが、コードの変更とはそれを指していますか? 何にせよ、解決したのであればそれでよいので、ご自身で原因と結果をまとめて、自己解決として回答を投稿して質問を閉じてもらえればと思います。よろしくお願いします。
lvngk

2021/05/07 11:20

本当にありがとうございました。 原因と結果をまとめて投稿してみようと思います。
lvngk

2021/05/07 14:38

問題点:tomcatからブラウズすることができなかった 原因:ポートの重複により、ポートが埋まっていたことで8080のポートを使用することができなかった 解決方法:ポートを変更して解決 補足:ポート8080をのTomcatを閉鎖したことで複数のTomcatを動かしている状況がなくなった 間違っているかもしれませんが、こういった原因と結果になりました
guest

回答1

0

自己解決

問題点:tomcatからブラウズすることができなかった

原因:ポートの重複により、ポートが埋まっていたことで8080のポートを使用することができなかった

解決方法:ポートを変更して解決

補足:ポート8080をのTomcatを閉鎖したことで複数のTomcatを動かしている状況がなくなった

間違っているかもしれませんが、こういった原因と結果になりました

投稿2021/05/07 14:39

lvngk

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問