\n\n\n```\n\n```\ndelete.java\npackage food;\nimport java.io.IOException;\nimport java.sql.SQLException;\n\nimport javax.servlet.ServletException;\nimport javax.servlet.annotation.WebServlet;\nimport javax.servlet.http.HttpServlet;\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServletResponse;\n\n/**\n * Servlet implementation class insert\n */\n@WebServlet(\"/delete\")\npublic class delete extends HttpServlet {\n\tprivate static final long serialVersionUID = 1L;\n\n /**\n * @see HttpServlet#HttpServlet()\n */\n public delete() {\n super();\n // TODO Auto-generated constructor stub\n }\n\n\t/**\n\t * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)\n\t */\n\tprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {\n\t\t// TODO Auto-generated method stub\n\t\tresponse.getWriter().append(\"Served at: \").append(request.getContextPath());\n\t}\n\n\t/**\n\t * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)\n\t */\n\tprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {\n\n\t\trequest.setCharacterEncoding(\"UTF-8\");\n\t\tresponse.setContentType(\"text/html; charset=UTF-8\");//文字化け対策\n\n\t\tString id = request.getParameter(\"id\");\n\t\tUsers uu=new Users();\n\n\t\tuu.setId(id);\n\t\tUsr_database db = new Usr_database();\n\t\ttry\n\t\t{\n\t\t\tdb.connect(\"food\", \"root\", \"root\");\n\t\t\tdb.deleteUsers(id);\n\t\t\tdb.close();\n\n\n\t\t}\n\t\tcatch(SQLException e)\n\t\t{\n\t\t\te.printStackTrace();\n\t\t} catch (ClassNotFoundException e) {\n\t\t\t// TODO 自動生成された catch ブロック\n\t\t\te.printStackTrace();\n\t\t}\n\t\tresponse.sendRedirect(\"Usr_mgmt/Usr_srch.jsp\");\n\t}\n\n\n}\n\n```\n\n### 補足情報(FW/ツールのバージョンなど)\n\nUsr_top.jsp(TOP画面)からUsr_srch.jsp(検索画面)に遷移します。\nUsr_srch.jsp(検索画面)からユーザのidで検索をかけてユーザの値を表示します。\nそこに、更新と削除リンクボタンがあり、削除リンクボタンを押下するとUsr_del.jspに遷移します。\nUsr_del.jspで削除ボタンを押下すると、delete.javaに遷移し、削除の処理を実行します。\nUsr_del.jspに遷移するまでの処理はうまくいっています。delete.javvaに遷移するところがうまくいきません。\n\n\nuserテーブルの情報は下記です。\nMariaDB [food]> show columns from user;\n+----------+-------------+------+-----+---------+-------+\n| Field | Type | Null | Key | Default | Extra |\n+----------+-------------+------+-----+---------+-------+\n| id | varchar(5) | NO | | NULL | |\n| name | varchar(20) | NO | | NULL | |\n| kana | varchar(20) | NO | | NULL | |\n| gender | varchar(10) | NO | | NULL | |\n| date | date | NO | | NULL | |\n| mail | varchar(50) | NO | | NULL | |\n| password | varchar(5) | NO | | NULL | |\n| delflag | varchar(1) | YES | | NULL | |\n+----------+-------------+------+-----+---------+-------+\n8 rows in set (0.02 sec)\n\n配置は以下のようになっております。\n![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-12-28/42a9b65c-9580-437e-972d-8853ccfc7069.png)","answerCount":1,"upvoteCount":0,"datePublished":"2022-12-28T10:09:35.074Z","dateModified":"2022-12-29T12:27:24.000Z","suggestedAnswer":[{"@type":"Answer","text":"ファイルそのものに遷移するわけではなく、指定したURLにアクセスされ、\nそのURLがマッピングされているJavaプログラムが実行される(サーバサイド)\nという流れを意識しでもう一度見直してみてください。\n\nまた、jsp及びテンプレートに記載するURLの形式もコンテキストパスを採用してください。\n\n404は、アクセスしようとしているURLに該当するマッピング(もしくはマッピングされたプログラム)がWebサーバ上に存在しないときに起きる現象ですので、マッピングが間違っているか、リンクが間違っているか どちらかになります。\n\nただ、変数などと同じく、定義したものを使う のが基本手順になるはずなので、\nリンクが正しくマッピングURLを指定できていないのだと思います。\nGET/POSTなどリクエストメソッドについても確実におさえたほうが良いでしょう。\n","dateModified":"2022-12-28T11:35:05.010Z","datePublished":"2022-12-28T11:32:45.287Z","upvoteCount":0,"url":"https://teratail.com/questions/hneb46ihfs116t#reply-v0gxm1cod2vkrz","comment":[{"@type":"Comment","text":"動作に問題ないかもしれませんが、scriptタグの位置はhead内か前か\nどちらかにしたほうが良いかと。\n","datePublished":"2022-12-28T11:36:16.634Z","dateModified":"2022-12-28T11:36:16.634Z"},{"@type":"Comment","text":"丁寧な回答ありがとうございます。\n「また、jsp及びテンプレートに記載するURLの形式もコンテキストパスを採用してください。」\n修正前\n
/delete\" method=\"post\"> 修正後\n上記のように修正したのですが、うまくいきません。\ndelete.java内の 「@WebServlet(\"delete\")」\nここのパスも.deleteと./deleteと/deleteを試したのですが駄目でした。\ndelete.javaをサーバで実行すると404が出てしまうのですが、これはリンクが間違っているのではなく、マッピング?が間違っているのでしょうか。\n\n\n","datePublished":"2022-12-28T14:28:56.302Z","dateModified":"2022-12-28T14:28:56.302Z"},{"@type":"Comment","text":">delete.javaをサーバで実行すると\n\n.javaにブラウザから直にアクセスすることはできません。\nそもそもJavaはコンパイルされた実行ファイルが動作するわけで、\nサーブレットの場合はURLマッピングによって「どのURLを実行したときにどのサーブレットクラス(およびメソッド)を呼び出すか」をweb.xmlやアノテーションで定義することによって連携されます。\n\nちなみに、ブラウザに表示したときのHTMLソースを表示すると該当箇所はどうなっていますか?\n\n>/delete\" method=\"post\"> \n\nこのactionに設定したURLが存在するかどうか、\nget / post が正しく認識されているかというところも争点になってきます。","datePublished":"2022-12-28T22:31:17.410Z","dateModified":"2022-12-28T22:31:17.410Z"},{"@type":"Comment","text":"そういえば、hrefのリンクなどもhttpから直で書いてあるので、そこも直した方が良いと思います。\nサーバやポートが変わるとアクセスできなくなります。\nそこは動的になるように。\n\n現在のコードを質問本文に更新してください。","datePublished":"2022-12-28T22:32:29.536Z","dateModified":"2022-12-28T22:32:29.536Z"},{"@type":"Comment","text":">ちなみに、ブラウザに表示したときのHTMLソースを表示すると該当箇所はどうなっていますか?\nUsr_del.jspでソースを表示すると、以下のコードになっています。一部抜粋\n【利用者削除】
\n
\n 利用者検索
\n
\n\n\n\n \n\nボタンを押下すると404になります。\nHTTPステータス 404 - /sys4/delete\n\n>このactionに設定したURLが存在するかどうか、\njavaファイルがあるのは質問の配置の通り、sys4/src/food/delete.java です。\n利用者検索画面には遷移します。(この回答のソースコードの3行目)\nボタンを押下するとエラーです。\n\n\n>get / post が正しく認識されているかというところも争点になってきます。\nここはどう調べればいいのかわからなかったです。すみません。","datePublished":"2022-12-29T03:27:24.731Z","dateModified":"2022-12-29T03:27:24.731Z"}]}],"breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"トップ","url":"https://teratail.com"},{"@type":"ListItem","position":2,"name":"JSPに関する質問","url":"https://teratail.com/tags/JSP"},{"@type":"ListItem","position":3,"name":"JSP","url":"https://teratail.com/tags/JSP"}]}}}
質問するログイン新規登録
JSP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

