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

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

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

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

Null

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

Java

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

サーブレット

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

Eclipse

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

解決済

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

kumakura
kumakura

総合スコア0

JSP

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

Null

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

Java

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

サーブレット

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

Eclipse

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

2回答

0評価

1クリップ

2615閲覧

投稿2020/03/23 07:58

前提・実現したいこと

勉強を始めたばかりの初心者です。
Java(jsp、サーブレット)にてスケジュール管理のシステムを作成しています。
yearなどの必須項目に空き・文字列が記載された場合のtry~catch文を記載しているのですが、実際にnullや文字列を入力した状態で送信すると通常のエラーが発生し、catchで設定した処理(前ページに戻る)が行われません。
正常な入力を行った際は問題なく処理されるのでcatch文がうまくいっていないのだと思いますが、原因がわかりません。
ご回答いただけると助かります、よろしくお願いします。

エラーメッセージ

※yearに「r」を記載して送信した際は以下のようなエラーが出ました。
java.lang.NumberFormatException: For input string: "r"

#該当のソースコード(サーブレット部分)

java

package calender; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Calendar; import javax.servlet.RequestDispatcher; import javax.servlet.ServletContext; 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 Calender */ @WebServlet("/Calender") public class Calender extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public Calender() { 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.setContentType("text/html;charset=UTF-8"); //response.getWriter().append("Served at: ").append(request.getContextPath()); PrintWriter out = response.getWriter(); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub //doGet(request, response); // formから必須項目値を取得 String years = request.getParameter("year"); String months = request.getParameter("month"); String days = request.getParameter("day"); String title = request.getParameter("title"); int year=0; int month=0; int day=0; try { //formの値を数値へ変換 year = Integer.parseInt(years); month = Integer.parseInt(months); day = Integer.parseInt(days); }catch(NumberFormatException e) { //間違っていた場合は入力フォームへ戻る ServletContext ctx = getServletContext(); RequestDispatcher dispatcher = ctx.getRequestDispatcher("/new.jsp"); dispatcher.forward(request, response); } //formから補足項目値を取得する準備 String starttimes="0"; String startminites="0"; String lasttimes="0"; String lastminites="0"; if(title==null) { //間違っていた場合は入力フォームへ戻る ServletContext ctx = getServletContext(); RequestDispatcher dispatcher = ctx.getRequestDispatcher("/new.jsp"); dispatcher.forward(request, response); }else { //formから補足項目値を取得 starttimes = request.getParameter("starttime"); startminites = request.getParameter("startminite"); lasttimes = request.getParameter("lasttime"); lastminites = request.getParameter("lastminite"); } int starttime; int startminite; int lasttime; int lastminite; //日付・時間へ変換 Calendar cl = Calendar.getInstance(); int daydate; int starttimedate; int lasttimedate; try { lasttime = Integer.parseInt(lasttimes); lastminite = Integer.parseInt(lastminites); }catch(NumberFormatException e2) { lasttime = 0; lastminite = 0; } try { starttime = Integer.parseInt(starttimes); startminite = Integer.parseInt(startminites); }catch(NumberFormatException e3){ starttime = 0; startminite = 0; } // formの値に間違いがないかチェック if(lasttime>=starttime && startminite<60 && lastminite<60) { //日付・時間へ変換 cl.set(year,month,day,starttime,startminite); daydate = cl.get(Calendar.DATE); starttimedate = cl.get(Calendar.HOUR_OF_DAY); cl.set(year,month,day,lasttime,lastminite); lasttimedate = cl.get(Calendar.HOUR_OF_DAY); String url = ("/Calendars/calender.jsp"); response.sendRedirect(url); }else { //間違っていた場合は入力フォームへ戻る ServletContext ctx = getServletContext(); RequestDispatcher dispatcher = ctx.getRequestDispatcher("/new.jsp"); dispatcher.forward(request, response); } //データベースへの接続準備 Connection conn = null; String url = "-省略-"; String user = "-省略-"; String password = "-省略-"; //データベースへ接続 try{ conn = DriverManager.getConnection(url, user, password); System.out.println("データベース接続に成功しました"); }catch (SQLException e){ System.out.println("データベースにつなげません"); System.out.println("SQLException:" + e.getMessage()); } } }

#該当のソースコード(JSP部分)

html

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.util.Calendar"%> <%@ page import="java.sql.*" %> <% //選択した日付データを自動入力 String syear = request.getParameter("year"); String smonth = request.getParameter("month"); String sday = request.getParameter("day"); int year; int month; int day; Calendar cl = Calendar.getInstance(); int nowyear = cl.get(Calendar.YEAR); int nowmonth = cl.get(Calendar.MONTH)+1; int nowday = cl.get(Calendar.DATE); //日付データが空の場合は現在日付を表示 if (syear==null){ year = nowyear; month = nowmonth; day = nowday; }else{ year = Integer.parseInt(syear); month = Integer.parseInt(smonth); day = Integer.parseInt(sday); } cl.set(year,month,day); %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <link rel="stylesheet" href="new.css"> <title>calender/new</title> </head> <body> <main> <h1>新規予定追加</h1> <form class="new" action="Calender" method="POST"> <input class="days index" type="text" name="year" value="<%= year %>"> <input class="days index" type="text" name="month" value="<%= month %>"> <input class="days index" type="text" name="day" value="<%= day %>"><br> <input class="index time" type="text" name="starttime">:<input class="index time" type="text" name="startminite"><span class="time"></span> <input class="index time" type="text" name="lasttime">:<input class="index time" type="text" name="lastminite"><br> <input class="index title" type="text" name="title" placeholder="予定タイトル"><br> <textarea class="index text" name="detail" rows="8" placeholder="予定詳細"></textarea><br> <input class="index" type="submit" value="新規予定追加"> </form> </main> <a class="a" href="calender.jsp">カレンダーへ戻る</a> </body> </html>

補足情報

OS:windows10
IDE:Eclipse

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

JSP

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

Null

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

Java

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

サーブレット

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

Eclipse

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