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

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

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

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Tomcat

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

Q&A

解決済

1回答

409閲覧

Eclipse + Tomcat で、コントローラーのサーブレットに移ろうとすると404エラーが出る

onoko

総合スコア41

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Tomcat

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

0グッド

0クリップ

投稿2024/05/22 20:44

実現したいこと

 以前正常に動作していたJavaの動的Webプロジェクト「一時駐車場管理プログラム」(pauser)が、同じコードのままなのに動作しなくなったので修復したい。

発生している問題・分からないこと

 Javaの動的Webプロジェクト「一時駐車場管理プログラム」(pauser)をEclipse2020-12上で完成させ、それはその時正常に動作しました。しかし現在同じコードのままで実行しようとすると、まるで古くなって錆びついたかのように動作しません。スタート画面「一時駐車場利用者登録」は正常に表示されるのですが、下部のメニューの「一時駐車場利用状況一覧」画面等にリンクして、コントローラーのサーブレットController.javaに移ろうとすると、そのサーブレットが見つからないという意味の回答の404エラーになってしまいます。
プロジェクト'pauser'(一時駐車場管理プログラム)体系図
スタート画面'index.jsp'(一時駐車場利用車登録画面)
環境を改善すれば解決するかとも思い、Eclipse2023にプロジェクト全体をコピーしてTomcat10[Java21]を使って実行してみました。しかし同じくコントローラーのサーブレットが見つからないという意味の404エラーが出るだけです。どのように環境他を変化させれば動作するのか、私にはその知識が乏しくまた検索もしきれず解決できません。どうかご存じの方、対処法をご教示下さい。

エラーメッセージ

error

1HTTPステータス 404 – 見つかりません 2タイプ ステータスレポート 3 4メッセージ 要求されたリソース [/Controller] は利用できません。 5 6説明 オリジンサーバーは、ターゲットリソースの現在の表現を見つけられなかったか、またはそれが存在することを開示するつもりはありません。 7 8Apache Tomcat/10.1.13

該当のソースコード

index.jsp

1<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2<%@ page import="model.Parked" %> 3<%@ page import="java.util.*" %> 4<% Parked parked = (Parked) request.getAttribute("Parked");%> 5<% 6String year="";String month="";String day=""; 7String thousand="";String hundred="";String ten="";String one=""; 8String msg=""; 9 10if(Objects.isNull(parked)){parked=new Parked();} 11else {msg=parked.getMsg();} 12%> 13<!DOCTYPE html> 14<html lang="ja"> 15<head> 16 <meta charset="UTF-8"> 17 <title>一時駐車場利用車登録</title> 18 <link href="css/index.css" rel="stylesheet" type="text/css"> 19</head> 20<body> 21<h1>一時駐車場利用車登録</h1> 22<div> 23<form action="/Controller" method="post"> 24 <input type="hidden" name="y" value="1"> 25 <p> 26 駐車日20<input type="text" name="year" size="2" maxlength="2" value="<%=year %>" onkeyup="nextfeild(this)">年 27 <input type="text" name="month" size="2" maxlength="2" value="<%=month %>" onkeyup="nextfeild(this)">月 28 <input type="text" name="day" size="2" maxlength="2" value="<%=day %>" onkeyup="nextfeild(this)">日 29 </p> 30 <p> 31 ナンバー <input type="text" name="thousand" size="1" maxLength="1" value="<%=thousand%>" onkeyup="nextfeild(this)"> 32 <input type="text" name="hundred" size="1" maxlength="1" value="<%=hundred %>" onkeyup="nextfeild(this)"> 33 <input type="text" name="ten" size="1" maxlength="1" value="<%=ten%>" onkeyup="nextfeild(this)"> 34 <input type="text" name="one" size="1" maxlength="1" value="<%=one%>" onkeyup="nextfeild(this)" > 35 <input type="submit" name="record" value="登録"> 36 <input type="checkbox" id="delete" name="delete" value="1"> 37 <label for="delete">削除(ナンバーのみ入力)</label> 38 </p> 39</form> 40<p style="color:red"><%=msg %></p> 41</div> 42<div class="bottomMenu"> 43 <ul> 44 <li><a href="/Controller?x=2">一時駐車場リピーター一覧</a></li> 45 <li><a href="/Controller?x=3">一時駐車場利用状況一覧</a></li> 46 </ul> 47</div> 48 49<script type="text/javascript"> 50 function nextfeild(str){ 51 if(str.value.length>=str.maxLength){ 52 for(var i=0,elm=str.form.elements;i<elm.length;i++){ 53 if(elm[i]==str){ 54 (elm[i+1] || elm[0]).focus(); 55 break; 56 } 57 } 58 } 59 } 60</script> 61</body> 62</html> 63

Controller.java

