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

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

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

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Java

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

JavaScript

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

Eclipse

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

Q&A

解決済

2回答

359閲覧

DBの更新(Webアプリケーション)

cayribaka

総合スコア19

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Java

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

JavaScript

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

Eclipse

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

0グッド

0クリップ

投稿2017/08/10 06:23

編集2017/08/17 09:07

現在、趣味で体重管理アプリケーションなるものを作成しております。
開発環境はEclipse4.6
言語はJavaです。
ユーザーの名前や身長、体重を登録する画面を作成しているのですが、DBのデータを更新することができません。
DBとの接続はDAOを使っています。

Java

1package servlet; 2//import文省略 3@WebServlet("/SetUp") 4public class SetUp extends HttpServlet { 5 private static final long serialVersionUID = 1L; 6 7 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 8 HttpSession session = request.getSession(); 9 //StringBuffer urlBuffer = request.getRequestURL(); 10 //String url = urlBuffer.toString(); 11 User loginUser = (User) session.getAttribute("loginUser"); 12 13 //データの読み込み 14 if(loginUser != null){ 15 request.setAttribute("userName",loginUser.getUserName()); 16 //System.out.println("userName"); 17 request.setAttribute("height", loginUser.getHeight() != 0 ? String.format("%.2f", loginUser.getHeight()) : ""); 18 //System.out.println("height"); 19 request.setAttribute("targetWeight", loginUser.getHeight() != 0 ? String.format("%.2f", loginUser.getTargetWeight()) : ""); 20 //System.out.println("targetWeight"); 21 22 RequestDispatcher requestDispatcher = request.getRequestDispatcher("/WEB-INF/jsp/setUp.jsp"); 23 requestDispatcher.forward(request, response); 24 } 25 else { 26 response.sendRedirect("/bodyMassIndex/"); 27 } 28 } 29 30 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 31 //データの書き込み(更新)名前・身長・目標体重を送信する。 32 33 String errorMsg = ""; 34 //入力された値のチェック(name) 35 try { 36 boolean judge = false; // 不正な入力値ではないかどうか 37 boolean noInputText = false; // 未入力のテキストボックスが存在するかどうか 38 request.setCharacterEncoding("utf-8"); 39 HttpSession session = request.getSession(); 40 User loginUser = (User) session.getAttribute("loginUser"); 41 //フォームに入力されたデータの取得 42 String userName =request.getParameter("userName"); /* 入力された名前を代入 */ 43 if((userName.length() == 0)) { 44 userName = loginUser.getUserName(); 45 noInputText = true; 46 } 47 else if (userName.length() > 64) { 48 userName = loginUser.getUserName(); 49 errorMsg = "名前は64文字以内で入力してください"; 50 throw new IllegalArgumentException(); 51 } 52 else { 53 judge = true; 54 } 55 56 //フォームに入力されたheightの値を取得する 57 String height = request.getParameter("height"); 58 // 以下、入力された値の桁数チェック 59 60 int seisuKeta = 0; 61 int shosuKeta = 0; 62 int conmaIndex = height.indexOf("."); 63 if(conmaIndex != -1) { 64 seisuKeta = height.substring(0, conmaIndex).length(); 65 shosuKeta = height.substring(conmaIndex + 1).length(); 66 } 67 else { 68 seisuKeta = height.length(); 69 } 70 if(3 < seisuKeta || 2 < shosuKeta) { 71 errorMsg = "身長の整数桁は3桁、小数点以下の桁は2桁までで入力し直してください。"; 72 throw new IllegalArgumentException(); 73 } 74 75 // 桁数チェック終わり 76 77 if(height.length() == 0) { 78 //身長はdouble型で格納されなければならないので、現在String型のheightをdouble型のdheightに変換する。 79 double dheight = Double.parseDouble(height); 80 dheight = loginUser.getHeight(); 81 noInputText = true; 82 } 83 else { 84 double dheight = Double.parseDouble(height); 85 dheight = loginUser.getHeight(); 86 errorMsg = "現在の身長は、数字で入力してください。"; 87 if(dheight <= 0 || height.indexOf("Infinity") != -1 || height.indexOf("NaN") != -1) { 88 errorMsg = "身長は正の実数で入力してください。"; 89 throw new IllegalArgumentException(); 90 } 91 judge = true; 92 } 93 94 //フォームに入力されたtargetWeightの値を取得する。 95 String targetWeight = request.getParameter("targetWeight"); 96 //入力された値の桁数チェック 97 98 int seisuKeta2 = 0; 99 int shosuKeta2=0; 100 int conmaIndex2 = targetWeight.indexOf("."); 101 if(conmaIndex2 !=-1){ 102 seisuKeta2=targetWeight.substring(0, conmaIndex2).length(); 103 shosuKeta2=targetWeight.substring(conmaIndex2 + 1).length(); 104 } 105 else{ 106 seisuKeta2=targetWeight.length(); 107 } 108 if(3 < seisuKeta2 || 2 < shosuKeta2) { 109 errorMsg = "目標体重の整数桁は3桁、小数点以下の桁は2桁までで入力し直してください。"; 110 throw new IllegalArgumentException(); 111 } 112 //桁数チェック終わり 113 114 if(targetWeight.length() == 0) { 115 //目標体重はdouble型で格納されなければならないので、現在String型のtargetWeightをdouble型のdtargetWeightに変換する。 116 double dtargetWeight = Double.parseDouble(targetWeight); 117 dtargetWeight = loginUser.getTargetWeight(); 118 noInputText = true; 119 } 120 else { 121 errorMsg = "目標体重は、数字で入力してください。"; 122 //目標体重はdouble型で格納されなければならないので、現在String型のtargetWeightをdouble型のdtargetWeightに変換する。 123 double dtargetWeight =Double.parseDouble(targetWeight);/* 入力された目標体重を代入 */ 124 if(dtargetWeight <= 0 || targetWeight.indexOf("Infinity") != -1 || targetWeight.indexOf("NaN") != -1) { 125 errorMsg = "目標体重は正の実数で入力してください。"; 126 throw new IllegalArgumentException(); 127 } 128 judge = true; 129 } 130 request.setAttribute("userName", ""); 131 request.setAttribute("height", ""); 132 request.setAttribute("targetWeight", ""); 133 if(judge) { 134 if(noInputText) { 135 request.setAttribute("errorMessage", "情報を入力して下さい"); 136 RequestDispatcher requestDispatcher = request.getRequestDispatcher("/WEB-INF/jsp/setUp.jsp"); 137 requestDispatcher.forward(request, response); 138 } 139 140 //データの書き込み(更新)名前・身長・目標体重を送信する。 141 else { 142 SetUpLogic sul=new SetUpLogic(); /* SetUpLogicのインスタンス化 */ 143 double dheight = Double.parseDouble(height); 144 dheight = loginUser.getHeight(); 145 double dtargetWeight = Double.parseDouble(targetWeight); 146 dtargetWeight = loginUser.getTargetWeight(); 147 boolean isUpdate =sul.execute(userName, dheight, dtargetWeight, loginUser); /* インスタンス化した変数でexecuteメソッドを呼ぶ */; 148 if(isUpdate) { 149 request.setAttribute("userName",loginUser.getUserName()); 150 request.setAttribute("height", String.format("%.2f", loginUser.getHeight())); 151 request.setAttribute("targetWeight",String.format("%.2f", loginUser.getTargetWeight())); 152 RequestDispatcher requestDispatcher = request.getRequestDispatcher("/WEB-INF/jsp/setUp.jsp"); 153 requestDispatcher.forward(request, response); 154 } 155 else { 156 response.sendRedirect("SetUp");/* updateに失敗したら、ここに来る */ 157 } 158 } 159 } 160 else { 161 request.setAttribute("errorMessage", "情報を入力して下さい"); 162 RequestDispatcher requestDispatcher = request.getRequestDispatcher("/WEB-INF/jsp/setUp.jsp"); 163 requestDispatcher.forward(request, response); 164 } 165 } catch (IllegalArgumentException e) { 166 request.setAttribute("userName", ""); 167 request.setAttribute("height", ""); 168 request.setAttribute("targetWeight", ""); 169 request.setAttribute("errorMessage", errorMsg); 170 RequestDispatcher requestDispatcher = request.getRequestDispatcher("/WEB-INF/jsp/setUp.jsp"); 171 requestDispatcher.forward(request, response); 172 } 173 } 174 else { 175 request.setAttribute("userName", ""); 176 request.setAttribute("height", ""); 177 request.setAttribute("targetWeight", ""); 178 RequestDispatcher requestDispatcher = request.getRequestDispatcher("/WEB-INF/jsp/setUp.jsp"); 179 requestDispatcher.forward(request, response); 180 } 181 } 182

