javaプログラムで作成したクラスをjspで表示させる方法について
解決済
回答 1
投稿
- 評価
- クリップ 0
- VIEW 1,467
■開発環境
Eclipse Java EE IDE for Web Developers(Ver4.5.2)
Tomcat(v7.0)
http://localhost:8080/schedule/csvchk.jsp
にアクセスして下記の3つのクラスを実行して結果を表示させる
のにはどうしたらいいでしょうか?
[schedule]プロジェクトの中に[basic]パッケージを作成
「exec01.java」「FRead.java」「FieldChk.java」を作成しました。
public class exec01 {
public static void main(String[] args) {
// FieldChkクラスをインスタンス化する
FieldChk Chk = new FieldChk("C:\\sample.csv");
// ファイル読み込みメソッドの実施
Chk.read();
//ファイル読み込み件数の表示
System.out.println(Chk.getCount());
// チェック
if(Chk.check1() == true) {
System.out.println("正常処理!!");
}
}
}
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class FRead {
public static String[] getLines(String fileName) {
List<String> list = new ArrayList<String>();
BufferedReader br = null;
try {
/* 入力ストリームの読み込み。
* ここでCSVファイルの文字コードを設定しないと文字化けします。
* 読み込むファイルの文字コード(SJIS) */
br = new BufferedReader(new InputStreamReader(new FileInputStream(fileName), "SJIS"));
String line = null;
// ファイル読み込み
while((line = br.readLine()) != null) {
list.add(line);
}
// br.close();
} catch (IOException err) {
err.printStackTrace();
} finally {
if(br != null) {
try {
br.close();
} catch (IOException ex) {
// Do nothing
}
}
}
return list.toArray(new String[0]);
}
}
import java.util.regex.Pattern;
public class FieldChk {
// private ファイル名;
private String fname;
// private 読み込みバッファ;
String[] csv;
//csv読み込み件数
int readcount = 0;
/* コンストラクタ(引数){
* 引数をファイル名に保持
* } */
public FieldChk(String fname) {
this.fname = fname;
}
public FieldChk(int readcount) {
this.readcount = readcount;
}
public void read() {
//FReadクラスでファイルを読み込んで、読み込みバッファに格納
csv = FRead.getLines(fname);
}
public int getCount() {
return csv.length;
}
public boolean check1() {
// 読み込みバッファを使ってチェック1処理
// 「FieldChk01」の処理
String line;
//読み込み行数
int readcount = 0;
int count = 0;
for(count = 0; count < csv.length; count++) {
line = csv[count];
String[] columns = line.split(",", -1);
readcount++;
Pattern p1 = Pattern.compile("^[0-9]+$"); // 番号
Pattern p2 = Pattern.compile("^[0-9]{3}-[0-9]{4}-[0-9]{4}$"); // 携帯番号
//Pattern p3 = Pattern.compile("^[a-zA-Z]{3}[0-9]{4}$"); //社員番号(英数字)
// 数字が含まれていればOK(社員番号)
Pattern p3 = Pattern.compile("^[0-9a-zA-Z]+$"); //社員番号(英数字文字のみが1文字以上)
Pattern p4 = Pattern.compile("^[^\\d]+$"); // 簡単な正規表現(単純に数字が含まれていないというのを確認)
for(int j = 0; j < columns.length; j++) {
//データ型チェック開始
if(j == 0 && p3.matcher(columns[j]).matches() == false) {
System.out.println(readcount + "行目の" + "【1列目】入力規則違反。【入力値: " + columns[j] + "】");
return false;
} else if(j == 1 && p4.matcher(columns[j]).matches() == false) {
//if(j == 1 && p4.matcher(columns[j]).matches() == false) {
System.out.println(readcount + "行目の" + "【2列目】入力規則違反。【入力値: " + columns[j] + "】");
return false;
} else if(j == 2 && p1.matcher(columns[j]).matches() == false) {
System.out.println(readcount + "行目の" + "【3列目】入力規則違反。【入力値: " + columns[j] + "】");
return false;
} else if(j == 3 && p2.matcher(columns[j]).matches() == false) {
System.out.println(readcount + "行目の" + "【4列目】入力規則違反。【入力値: " + columns[j] + "】");
return false;
}
}
}
return true;
}
}
[WebConetent]フォルダの[WEB-INF]フォルダ内に[csvchk.jsp]を作成して
結果を表示させたいと考えています。
<%@page contentType="text/html; charset=UTF-8" %>
<%@page import="basic.exec01" %>
<%@page import="basic.FRead" %>
<%@page import="basic.FieldChk" %>
<html><body>
<h3>CSVチェック</h3>
ここに結果を表示したい
</body></html>
javaプロジェクト上では正常に動作しました。サーブレットを利用して
jspで結果を表示させるにはどうしたらいいでしょうか。
ご教授お願い致します。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
<%@ page import="パッケージ名.クラス名" %>
でjsp側で読み込んで、
<%
クラス名 変数 = new クラス名
%>
<%
変数.getLine(String 引数)
%>
で実行できるはずです。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.34%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2016/06/23 08:42
自分で作成してみました
````java
<%@page contentType="text/html; charset=utf-8" %>
<%@page import="basic.FieldChk" %>
<%@page import="basic.FRead" %>
<html><body>
<h3>csvチェック</h3>
<%
FieldChk Chk = new FieldChk("C:\\sample.csv");
Chk.read();
// チェック
if(Chk.check1() == true && Chk.check2() == true && Chk.check3() == true) {
System.out.println("CSVデータは正常です。(読込データ:" + Chk.getCount() + "件)");
}
%>
<%
Chk.getLine(String ??)
%>
</body></html>
````
??の引数はこの場合、何が入るのでしょうか?
宜しくお願いします。
2016/06/23 09:01
String fileName = "読み込みたいファイル名";
Chk.getLine(fileName);
%>
ですかね。
2016/06/23 09:05
FieldChk のクラスは
getLine メソッドがないような・・・!
ただしくは、
Chk.FieldChk(fileName);
なのかなと思います。
public FieldChk(String fname) {
this.fname = fname; // ここでファイル名をメンバー変数へ格納
}
2016/06/23 09:14
ご教授いただいた通りにしたのですが、「メソッド FieldChk(String) は型 FieldChk で未定義です」と表示されてしまいます。
宜しくお願い致します。
2016/06/23 09:20
ファイル内容を表示するのであれば、「FRead#getLines()」を呼び出すことになりますかね。ただ、戻り値が「String[]」なので、そのままprintできないかもしれません。その場合、配列をループで回しながら出力するのが良いかと思います。
2016/06/23 09:23
と思っていたのですが、
public FieldChk(String fname) {
this.fname = fname;
}
public FieldChk(int readcount) {
this.readcount = readcount;
}
メソッド名と引数の個数が重複してしていしています。
オーバーロード すれば、上記指定はかのですがね。
メソッド名を変更する。
上記を試してみてください。
2016/06/23 09:45
上記の重複箇所は削除して実行してみましたが、、「メソッド FieldChk(String) は型 FieldChk で未定義です」と表示されてしまいます。
[out.println("CSVデータは正常です。(読込データ:" + Chk.getCount() + "件)");]
としてブラウザ上に読込件数は表示できました。
しかし、「FieldChk」クラスで表示しているメッセージ(例:System.out.println("【社員番号】に重複データがあります。値:" + user1);)をブラウザ上に表示させるにはどうしたらいいでしょうか?
宜しくお願いします。
2016/06/23 09:49
宜しくお願いします。