前提・実現したいこと
勉強を始めたばかりの初心者です。
Java(jsp、サーブレット)にてスケジュール管理のシステムを作成しています。
yearなどの必須項目に空き・文字列が記載された場合のtry~catch文を記載しているのですが、実際にnullや文字列を入力した状態で送信すると通常のエラーが発生し、catchで設定した処理(前ページに戻る)が行われません。
正常な入力を行った際は問題なく処理されるのでcatch文がうまくいっていないのだと思いますが、原因がわかりません。
ご回答いただけると助かります、よろしくお願いします。
エラーメッセージ
※yearに「r」を記載して送信した際は以下のようなエラーが出ました。
java.lang.NumberFormatException: For input string: "r"
#該当のソースコード(サーブレット部分)
java
1package calender; 2 3import java.io.IOException; 4import java.io.PrintWriter; 5import java.sql.Connection; 6import java.sql.DriverManager; 7import java.sql.SQLException; 8import java.util.Calendar; 9 10import javax.servlet.RequestDispatcher; 11import javax.servlet.ServletContext; 12import javax.servlet.ServletException; 13import javax.servlet.annotation.WebServlet; 14import javax.servlet.http.HttpServlet; 15import javax.servlet.http.HttpServletRequest; 16import javax.servlet.http.HttpServletResponse; 17 18/** 19 * Servlet implementation class Calender 20 */ 21@WebServlet("/Calender") 22public class Calender extends HttpServlet { 23 private static final long serialVersionUID = 1L; 24 25 /** 26 * @see HttpServlet#HttpServlet() 27 */ 28 public Calender() { 29 super(); 30 // TODO Auto-generated constructor stub 31 } 32 33 /** 34 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 35 */ 36 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 37 // TODO Auto-generated method stub 38 response.setContentType("text/html;charset=UTF-8"); 39 40 //response.getWriter().append("Served at: ").append(request.getContextPath()); 41 PrintWriter out = response.getWriter(); 42 43 } 44 45 46 /** 47 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 48 */ 49 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 50 // TODO Auto-generated method stub 51 //doGet(request, response); 52 53 // formから必須項目値を取得 54 String years = request.getParameter("year"); 55 String months = request.getParameter("month"); 56 String days = request.getParameter("day"); 57 String title = request.getParameter("title"); 58 59 int year=0; 60 int month=0; 61 int day=0; 62 63 try { 64 65 //formの値を数値へ変換 66 year = Integer.parseInt(years); 67 month = Integer.parseInt(months); 68 day = Integer.parseInt(days); 69 70 }catch(NumberFormatException e) { 71 72 //間違っていた場合は入力フォームへ戻る 73 ServletContext ctx = getServletContext(); 74 RequestDispatcher dispatcher = ctx.getRequestDispatcher("/new.jsp"); 75 dispatcher.forward(request, response); 76 } 77 78 //formから補足項目値を取得する準備 79 String starttimes="0"; 80 String startminites="0"; 81 String lasttimes="0"; 82 String lastminites="0"; 83 84 if(title==null) { 85 86 //間違っていた場合は入力フォームへ戻る 87 ServletContext ctx = getServletContext(); 88 RequestDispatcher dispatcher = ctx.getRequestDispatcher("/new.jsp"); 89 dispatcher.forward(request, response); 90 91 }else { 92 93 //formから補足項目値を取得 94 starttimes = request.getParameter("starttime"); 95 startminites = request.getParameter("startminite"); 96 lasttimes = request.getParameter("lasttime"); 97 lastminites = request.getParameter("lastminite"); 98 } 99 100 int starttime; 101 int startminite; 102 int lasttime; 103 int lastminite; 104 105 //日付・時間へ変換 106 Calendar cl = Calendar.getInstance(); 107 108 int daydate; 109 int starttimedate; 110 int lasttimedate; 111 112 try { 113 114 lasttime = Integer.parseInt(lasttimes); 115 lastminite = Integer.parseInt(lastminites); 116 117 }catch(NumberFormatException e2) { 118 lasttime = 0; 119 lastminite = 0; 120 } 121 122 try { 123 124 starttime = Integer.parseInt(starttimes); 125 startminite = Integer.parseInt(startminites); 126 127 }catch(NumberFormatException e3){ 128 129 starttime = 0; 130 startminite = 0; 131 } 132 133 // formの値に間違いがないかチェック 134 if(lasttime>=starttime && startminite<60 && lastminite<60) { 135 136 //日付・時間へ変換 137 cl.set(year,month,day,starttime,startminite); 138 daydate = cl.get(Calendar.DATE); 139 starttimedate = cl.get(Calendar.HOUR_OF_DAY); 140 cl.set(year,month,day,lasttime,lastminite); 141 lasttimedate = cl.get(Calendar.HOUR_OF_DAY); 142 String url = ("/Calendars/calender.jsp"); 143 response.sendRedirect(url); 144 145 }else { 146 147 //間違っていた場合は入力フォームへ戻る 148 ServletContext ctx = getServletContext(); 149 RequestDispatcher dispatcher = ctx.getRequestDispatcher("/new.jsp"); 150 dispatcher.forward(request, response); 151 152 } 153 154 //データベースへの接続準備 155 Connection conn = null; 156 String url = "-省略-"; 157 String user = "-省略-"; 158 String password = "-省略-"; 159 160 //データベースへ接続 161 try{ 162 conn = DriverManager.getConnection(url, user, password); 163 164 System.out.println("データベース接続に成功しました"); 165 166 167 168 }catch (SQLException e){ 169 170 System.out.println("データベースにつなげません"); 171 System.out.println("SQLException:" + e.getMessage()); 172 } 173 174 175 176 177 178 } 179} 180
#該当のソースコード(JSP部分)
html
1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<%@ page import="java.util.Calendar"%> 4<%@ page import="java.sql.*" %> 5<% 6 7//選択した日付データを自動入力 8String syear = request.getParameter("year"); 9String smonth = request.getParameter("month"); 10String sday = request.getParameter("day"); 11 12int year; 13int month; 14int day; 15 16Calendar cl = Calendar.getInstance(); 17 18int nowyear = cl.get(Calendar.YEAR); 19int nowmonth = cl.get(Calendar.MONTH)+1; 20int nowday = cl.get(Calendar.DATE); 21 22//日付データが空の場合は現在日付を表示 23if (syear==null){ 24 year = nowyear; 25 month = nowmonth; 26 day = nowday; 27}else{ 28 year = Integer.parseInt(syear); 29 month = Integer.parseInt(smonth); 30 day = Integer.parseInt(sday); 31} 32 33 cl.set(year,month,day); 34 35%> 36<!DOCTYPE html> 37<html> 38<head> 39<meta charset="UTF-8"> 40<link rel="stylesheet" href="new.css"> 41<title>calender/new</title> 42</head> 43<body> 44<main> 45 <h1>新規予定追加</h1> 46 <form class="new" action="Calender" method="POST"> 47 <input class="days index" type="text" name="year" value="<%= year %>">年 48 <input class="days index" type="text" name="month" value="<%= month %>">月 49 <input class="days index" type="text" name="day" value="<%= day %>">日<br> 50 <input class="index time" type="text" name="starttime">:<input class="index time" type="text" name="startminite"><span class="time">~</span> 51 <input class="index time" type="text" name="lasttime">:<input class="index time" type="text" name="lastminite"><br> 52 <input class="index title" type="text" name="title" placeholder="予定タイトル"><br> 53 <textarea class="index text" name="detail" rows="8" placeholder="予定詳細"></textarea><br> 54 <input class="index" type="submit" value="新規予定追加"> 55 </form> 56 </main> 57 <a class="a" href="calender.jsp">カレンダーへ戻る</a> 58</body> 59</html>
補足情報
OS:windows10
IDE:Eclipse
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/24 03:02