JSP

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<!DOCTYPE html"> 4<html> 5<head> 6<link rel="stylesheet" type="text/css" href="css/menu.css"/> 7<link rel="stylesheet" type="text/css" href="css/setUp.css?20170811"/> 8<meta charset="UTF-8"> 9<title>体重管理アプリケーション</title> 10<script src="js/lib/jquery-3.2.1.min.js"></script> 11<script src="js/menu.js"></script> 12<script type="text/javascript"> 13function disp(userId){ 14 myRet = confirm("情報を更新してよろしいですか?"); 15 16 if ( myRet == true ){ 17 var userName = document.getElementById('text1').value; 18 var height = document.getElementById('text2').value; 19 var targetWeight = document.getElementById('text3').value; 20 21 location.href= ' /bmi/SetUp?userName=' + userName + '&height=' + height + '&targetWeight=' + targetWeight; 22 }else{ 23 alert("キャンセルされました"); 24 25 } 26 } 27</script> 28 29</head> 30<body onload="selectColorChange(4);"> 31 <jsp:include page="menu.jsp"/> 32 <div id="div1"> 33 <h1>設定情報</h1> 34 <p id="errorMessage"><%= request.getAttribute("errorMessage") != null ? request.getAttribute("errorMessage") : "" %></p> 35 <input id="text1" type="text" name="userName" value="<%= request.getAttribute("userName") %>" placeholder="お名前"/> 36 <br/> 37 <input id="text2" type="text" name="height" value="<%= request.getAttribute("height") %>" placeholder="現在の身長"/>cm 38 <br/> 39 <input id="text3" type="text" name="targetWeight" value="<%= request.getAttribute("targetWeight") %>" placeholder="目標体重"/>kg 40 <br/> 41 <input id="button1" type="submit" value="保存" onclick="disp()"/> 42 </div> 43</body> 44</html>