1package servlet; 2 3import java.io.IOException; 4import java.util.LinkedHashMap; 5import java.util.List; 6import java.util.TreeMap; 7 8import jakarta.servlet.RequestDispatcher; 9import jakarta.servlet.ServletException; 10import jakarta.servlet.annotation.WebServlet; 11import jakarta.servlet.http.HttpServlet; 12import jakarta.servlet.http.HttpServletRequest; 13import jakarta.servlet.http.HttpServletResponse; 14 15import model.Parked; 16import model.RecordPausers; 17import model.SelectPausers; 18import model.SelectRepeaters; 19import model.dayOfWeek; 20 21@WebServlet("/Controller") 22public class Controller extends HttpServlet{ 23 private static final long serialVersionUID = 1L; 24 25public Controller() { 26 super(); 27} 28 29 protected void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{ 30 String x = request.getParameter("x"); 31 String forwardPath= null; 32 33 if (x==null){ 34 try { 35 Class.forName("org.postgresql.Driver"); 36 } 37 catch(ClassNotFoundException e1) { 38 e1.printStackTrace(); 39 } 40 } 41 if ((x == null) || ("1".equals(x))){forwardPath="index.jsp";} 42 if ("2".equals(x)) { 43 SelectRepeaters sr = new SelectRepeaters(); 44 LinkedHashMap<String,List<String>>map = sr.selectRepeaters(); 45 Parked parked = new Parked(); 46 parked.setMap(map); 47 request.setAttribute("map",map); 48 forwardPath="WEB-INF/jsp/displayRepeaters.jsp"; 49 } 50 if ("3".equals(x)) { 51 SelectPausers sp = new SelectPausers(); 52 TreeMap<String,List<Integer>>map2 = sp.selectPausers(); 53 Parked parked = new Parked(); 54 parked.setMap2(map2); 55 request.setAttribute("map2",map2); 56 forwardPath="WEB-INF/jsp/pausersRecord.jsp"; 57 } 58 59 RequestDispatcher dispatcher = request.getRequestDispatcher(forwardPath); 60 dispatcher.forward(request,response); 61 } 62 63 64 protected void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{ 65 String y =request.getParameter("y"); 66 String delete =request.getParameter("delete"); 67 String year = String.format("%2s", request.getParameter("year").trim()).replace(" ", "0"); 68 String month = String.format("%2s", request.getParameter("month").trim()).replace(" ", "0"); 69 String day = String.format("%2s", request.getParameter("day").trim()).replace(" ", "0"); 70 String thousand = String.format("%1s", request.getParameter("thousand")); 71 String hundred = String.format("%1s", request.getParameter("hundred")); 72 String ten = String.format("%1s", request.getParameter("ten")); 73 String one = String.format("%1s", request.getParameter("one")); 74 String date = year+month+day; 75 String number = thousand+hundred+ten+one; 76 String msg =""; 77 78 if("1".equals(y)) { 79 if (((date.matches("^[0-9]{2}((0[1-9])|(1[0-2]))((0[1-9])|([12][0-9])|(3[01]))$")) && 80 (number.matches("([1-9][0-9][0-9][0-9])|(\\s[1-9][0-9][0-9])|(\\s\\s[1-9][0-9])|(\\s\\s\\s[1-9])"))&& 81 (!("1".equals(delete)))) 82 || 83 ((number.matches("([1-9][0-9][0-9][0-9])|(\\s[1-9][0-9][0-9])|(\\s\\s[1-9][0-9])|(\\s\\s\\s[1-9])"))&& 84 ("1".equals(delete)))) { 85 RecordPausers RU = new RecordPausers(); 86 RU.recordPausers(date,number,delete); 87 88 dayOfWeek dOW = new dayOfWeek(); 89 date = date+dOW.DayOfWeek(year,month,day); 90 if(!("1".equals(delete))) {msg="一時駐車を登録しました。";} else {msg="一時駐車の登録を削除しました。";} 91 } 92 else { 93 if (number.matches("([1-9][0-9][0-9][0-9])|(\\s[1-9][0-9][0-9])|(\\s\\s[1-9][0-9])|(\\s\\s\\s[1-9])")){} else {msg="ナンバーを正しく入れてください。";} 94 if (!(date.matches("^[0-9]{2}((0[1-9])|(1[0-2]))((0[1-9])|([12][0-9])|(3[01]))$"))&&(!("1".equals(delete)))){msg="日付を正しく入れてください。";} 95 } 96 Parked parked = new Parked(msg); 97 request.setAttribute("Parked", parked); 98 String forwardPath="index.jsp"; 99 RequestDispatcher dispatcher = request.getRequestDispatcher(forwardPath); 100 dispatcher.forward(request,response); 101 102 } 103 104 105 } 106 107 108

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

1)新旧環境で以前動作したのと同じコードで実行すると、スタート画面は表示されるが、その下部メニューから他画面へリンクしようとすると、コントローラーのサーブレットが見つからないという意味の404エラーが出る。
2)下部メニューの<a href>タグのリンク先へのパスを変更してみた。
例)"/Controller?x=3"
から
"/pauser/src/main/java/servlet/Controller?x=3" または
"../java/servlet/Controller?x=3"

