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

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

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

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

Java

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

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

解決済

1回答

4514閲覧

jspでインポートしたクラスファイルのメッセージ表示について

kumakumatan

総合スコア213

JSP

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

Java

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

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

0クリップ

投稿2016/06/23 02:25

■開発環境
Eclipse Java EE IDE for Web Developers(Ver4.5.2)
Tomcat(v7.0)

http://localhost:8080/schedule/csvchk.jsp
にアクセスして下記の3つのクラスを実行して結果を表示させる
のにはどうしたらいいでしょうか?

[schedule]プロジェクトの中に[basic]パッケージを作成
「FRead.java」「FieldChk.java」を作成しました。

java

1package basic; 2 3/* 4 * ファイル読み込みクラス(文字コードSJIS読み込み) 5 */ 6 7import java.io.BufferedReader; 8import java.io.FileInputStream; 9import java.io.IOException; 10import java.io.InputStreamReader; 11import java.util.ArrayList; 12import java.util.List; 13 14public class FRead { 15 public static String[] getLines(String fileName) { 16 17 // インターフェースでオブジェクトを参照する 18 // 新たなコードで原型を使用しない 19 // https://www.amazon.co.jp/EFFECTIVE-JAVA-Java-Joshua-Bloch/dp/4621066056 20 // ArrayList list = new ArrayList(); 21 List<String> list = new ArrayList<String>(); 22 23 BufferedReader br = null; 24 try { 25 /* 入力ストリームの読み込み。 26 * ここでCSVファイルの文字コードを設定しないと文字化けします。 27 * 読み込むファイルの文字コード(SJIS) */ 28 br = new BufferedReader(new InputStreamReader(new FileInputStream(fileName), "SJIS")); 29 30 String line = null; 31 // ファイル読み込み 32 while((line = br.readLine()) != null) { 33 list.add(line); 34 35 } 36 37 // br.close(); 38 39 } catch (IOException err) { 40 // 開発中は、例外を握りつぶさないこと 41 err.printStackTrace(); 42 } finally { 43 // リソースの終了処理は finally句で実施する 44 if(br != null) { 45 try { 46 br.close(); 47 } catch (IOException ex) { 48 // Do nothing 49 } 50 } 51 } 52 // toArrayメソッドの使用方法に誤り 53 // https://docs.oracle.com/javase/jp/6/api/java/util/List.html#toArray(T[]) 54 // return (String[]) list.toArray(new String[list.size()]); 55 return list.toArray(new String[0]); 56 57 } 58}

java

1package basic; 2 3import java.util.ArrayList; 4import java.util.HashSet; 5import java.util.List; 6import java.util.Set; 7import java.util.regex.Pattern; 8 9public class FieldChk { 10 11 // private ファイル名定義; 12 private String fname; 13 // private 読み込みバッファ定義; 14 private String[] csv; 15 16 /* コンストラクタ(引数){ 17 * 引数をファイル名に保持 18 * } */ 19 public FieldChk(String fname) { 20 this.fname = fname; 21 } 22 23 //戻り値なし 24 25 public void read() { 26 //FReadクラスでファイルを読み込んで、読み込みバッファに格納(全ての行を読み込む) 27 //readメソッド後(この処理)、読み込んだデータは【csv】に入っています。 28 //一度だけCSVファイルを読み込む 29 csv = FRead.getLines(fname); 30 } 31 32 /* 外部クラスから読みこみ件数(csv.length)を取得するため、 33 * ゲッター定義する。他のクラスから値をする時は、「インスタンス変数.getCount()」 */ 34 35 public int getCount() { 36 return csv.length; 37 } 38 39 // 【処理1】CSV配列数のチェック(A~D列以外はfalse) 40 // 「boolean」型で処理が「true」か「false」を判定 41 42 public boolean check1() { 43 44 //読み込み行 45 String line; 46 47 //読み込み行数(カウント) 48 int readcount = 0; 49 50 //配列数 51 int len1 = 0; 52 53 //csvファイルが読み終わるまで 54 for(int count = 0; count < csv.length; count++) { 55 //line変数にcsv読み込み行配列の挿入 56 line = csv[count]; 57 // 「,」区切りでcolums変数(配列)に挿入 58 String[] columns = line.split(",", 0); 59 //読み込み件数カウント(+) 60 readcount++; 61 //配列数定義 62 len1 = columns.length; 63 64 //for(int j = 0; j < columns.length; j++) { 65 //配列数オーバーの行表示 66 if(len1 > 4) { 67 //取り出した配列が終了するまでチェック開始 68 69 System.out.println(readcount + "行目の" + len1 + "列目に不正入力データがあります。"); 70 System.out.println("A列~D列にのみデータ入力して下さい。"); 71 72 return false; 73 } 74 //} 75 76 } 77 return true; 78 79 } 80 81 // 【処理2】入力データのデータ型チェック処理 82 // 「boolean」型で処理が「true」か「false」を判定 83 public boolean check2() { 84 // 読み込みバッファを使ってチェック処理 85 try { 86 //読み込み行 87 String line; 88 89 //読み込み行数(カウント) 90 int readcount = 0; 91 //csvファイルが読み終わるまで 92 for(int count = 0; count < csv.length; count++) { 93 //line変数にcsv読み込み行配列の挿入 94 line = csv[count]; 95 // 「,」区切りでcolums変数(配列)に挿入 96 String[] columns = line.split(",", -1); 97 //読み込み件数カウント(+) 98 readcount++; 99 100 // パターンクラスにて正規表現のチェック 101 Pattern p1 = Pattern.compile("^[0-9]+$"); // 内線番号 102 Pattern p2 = Pattern.compile("^[0-9]{3}-[0-9]{4}-[0-9]{4}$"); // 携帯番号 103 //Pattern p3 = Pattern.compile("^[a-zA-Z]{3}[0-9]{4}$"); //社員番号(英数字) 104 // 数字が含まれていればOK(社員番号) 105 Pattern p3 = Pattern.compile("^[0-9a-zA-Z]+$"); //社員番号(英数字文字のみが1文字以上) 106 Pattern p4 = Pattern.compile("^[^\\d]+$"); // 簡単な正規表現(単純に数字が含まれていないというのを確認) 107 // パターンクラスにて正規表現のチェック 108 109 //取り出した配列が終了するまでチェック開始 110 for(int j = 0; j < columns.length; j++) { 111 112 //データ型入力値のチェック開始(正規表現) 113 if(j == 0 && p3.matcher(columns[j]).matches() == false) { 114 System.out.println(readcount + "行目の" + "【1列目】入力規則違反。【入力値: " + columns[j] + "】"); 115 return false; 116 } else if(j == 1 && p4.matcher(columns[j]).matches() == false) { 117 //if(j == 1 && p4.matcher(columns[j]).matches() == false) { 118 System.out.println(readcount + "行目の" + "【2列目】入力規則違反。【入力値: " + columns[j] + "】"); 119 return false; 120 } else if(j == 2 && p1.matcher(columns[j]).matches() == false) { 121 System.out.println(readcount + "行目の" + "【3列目】入力規則違反。【入力値: " + columns[j] + "】"); 122 return false; 123 } else if(j == 3 && p2.matcher(columns[j]).matches() == false) { 124 System.out.println(readcount + "行目の" + "【4列目】入力規則違反。【入力値: " + columns[j] + "】"); 125 return false; 126 } 127 //データ型入力値のチェック終了(正規表現) 128 129 } 130 //取り出した配列が終了するまでチェック終了 131 132 } 133 134 return true; 135 // }catch (IOException e) { 136 // e.printStackTrace(); 137 138 } finally { 139 // リソースの終了処理は finally句で実施する 140 } 141 142 } 143 144 // 【処理3】入力データの重複チェック処理 145 // 「boolean」型で処理が「true」か「false」を判定 146 public boolean check3() { 147 List<String> result1 = new ArrayList<String>(); 148 List<String> result2 = new ArrayList<String>(); 149 List<String> result3 = new ArrayList<String>(); 150 List<String> result4 = new ArrayList<String>(); 151 152 for(String line : csv) { 153 result1.add(line.split(",")[0]); 154 result2.add(line.split(",")[1]); 155 result3.add(line.split(",")[2]); 156 result4.add(line.split(",")[3]); 157 } 158 159 // 重複チェックオブジェクト 160 Set<String> set1 = new HashSet<String>(); 161 Set<String> set2 = new HashSet<String>(); 162 Set<String> set3 = new HashSet<String>(); 163 Set<String> set4 = new HashSet<String>(); 164 165 //社員番号列(A列) 166 for(String user1 : result1) { 167 //setに追加してみて、追加できなかった(重複していた)場合 168 if(!set1.add(user1)) { 169 System.out.println("【社員番号】に重複データがあります。値:" + user1); 170 return false; 171 172 } 173 } 174 175 //社員名列(B列) 176 for(String user2 : result2) { 177 //setに追加してみて、追加できなかった(重複していた)場合 178 if(!set2.add(user2)) { 179 System.out.println("【社員名】に重複データがあります。値:" + user2); 180 return false; 181 182 } 183 } 184 185 //内線番号列(C列) 186 for(String user3 : result3) { 187 //setに追加してみて、追加できなかった(重複していた)場合 188 if(!set3.add(user3)) { 189 System.out.println("【番号】に重複データがあります。値:" + user3); 190 return false; 191 192 } 193 } 194 195 //電話番号列(D列) 196 for(String user4 : result4) { 197 //setに追加してみて、追加できなかった(重複していた)場合 198 if(!set4.add(user4)) { 199 System.out.println("【電話番号】に重複データがあります。値:" + user4); 200 return false; 201 202 } 203 } 204 205 return true; 206 } 207 208}

[WebConetent]フォルダの[WEB-INF]フォルダ内に[csvchk.jsp]を作成して
結果を表示させたいと考えています。

jsp

1<%@page contentType="text/html; charset=utf-8" %> 2<%@page import="basic.FieldChk" %> 3<%@page import="basic.FRead" %> 4 5<html><body> 6 7<h3>csvチェック</h3> 8 9<% 10//out.println(hello); 11FieldChk Chk = new FieldChk("C:\\ws01\\CsvRead\\src\\csvCheck\\sample_携帯内線.csv"); 12Chk.read(); 13 14//System.out.println("読み込み件数" + Chk.getCount() + "件"); 15 16// チェック 17if(Chk.check1() == true && Chk.check2() == true && Chk.check3() == true) { 18 System.out.println("CSVデータは正常です。(読込データ:" + Chk.getCount() + "件)"); 19 out.println("CSVデータは正常です。(読込データ:" + Chk.getCount() + "件)"); 20} 21%> 22 23</body></html>

この場合、jsp側で「out.println("CSVデータは正常です。(読込データ:" + Chk.getCount() + "件)");」
にすると、「CSVデータは正常です。(読込データ:xxx件) 」と表示はされます。
正常でない場合、FieldChkクラスで表示している[System.out.println(readcount + "行目の" + len1 + "列目に不正入力データがあります。");]
をブラウザ上に表示させるにはどのようにしたらよろしいでしょうか。

ご教授宜しくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

FieldChkクラスでチェックしたエラーの内容を格納する変数を用意し、それぞれのチェックメソッドでSystem.out.printlnでコンソールに出力している内容を追加した変数に格納しておけば、あとはJSPで表示するだけです。

エラー情報を何の型にしておくかはお任せしますが、一番簡単なのはStringでしょうか。

java

1public class FieldChk { 2 private String errorMessage; 3 4 public String getErrorMessage() { 5 return this.errorMessage; 6 } 7 8...... 9 10 public boolean check1() { 11 ..... 12 errorMessage = "【社員番号】に重複データがあります。値:" + user1; 13 } 14}

jsp

1<% 2// チェック 3if(Chk.check1() == true && Chk.check2() == true && Chk.check3() == true) { 4 System.out.println("CSVデータは正常です。(読込データ:" + Chk.getCount() + "件)"); 5 out.println("CSVデータは正常です。(読込データ:" + Chk.getCount() + "件)"); 6} else { 7 out.println(Chk.getErrorMessage()); 8} 9%>

複数件のメッセージを出したい、表示順を修正したいなどあるかと思いますが、適宜拡張してください。

投稿2016/06/23 04:01

A-pZ

総合スコア12011

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

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

kumakumatan

2016/06/23 06:31

ご回答ありがとうございます。表示できました。複数件のメッセージを表示させたい場合、FieldChk クラス側に ````java private String[] errorMessage; public String[] getErrorMessage() { return this.errorMessage; } errorMessage = (readcount + "行目の" + len1 + "列目に不正入力データがあります。"); errorMessage = ("A列~D列にのみデータ入力して下さい。"); ```` とメッセージが2つある場合、配列に格納して、jsp側で表示表示させるにはどのように指定したらいいでしょうか? 宜しくお願い致します。
kumakumatan

2016/06/24 02:19

ご教授ありがとうございます。 ArrayList にて表示する事ができました。
A-pZ

2016/06/24 03:13

d(・ω・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問