改めてコードを書き直しました。
エラー java.lang.NullPointerException servlet.SetUp.doGet(SetUp.java:63) javax.servlet.http.HttpServlet.service(HttpServlet.java:621) javax.servlet.http.HttpServlet.service(HttpServlet.java:728) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
は消えました。

値の受け取りはできますが、doPost()からの値の引き渡しができていないです。
ブラウザの入力のフォームに値を入力して、保存ボタンを押すと、ブラウザのアドレスバーにはこのように
http://localhost:xxxx/bmi/SetUp?userName=田中&height=169.00&targetWeight=50.00 値は入っています。
結局コードが長いです。すみません。

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

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

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

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

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

m.ts10806

2017/08/10 06:29

問題の切り分けを行いましょう。入力した内容はどこまで想定どおりに渡ってきていますか?サーバー・DB・システム いずれかエラーは出ていませんか?ログを確認してみてください。
cayribaka

2017/08/10 06:32

サーバの方にはエラーログが出ています。java.lang.NullPointerException servlet.SetUp.doGet(SetUp.java:63) javax.servlet.http.HttpServlet.service(HttpServlet.java:621) javax.servlet.http.HttpServlet.service(HttpServlet.java:728) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
cayribaka

2017/08/10 06:35

今はSetUpの画面を触れない状態です。webアプリケーションの他の画面からSetUpの画面に画面遷移すると500エラーが表示されます。
guest

回答2

0

DB更新ロジック前に、処理が止まっているため。

以下パラメタ"height"に対応するデータが取得できない場合戻り値がnullになるが、
チェックせずに、そのまま変数HeightsをString型として利用しているため。
値チェックしてください。

Java

1String Heights = request.getParameter("height"); 2 3// 中略 4 5int conmaIndex = Heights.indexOf(".");

1メソッドに色々書き過ぎている点、メソッド分け、クラス分けなどをすることを
検討されてください。

投稿2017/08/10 06:41

kanimaru

総合スコア1013

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

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

cayribaka

2017/08/10 06:54

回答ありがとうございます。 回答の //中略 の部分に"height"がnullかどうかを確認するためのコードを入力するコードを追記したら良いのでしょうか?
kanimaru

2017/08/10 07:02

他のパラメタも同様に必要かと思います。 nullだった場合の扱い、そもそもnullを許容するかなど仕様に依存しますので言及できません。 基本的には、入力情報(リクエストパラメタ)の入力値チェック(バリデーション)は行うと思います。
guest

0

ベストアンサー

StackTraceの読み方は、わかりますか?

サーバの方にはエラーログが出ています。

とのことですが、以下のStackTraceの読み方ですが、

Java

1java.lang.NullPointerException ← この例外が発生した 2servlet.SetUp.doGet(SetUp.java:63) ← ここで実行された 3javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 4javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 5org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)

SetUp.javaの63行目で NullPointerExceptionが発生しているという意味です。

63行目を見ると、kanimaruさんの指摘のとおり

Java

1int conmaIndex = Heights.indexOf(".");

となっており、ここでNullPointerが発生する原因は、Heightsがnullであることが推測できます。
対処方法は、コメントでやりとりしているように、

回答の //中略 の部分に"height"がnullかどうかを確認するためのコードを入力するコードを追記したら良いのでしょうか?

でよいです。確認するというより対処をするコードですかね。

対処したら、他でExceptionが発生するかもしれませんが、つど確認して修正してみてください。

投稿2017/08/16 10:25

momon-ga

総合スコア4820

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

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

cayribaka

2017/08/17 00:33

丁寧な回答をして頂きありがとうございます。 やってみます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問