1回答

2043閲覧

eclipse javaファイルに遷移しない

meitan

総合スコア0

JSP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2022/12/28 10:09

編集2022/12/29 03:13

0

0

前提

ここに質問の内容を詳しく書いてください。
(例)
jsp,javaであるシステムの機能の一部である利用者管理機能を作っています。
利用者削除機能を実装中に以下のエラーメッセージが発生しました。

実現したいこと

ここに実現したいことを箇条書きで書いてください。

  • 削除機能を動作するようにする

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

HTTPステータス 404 - /sys4/delete

該当のソースコード

Usr_del.jsp 12/29

1<%@page import="food.Users" %> 2<%@ page import="food.Usr_database"%> 3<%@ page import="java.sql.*" %> 4<%@ page import="java.util.ArrayList" %> 5<%@ page import="java.util.Iterator" %><%@ page language="java" contentType="text/html; charset=UTF-8" 6 pageEncoding="UTF-8"%> 7<!DOCTYPE html> 8<html> 9<head> 10<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 11<title>利用者削除画面</title> 12</head> 13<body> 14【利用者削除】<br> 15<div align="right" class="example-r"> 16 <a href="<%= request.getContextPath() %>/Usr_mgmt/Usr_srch.jsp">利用者検索</a><br> 17</div> 18<% 19String id = request.getParameter("id");//new 20 21 22Users uu=new Users(); 23 24Usr_database db = new Usr_database(); 25db.connect("food", "root", "root"); 26 27 uu = db.getUsers(id); 28 %> 29 30<!-- <form action="./delete" method="post"> --> 31 <form action="<%= request.getContextPath() %>/delete" method="post"> 32 <table summary="フォーム表示用テーブル"> 33 <tr> 34 <th>id</th> 35 <td><% out.print("<input readonly='text' name='id' value="+uu.getId()); %>></td> 36 </tr> 37 <tr> 38 <th>name</th> 39 <td><%out.print("<input readonly='text' name='name' value="+uu.getName()); %>></td> 40 </tr> 41 <tr> 42 <th>kana</th> 43 <td><%out.print("<input readonly='text' name='kana' value="+uu.getKana()); %>></td> 44 </tr> 45 <tr> 46 <th>gender</th> 47 <td><%out.print("<input readonly='select' name='gender' value="+uu.getGender()); %>></td> 48 </tr> 49 <tr> 50 <th>birth</th> 51 <td><%out.print("<input readonly='text' name='birth' value="+uu.getBirth()); %>></td> 52 </tr> 53 <tr> 54 <th>mail</th> 55 <td><%out.print("<input readonly='text' name='mail' value="+uu.getMail()); %>></td> 56 </tr> 57 58 <tr> 59 <td colspan=2 style="text-align:center"> 60 <input type="submit" name="delete" value="削除"> 61 </td> 62 </tr> 63 </table> 64</form> 65<script> 66function buttonClick(){ 67 var res= confirm("本当に削除しますか?") 68 if (res==true) { 69 return true; 70 } 71 else if(res==false) { 72 alert("キャンセルされました。"); 73 return false; 74 } 75} 76</script> 77</body> 78</html>
delete.java package food; import java.io.IOException; import java.sql.SQLException; 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 insert */ @WebServlet("/delete") public class delete extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public delete() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.getWriter().append("Served at: ").append(request.getContextPath()); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); response.setContentType("text/html; charset=UTF-8");//文字化け対策 String id = request.getParameter("id"); Users uu=new Users(); uu.setId(id); Usr_database db = new Usr_database(); try { db.connect("food", "root", "root"); db.deleteUsers(id); db.close(); } catch(SQLException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } response.sendRedirect("Usr_mgmt/Usr_srch.jsp"); } }

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

