###質問者について
プログラミングを初めて約1か月
「10日でおぼえるjsp&サーブレット入門教室」という本で現在勉強しています。
質問内容もその本のサンプルコードについてです。
###環境
WINDOWS10
eclipse Neon2017
Tomcat9
jdk1.8
###作りたいもの
Jsp&サーブレットで簡易スケジュール帳Webアプリを作成したい。
insert.jsp(スケジュール登録フォーム)→Insertservlet.java(フォームに入力された情報をBeansに格納、MvcServlet.javaにリダイレクト)→MvcServlet.java(Beansからデータをリストに格納しスコープに入れる)→mvc.jsp(スコープのリストから情報を取り出して表にしてブラウザに出力(jstlを使っています))
Schedule.java(JavaBeans)
発生している問題・エラーメッセージ
InsertServlet.java(サーブレット)からMvcServlet.java(サーブレット)にリダイレクトしたいが、404になってしまいます。
URLの指定がおかしいのだと思うのですがどう変更したらよいのかわからず困っております。ご教授いただければ幸いです。
HTTPステータス 404 - Not Found Type ステータスレポート メッセージ /jsp10Chap7/lesson31/MvcServlet 説明 The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. Apache Tomcat/9.0.7
該当のソースコード
insert.jsp
jsp
1<%@ page contentType="text/html;charset=UTF-8" %> 2<%@ taglib prefix="win" uri="/WEB-INF/taglibs/WingsTag" %> 3<!DOCTYPE html> 4<html> 5<head> 6<meta charset="UTF-8" /> 7<title>簡易スケジュール帳</title> 8</head> 9<body> 10<form method="POST" action="InsertServlet"> 11<div> 12 <label>予定名:<br /> 13 <input type="text" name="title" size="50" maxlength="255" /> 14 </label> 15</div> 16<div> 17 <label>日付:<br /> 18 <select name="date_year">${win:createOption(2015, 2020)}</select>年 19 <select name="date_month">${win:createOption(1, 12)}</select>月 20 <select name="date_day">${win:createOption(1, 31)}</select>日 21 </label> 22</div> 23<div> 24 <label>開始時間:<br /> 25 <select name="time_hour">${win:createOption(0, 23)}</select>時 26 <select name="time_minute">${win:createOption(0, 59)}</select>分 27 </label> 28</div> 29<div> 30 <label>備考:<br /> 31 <input type="text" name="memo" size="70" maxlength="255" /> 32 </label> 33</div> 34<div> 35 <input type="submit" value="登録" /> 36</div> 37</form> 38</body> 39</html> 40
InsertServlet.java
java
1package lesson31; 2 3import java.io.IOException; 4 5import javax.servlet.ServletException; 6import javax.servlet.annotation.WebServlet; 7import javax.servlet.http.HttpServlet; 8import javax.servlet.http.HttpServletRequest; 9import javax.servlet.http.HttpServletResponse; 10 11 12 13@WebServlet("/lesson31/InsertServlet") 14public class InsertServlet extends HttpServlet { 15 @Override 16 public void doPost(HttpServletRequest request, HttpServletResponse response) 17 throws ServletException, IOException { 18 request.setCharacterEncoding("UTF-8"); 19 Schedule info = new Schedule(); 20 info.setTitle(request.getParameter("title")); 21 info.setScheduleDate(request.getParameter("date_year") + "-" + 22 request.getParameter("date_month") + "-" + 23 request.getParameter("date_day")); 24 info.setScheduleTime(request.getParameter("time_hour") + ":" + 25 request.getParameter("time_minute")); 26 info.setMemo(request.getParameter("memo")); 27 info.insertInfo(); 28 //MvcServletのファイル名 29 String mvcServletPath = "MvcServlet"; 30 response.sendRedirect(mvcServletPath); 31 } 32} 33
Schedule.java
java
1package lesson31; 2 3import java.io.Serializable; 4import java.sql.Connection; 5import java.sql.PreparedStatement; 6import java.sql.ResultSet; 7import java.sql.SQLException; 8import java.util.ArrayList; 9 10import javax.naming.Context; 11import javax.naming.InitialContext; 12import javax.naming.NamingException; 13import javax.sql.DataSource; 14 15public class Schedule implements Serializable { 16 public Schedule () {/*コンストラクタ*/} 17 18 private String id; 19 private String title; 20 private String scheduleDate; 21 private String scheduleTime; 22 private String memo; 23 24 public String getId() { 25 return id; 26 } 27 public void setId(String id) { 28 this.id = id; 29 } 30 public String getTitle() { 31 return title; 32 } 33 public void setTitle(String title) { 34 this.title = title; 35 } 36 public String getScheduleDate() { 37 return scheduleDate; 38 } 39 public void setScheduleDate(String scheduleDate) { 40 this.scheduleDate = scheduleDate; 41 } 42 public String getScheduleTime() { 43 return scheduleTime; 44 } 45 public void setScheduleTime(String scheduleTime) { 46 this.scheduleTime = scheduleTime; 47 } 48 public String getMemo() { 49 return memo; 50 } 51 public void setMemo(String memo) { 52 this.memo = memo; 53 } 54 55 public int insertInfo() { 56 int result = 0; 57 Connection db = null; 58 PreparedStatement ps = null; 59 try { 60 Context context = new InitialContext(); 61 DataSource ds = (DataSource)context.lookup("java:comp/env/jdbc/Jsp10"); 62 db = ds.getConnection(); 63 ps = db.prepareStatement("INSERT INTO schedules(title, schedule_date, schedule_time, memo) VALUES (?, ?,?, ?)"); 64 ps.setString(1, this.title); 65 ps.setString(2, this.scheduleDate); 66 ps.setString(3, this.scheduleTime); 67 ps.setString(4, this.memo); 68 result = ps.executeUpdate(); 69 ps.close(); 70 db.close(); 71 } catch (NamingException e) { 72 e.printStackTrace(); 73 } catch (SQLException e) { 74 e.printStackTrace(); 75 } finally { 76 try { 77 if(ps != null) {ps.close();} 78 if(db != null) {db.close();} 79 } catch (SQLException e2) { 80 e2.printStackTrace(); 81 } 82 } 83 return result; 84 } 85 86 public static ArrayList<Schedule> getInfos(){ 87 ArrayList<Schedule> list = new ArrayList<Schedule>(); 88 Connection db = null; 89 PreparedStatement ps = null; 90 ResultSet rs = null; 91 try { 92 Context context = new InitialContext(); 93 DataSource ds = (DataSource)context.lookup("java:comp/env/jdbc/Jsp10"); 94 db = ds.getConnection(); 95 ps = db.prepareStatement("SELECT * FROM schedules ORDER BY schedule_date, schedule_time"); 96 rs = ps.executeQuery(); 97 while (rs.next()) { 98 Schedule info = new Schedule(); 99 info.setId(rs.getString("id")); 100 info.setTitle(rs.getString("title")); 101 info.setScheduleDate(rs.getString("schedule_date")); 102 info.setScheduleTime(rs.getString("schedule_time")); 103 info.setMemo(rs.getString("memo")); 104 list.add(info); 105 } 106 } catch (NamingException e) { 107 e.printStackTrace(); 108 } catch (SQLException e) { 109 e.printStackTrace(); 110 } finally { 111 try { 112 if (rs != null) { 113 rs.close(); 114 } 115 if (ps != null) { 116 ps.close(); 117 } 118 if (db != null) { 119 db.close(); 120 } 121 } catch (SQLException e2) { 122 e2.printStackTrace(); 123 } 124 } 125 return list; 126 127 } 128 129 130} 131
MvcServlet.java
java
1package lesson31; 2 3import java.io.IOException; 4import java.util.ArrayList; 5 6import javax.servlet.ServletException; 7import javax.servlet.annotation.WebServlet; 8import javax.servlet.http.HttpServlet; 9import javax.servlet.http.HttpServletRequest; 10import javax.servlet.http.HttpServletResponse; 11 12 13@WebServlet("/MvcServlet") 14public class MvcServlet extends HttpServlet { 15 @Override 16 public void doGet(HttpServletRequest request, HttpServletResponse response) 17 throws ServletException, IOException { 18 ArrayList<Schedule> list = Schedule.getInfos(); 19 request.setAttribute("list", list); 20 //mvc.jspのパス(Web アプリケーションのコンテキストルートに対する相対パス) 21 String path = "/lesson31/mvc.jsp"; 22 getServletContext().getRequestDispatcher(path).forward(req![イメージ説明](a8aef2a303be7fd632bf73ff5f42bba7.png)response); 23 } 24}
mvc.jsp
jsp
1<%@ page contentType="text/html; charset=UTF-8" %> 2<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 3<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 4<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> 5<!DOCTYPE html> 6<html> 7<head> 8<meta charset="UTF-8" /> 9<title>簡易スケジュール帳</title> 10</head> 11<body> 12<table border="1"> 13<tr> 14 <th>日付</th><th>時刻</th><th>予定名</th><th>備考</th><th>編集</th> 15</tr> 16<c:forEach var="info" items="${requestScope['list']}"> 17 <fmt:parseDate var="scheduleDate" value="${info.scheduleDate}" 18 pattern="yyyy-MM-dd" /> 19 <fmt:parseDate var="scheduleTime" value="${info.scheduleTime}" 20 pattern="HH:mm:ss" /> 21 <tr> 22 <td><fmt:formatDate value="${scheduleDate}" 23 pattern="yyyy年MM月dd日" /></td> 24 <td><fmt:formatDate value="${scheduleTime}" 25 pattern="HH時mm分" /></td> 26 <td>${fn:escapeXml(info.title)}</td> 27 <td>${fn:escapeXml(info.memo)}</td> 28 <td> 29 <a href="edit.jsp?id=${info.id}![イメージ説明](8b52d869ed5d4a6780840d3d32592f33.png)a> 30 </td> 31 </tr> 32</c:forEach> 33</table> 34</body> 35</html> 36
![guest](/img/icon/icnUserSample.jpg)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。