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

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

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

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

Java

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

1565閲覧

コンパイルエラーの原因がわかりません。

Y.Mamoru

総合スコア47

JSP

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

Java

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/09/16 03:09

編集2020/09/16 03:57

〇やりたいこと
アンケート表を作成しています。
今は一度入力した内容をservletファイルでチェックして、エラーがあった場合にはjspファイルに戻して画面上部にエラー文を表示させようとしています。

〇困っていること
jspファイルに上部、エラー文を表示させたい箇所でコンパイルエラーが起こります。
これの原因がわかりません。

jsp

1<body> 2<H1>アンケートフォーム</H1> 3 <% DataBase db = new DataBase(); %> 4 <% 5 if(db.getError() != null){ %> 6 7 <p><%= System.out.println(db.getError()) %></p> //★★ 8 9 <% 10 }else{ 11 %> 12 <P>以下のアンケートフォームを入力して変更ボタンを押下してください</P>

dbは別のjavaファイルで、db.getErrorを定義しています。servletでエラーが起こればそれを受け取り(set)して、getErrorで受け取ることを定義しています。
またjspファイルの最初にjavaファイルのimportも完了しています。

起こるエラーは、
HTTPステータス 500 - JSPのクラスをコンパイルできません:
The server encountered an internal error that prevented it from fulfilling this request.
です。

調べてみると、引数がnullだったゆえに発生している事例が多かったので、
今回ならば、db.getError()がnullだからなのか、と考えましたが、
エラーが発生していない限りは、nullになるものだと考えています。

ずれた考え方をしてしまっている気がするのですが、
アドバイスを言お願いします。

以下全体のコードです。

jsp

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<%@ page import="Change.DataBase"%> 4<%@ page import="java.lang.*" %> 5<!DOCTYPE html> 6<html> 7<head> 8<meta charset="UTF-8"> 9<title>Change_task</title> 10<link rel="stylesheet" href="../CSS/Change.css"> 11<SCRIPT type="text/javascript" src="../js/Check_Change.js"></SCRIPT> 12</head> 13<body> 14<H1>アンケートフォーム</H1> 15 <% DataBase db = new DataBase(); %> 16 <% 17 if(db.getError() != null){ %> 18 19 <p><%= System.out.println(db.getError()) %></p> 20 21 <% 22 }else{ 23 %> 24 <P>以下のアンケートフォームを入力して変更ボタンを押下してください</P> 25 <FORM method="POST" name="question_form" id="form" action="/Change/ChangeServlet"> 26 <Input type="hidden" name="hiddenNO" value=<%= request.getParameter("ankeno") %>> 27 <input type="hidden" name="move" value="update"> 28 <TABLE class="table"> 29 <TR class="th1"> 30 <TH name="left-table">質問</TH> 31 <TH>回答</TH> 32 </TR> 33 34 ~中略~ 35 </TABLE> 36 <DIV class="send_div"> 37 <INPUT type="submit" class="send_button" value="変更" > 38 </DIV> 39 </FORM> 40 <FORM> 41 <DIV> 42 <INPUT type="button" class="reset" value="リセット" onClick="location.reload();"> 43 </DIV> 44 </FORM> 45 <% } %> 46</body> 47</html>

servlet

1package Change; 2 3import java.io.IOException; 4import java.sql.Connection; 5import java.sql.PreparedStatement; 6import java.sql.SQLException; 7import java.sql.Statement; 8 9import javax.servlet.ServletException; 10import javax.servlet.http.HttpServlet; 11import javax.servlet.http.HttpServletRequest; 12import javax.servlet.http.HttpServletResponse; 13 14 15public class ChangeServlet extends HttpServlet { 16 private static final long serialVersionUID = 1L; 17 18 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 19 request.setCharacterEncoding("utf-8"); 20 21 //前準備 22 String e; 23 int count = 0; 24 DataBase db = new DataBase(); 25 26 //各データを受け取って、条件に合うのか確かめる 27 //郵便番号 28 String p1 = request.getParameter("post_num1"); 29 String p2 = request.getParameter("post_num2"); 30 if(p1 != null && p1.length() ==3) { //郵便番号1がNullではなくかつ3桁か 31 count++; 32 }else { 33 e = "郵便番号1は3桁の数字で入力してください"; 34 db.setError(e); 35 request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response); 36 } 37 if(p2 != null && p2.length() ==4) { //郵便番号2がNullではなくかつ4桁か 38 count++; 39 }else { 40 e = "郵便番号2は4桁の数字で入力してください"; 41 db.setError(e); 42 request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response); 43 } 44 //住所チェック 45 String address = request.getParameter("address"); 46 if(address != null) { 47 count++; 48 }else { 49 e = "住所を入力してください"; 50 db.setError(e); 51 request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response); 52 } 53 //氏名 54 String name = request.getParameter("name"); 55 if(name != null ) { 56 count++; 57 }else { 58 e = "氏名を入力してください"; 59 db.setError(e); 60 request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response); 61 } 62 //年 63 String year = request.getParameter("year"); 64 if(year != null) { 65 count++; 66 }else { 67 e = "生まれ年を入力してください"; 68 db.setError(e); 69 request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response); 70 } 71 //月 72 String month = request.getParameter("month"); 73 if(month != null && month.length() <= 2 && Integer.parseInt(month) <= 12 && Integer.parseInt(month) >= 1) { 74 count++; 75 }else { 76 e = "生まれ月は1~12で入力してください"; 77 db.setError(e); 78 request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response); 79 } 80 //日 81 String date = request.getParameter("date"); 82 if(date != null && date.length() <= 2 && Integer.parseInt(date) <=31 && Integer.parseInt(date) >=1) { 83 count++; 84 }else { 85 e = "生まれ日は1~31で入力してください"; 86 db.setError(e); 87 request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response); 88 } 89 //血液 90 String blood = request.getParameter("blood"); 91 if(blood != null) { 92 count++; 93 }else { 94 e = "血液型を選択してください"; 95 db.setError(e); 96 request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response); 97 } 98 //意見 99 String opinion = request.getParameter("opinion"); 100 if(opinion != null && opinion.length() <= 200) { 101 count++; 102 }else { 103 e = "ご意見は200文字まで入力できます"; 104 db.setError(e); 105 request.getRequestDispatcher("/jsp/Change_Update.jsp").forward(request, response); 106 } 107 //総合 108 if(count == 10) { 109 //SQL文の準備(すべてのカラムにアンケート内容を入れるので、prepareを使って後からバインドさせる) 110 String sql ="UPDATE Information SET POSTNUM = ? , ADDRESS = ? , BIRTHYEAR = ? , BIRTHMONTH = ? , BIRTHDAY = ? , PHONE1 = ? , PHONE2 = ? , PHONE3 = ? , BLOOD = ? , BREAKFAST = ? , OPINION = ? WHERE NO = ?"; 111 //接続準備 112 Connection conn = null; 113 PreparedStatement smt = null; 114 //更新のコード 115 if(request.getParameter("move") == "update") { 116 //接続開始 117 try { 118 conn = DBManager.getConnection(); 119 //バインド用のSQLを準備 120 smt = conn.prepareStatement(sql); 121 122 //バインド開始 123 smt.setString(1, (request.getParameter("post_num1") + request.getParameter("post_num2"))); 124 smt.setString(2, request.getParameter("address")); 125 smt.setString(3, request.getParameter("year")); 126 smt.setString(4, request.getParameter("month")); 127 smt.setString(5, request.getParameter("date")); 128 smt.setString(6, request.getParameter("phone_num1")); 129 smt.setString(7, request.getParameter("phone_num2")); 130 smt.setString(8, request.getParameter("phone_num3")); 131 smt.setString(9, request.getParameter("blood")); 132 smt.setString(10, request.getParameter("food")); 133 smt.setString(11, request.getParameter("opinion")); 134 smt.setString(12, request.getParameter("hiddenNO")); 135 //実行 136 smt.executeQuery(); 137 138 }catch(SQLException er) { 139 throw new ServletException(er); 140 }finally { 141 if(smt != null) { 142 try {smt.close();}catch(SQLException ignore) {} 143 } 144 if(conn != null) { 145 try {conn.close();}catch(SQLException ignore) {} 146 } 147 } 148 //登録をする場合のコード 149 }else if(request.getParameter("move") == "regist") { 150 //insertさせるNoは、今テーブルに入っている数+1なので、countを求めるSQL 151 String sql2 = "SELECT count(No) FROM Information"; 152 Statement smt2 = null; 153 154 //接続開始 155 try { 156 conn = DBManager.getConnection(); 157 //バインド用のSQLを準備 158 smt = conn.prepareStatement(sql); 159 //count用のSQL準備&実行 160 smt2 = conn.createStatement(); 161 count = smt2.executeUpdate(sql2); 162 163 //バインド開始 164 smt.setInt(1, count+1);//NOやからここより前にcount(No)の値をselectしておかないといけない。それプラス1 165 smt.setString(2, (request.getParameter("post_num1") + request.getParameter("post_num2"))); 166 smt.setString(3, request.getParameter("address")); 167 smt.setString(4, request.getParameter("year")); 168 smt.setString(5, request.getParameter("month")); 169 smt.setString(6, request.getParameter("date")); 170 smt.setString(7, request.getParameter("phone_num1")); 171 smt.setString(8, request.getParameter("phone_num2")); 172 smt.setString(9, request.getParameter("phone_num3")); 173 smt.setString(10, request.getParameter("blood")); 174 smt.setString(11, request.getParameter("food")); 175 smt.setString(12, request.getParameter("opinion")); 176 //実行 177 smt.executeQuery(); 178 179 }catch(SQLException er) { 180 throw new ServletException(er); 181 }finally { 182 if(smt != null) { 183 try {smt.close();}catch(SQLException ignore) {} 184 } 185 if(conn != null) { 186 try {conn.close();}catch(SQLException ignore) {} 187 } 188 } 189 } 190 191 192 request.getRequestDispatcher("/jsp/result.jsp").forward(request, response); 193 } 194 doGet(request, response); 195 } 196 197} 198

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

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

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

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

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

m.ts10806

2020/09/16 03:37

提示されたコードだけでは再現確認が出来ませんし、全体が分かりません。 コードは一通りご提示ください。でないとずれた考え方しているかどうかすらも判断できません。
Y.Mamoru

2020/09/16 03:57

確かにそうでした。 ただいまコードを追加しました。 よろしくお願いします。
guest

回答1

0

ベストアンサー

JSPの式( <%= %> )は、変数をHTMLへ出力するものです。
System.out.println の結果は void なので出力できません。

<% out.println(....); %> で良いかと。

投稿2020/09/16 04:02

A-pZ

総合スコア12011

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

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

Y.Mamoru

2020/09/16 04:10

いつもありがとうございます! コンパイルエラーがなくなりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問