Usr_top.jsp(TOP画面)からUsr_srch.jsp(検索画面)に遷移します。
Usr_srch.jsp(検索画面)からユーザのidで検索をかけてユーザの値を表示します。
そこに、更新と削除リンクボタンがあり、削除リンクボタンを押下するとUsr_del.jspに遷移します。
Usr_del.jspで削除ボタンを押下すると、delete.javaに遷移し、削除の処理を実行します。
Usr_del.jspに遷移するまでの処理はうまくいっています。delete.javvaに遷移するところがうまくいきません。

userテーブルの情報は下記です。
MariaDB [food]> show columns from user;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | varchar(5) | NO | | NULL | |
| name | varchar(20) | NO | | NULL | |
| kana | varchar(20) | NO | | NULL | |
| gender | varchar(10) | NO | | NULL | |
| date | date | NO | | NULL | |
| mail | varchar(50) | NO | | NULL | |
| password | varchar(5) | NO | | NULL | |
| delflag | varchar(1) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
8 rows in set (0.02 sec)

配置は以下のようになっております。
イメージ説明

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

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

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

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

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

guest

回答1

0

ファイルそのものに遷移するわけではなく、指定したURLにアクセスされ、
そのURLがマッピングされているJavaプログラムが実行される(サーバサイド)
という流れを意識しでもう一度見直してみてください。