結果。コントローラーのサーブレットが見つからないという意味の404エラーが出る。

補足

プロジェクトを作り以前はそれが動作していた旧環境
Eclipse IDE 2020-12
Tomcat9[Java11]
プロジェクトをコピーして動作させようとしている現環境
Eclipse 2023
Tomcat10[Java21]

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

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

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

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

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

onoko

2024/05/23 01:07

Eclipse2023のコンソールに次の表示がありました。 商用環境に最適な性能を発揮する APR ベースの Tomcat ネイティブライブラリが java.library.path [C:\pleiades\2023-09\java\21\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:/pleiades/2023-09/eclipse//plugins/org.eclipse.justj.openjdk.hotspot.jre.full.win32.x86_64_17.0.10.v20240120-1143/jre/bin/server;C:/pleiades/2023-09/eclipse//plugins/org.eclipse.justj.openjdk.hotspot.jre.full.win32.x86_64_17.0.10.v20240120-1143/jre/bin;C:\Program Files\Common Files\Oracle\Java\javapath;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\Program Files\Java\jdk-13.0.2\bin;C:\Program Files (x86)\Brackets\command;"C:\Program Files\Java\jdk-17.0.4\bin;\%Path%";C:\maven\apache-maven-3.6.3\bin;C:\Program Files\Git\cmd;C:\PostgreSQL\13\bin;C:\apache-maven-3.6.3\bin;C:\Users\spnc4\AppData\Local\Microsoft\WindowsApps;C:\Program Files\heroku\bin;C:\Users\spnc4\AppData\Local\Programs\Microsoft VS Code\bin;C:\PostgreSQL\13\bin;C:\Users\spnc4\AppData\Local\GitHubDesktop\bin;C:\pleiades\2023-09\eclipse;;.] に存在しません。 [木 5月 23 10:03:24 JST 2024]
onoko

2024/05/23 02:53

Eclipse2023の画面中央にある「起動構成」タブの「サーバーで実行」のフォルダの中に、ほかの実行できたプロジェクト名はあるのですが、このプロジェクト名がありません。しかしこれがどういう意味でこのプロジェクト名を追加すべきなのか、どう追加するのか、適切なところが目下検索しきれずわかりません。
jimbe

2024/05/24 18:18

何で動いて何で動かないのかをハッキリしたいのですが、 昔 eclipse2020-12 で開発して tomcat9(java11) で動作していたものが、改めて(別のパソコン等に) eclipse2020-12 をインストールして昔のまま残っていた pauser プロジェクトをフォルダ丸ごとコピーして同じく tomcat9(java11) で動かすと /Controller へのアクセスで 404 となり、なら環境を新しくしようと eclipse2023 をインストールしてまた pauser をコピーしてきて tomcat10(java21) で動かしたが変わらず /Controller へのアクセスで 404 だった… であっているでしょうか。
onoko

2024/05/25 04:35

昔 eclipse2020-12 で開発して tomcat9(java11) で動作していた プロジェクトpauser そのものを、再び現在実行してみると動作しない。eclipse2023へ その pauser をコピーしてきて tomca10t(java21) で動かしたが変わらず /Controller へのアクセスで 404 だった。という意味でした。 誠にすいません。実は pauser を何らかの方法で修正して 正常に動作するように完成させた別の名前の付いたプロジェクトが保存されているのを発見いたしまして、tomcat9(java11) で実行できていたという記憶も その変更した名前のプロジェクトについてのものだったと判明しました。解決法は不分明ですが 動作できないという問題は解決しました。お騒がせしました。今後気をつけます。失礼いたします。
jimbe

2024/05/25 06:56

昔の開発環境(のコピー等で無く)そのままを今実行しようとして動かなかったんですね。 で、実はその昔の開発環境のは(何かの原因で)動かないまま放置されていたもので、動く状態の開発環境が見つかってそれは今も動くのが確認されて本件は解決と。 では、経緯を回答として書いてベストアンサーとしてください。 でないといつまでも未解決として表示され続けます。
onoko

2024/05/25 09:07

分かりました。
jimbe

2024/05/25 11:48

ありがとうございます、お疲れさまでした。 そういうこともありますので気にせず^^;
guest

回答1

0

自己解決

完全に動くと記憶していたプロジェクトは、実は pauser ではなく、pauser を別の名前に改名してから完成させ保管してあったプロジェクトでした。改名したのを覚えていなくてしばらく気が付かなかったのです。このプロジェクトは現在も完全に動くので、エラーについて考える必要がなくなりました。よってこの質問をここに取り下げます。皆様、私の粗忽さをどうかお許しください。たいへんお騒がせして申し訳ありませんでした。

投稿2024/05/25 09:20

onoko

総合スコア41

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問