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

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

ただいまの
回答率

88.34%

javaプログラムで作成したクラスをjspで表示させる方法について

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,467

kumakumatan

score 176

■開発環境 
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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

<%@ page import="パッケージ名.クラス名" %>

でjsp側で読み込んで、

<%
クラス名 変数 = new クラス名
%>
<%
変数.getLine(String 引数)
%>

で実行できるはずです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 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

    メッセージは「System.out.println(readcount + "行目の" + "【1列目】入力規則違反。【入力値: 」などの表示です。
    宜しくお願いします。

    キャンセル

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

  • ただいまの回答率 88.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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