また、jsp及びテンプレートに記載するURLの形式もコンテキストパスを採用してください。

404は、アクセスしようとしているURLに該当するマッピング(もしくはマッピングされたプログラム)がWebサーバ上に存在しないときに起きる現象ですので、マッピングが間違っているか、リンクが間違っているか どちらかになります。

ただ、変数などと同じく、定義したものを使う のが基本手順になるはずなので、
リンクが正しくマッピングURLを指定できていないのだと思います。
GET/POSTなどリクエストメソッドについても確実におさえたほうが良いでしょう。

投稿2022/12/28 11:32

編集2022/12/28 11:35
m.ts10806

総合スコア80890

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

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

m.ts10806

2022/12/28 11:36

動作に問題ないかもしれませんが、scriptタグの位置はhead内か</body>前か どちらかにしたほうが良いかと。
meitan

2022/12/28 14:28

丁寧な回答ありがとうございます。 「また、jsp及びテンプレートに記載するURLの形式もコンテキストパスを採用してください。」 <!-- <form action="./delete" method="post"> -->修正前 <form action="<%= request.getContextPath() %>/delete" method="post"> 修正後 上記のように修正したのですが、うまくいきません。 delete.java内の 「@WebServlet("delete")」 ここのパスも.deleteと./deleteと/deleteを試したのですが駄目でした。 delete.javaをサーバで実行すると404が出てしまうのですが、これはリンクが間違っているのではなく、マッピング?が間違っているのでしょうか。
m.ts10806

2022/12/28 22:31

>delete.javaをサーバで実行すると .javaにブラウザから直にアクセスすることはできません。 そもそもJavaはコンパイルされた実行ファイルが動作するわけで、 サーブレットの場合はURLマッピングによって「どのURLを実行したときにどのサーブレットクラス(およびメソッド)を呼び出すか」をweb.xmlやアノテーションで定義することによって連携されます。 ちなみに、ブラウザに表示したときのHTMLソースを表示すると該当箇所はどうなっていますか? ><form action="<%= request.getContextPath() %>/delete" method="post">  このactionに設定したURLが存在するかどうか、 get / post が正しく認識されているかというところも争点になってきます。
m.ts10806

2022/12/28 22:32

そういえば、hrefのリンクなどもhttpから直で書いてあるので、そこも直した方が良いと思います。 サーバやポートが変わるとアクセスできなくなります。 そこは動的になるように。 現在のコードを質問本文に更新してください。
meitan

2022/12/29 03:27

>ちなみに、ブラウザに表示したときのHTMLソースを表示すると該当箇所はどうなっていますか? Usr_del.jspでソースを表示すると、以下のコードになっています。一部抜粋 【利用者削除】<br> <div align="right" class="example-r"> <a href="/sys4/Usr_mgmt/Usr_srch.jsp">利用者検索</a><br> </div> <!-- <form action="./delete" method="post"> --> <form action="/sys4/delete" method="post"> ボタンを押下すると404になります。 HTTPステータス 404 - /sys4/delete >このactionに設定したURLが存在するかどうか、 javaファイルがあるのは質問の配置の通り、sys4/src/food/delete.java です。 利用者検索画面には遷移します。(この回答のソースコードの3行目) ボタンを押下するとエラーです。 >get / post が正しく認識されているかというところも争点になってきます。 ここはどう調べればいいのかわからなかったです。すみません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.29%

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

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

質問する

関連した質問