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

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

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

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

Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

Java

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

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

Eclipse

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

Q&A

解決済

2回答

5067閲覧

サーブレットのtry~catchが実施されない

kumakura

総合スコア8

JSP

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

Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

Java

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

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

Eclipse

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

0グッド

1クリップ

投稿2020/03/23 07:58

前提・実現したいこと

勉強を始めたばかりの初心者です。
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

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

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

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

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

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

guest

回答2

0

ベストアンサー

Servletでなく、JSPのこの部分でエラーが出てるのではないですか?

JSP

1//日付データが空の場合は現在日付を表示 2if (syear==null){ 3 year = nowyear; 4 month = nowmonth; 5 day = nowday; 6}else{ 7 year = Integer.parseInt(syear); 8 month = Integer.parseInt(smonth); 9 day = Integer.parseInt(sday); 10}

てっとり早く確認するには、上記のparseIntを削除(コメントアウト)して、エラーがでないなら、
当該箇所が問題なので、あらためてtry~catchするか何か対応してみては、どうでしょう。

投稿2020/03/23 08:25

momon-ga

総合スコア4820

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

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

kumakura

2020/03/24 03:02

指摘いただいた箇所をtry~catch文で修正した所、問題なく動作しました。 サーブレット側に問題があると思い込んでいましたがJSP側に問題があったんですね。 ありがとうございました。
guest

0

どのexceptionをどこでキャッチさせたいのか汲み取れませんでしたが、ひとまずはじめの、NumberFormatExceptionしかキャッチしてないからだと思います。
念のためリクエスト受けとるところからtryに含めて想定されるexceptionを繋げては如何でしょうか。

なおcatchは同じ節に複数設置できます。
場合によりfinallyの導入もご検討ください。

投稿2020/03/23 08:05

編集2020/03/23 08:06
m.ts10806

総合スコア80850

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問