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

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

ただいまの
回答率

90.51%

  • Java

    13830questions

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

  • JSP

    933questions

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

JSPプログラムでテキストファイルの1行目が一致しない。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 216

honjoriki

score 50

JSPプログラムにて、ログイン機能を実装したいと思い、テキストファイルに記載したIDとパスワードと、
HTMLフォームにて入力したIDとパスワードが正しいかどうかの処理をしたいのですが、

テキストファイルの1行目だけが一致しません。
2行目以降は一致してくれます。

これはいったいどういうことでしょうか?

以下、JSPコードです。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"html://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<%@
page language = "java" contentType ="text/html; charset = UTF-8"
pageEncoding = "UTF-8" import = "java.util.*, java.io.*, java.security.*"
%>

<title>login</title>
</head>

<body>

<h1>掲示板へようこそ</h1>

<a href="join.jsp">新規登録はこちら</a>

<form action="", method="post">
ID:<input type="text" name="ID" size="32"></br>
パスワード:<input type="password" name="password" size="32"><br>
<br>
<input type="submit" value="ログイン">
</form>
    <%

    String id = request.getParameter("ID");
    String pass = request.getParameter("password");

    if(id != null) {


        try {
            FileReader fr = new FileReader(application.getRealPath("board/member.txt"));
            BufferedReader br = new BufferedReader(fr);
            request.setCharacterEncoding("UTF-8");


            String str = "";

            MessageDigest md = null;
            StringBuilder sb = null;

            final String algorithmName = "SHA-1";

            md = MessageDigest.getInstance(algorithmName);
            md.update(pass.getBytes());

            sb = new StringBuilder();

            for(byte b : md.digest()) {
                String hex = String.format("%02x", b);
                sb.append(hex);
            }
            String result = sb.toString();


            while((str = br.readLine()) != null) {

                StringTokenizer st = new StringTokenizer(str, " ");

                String test = st.nextToken();
                String test1 = st.nextToken();

                if(id.equals(test)) {

                    if(result.equals(test1)) {
                        session.setAttribute("ID", id);
                        response.sendRedirect("post.jsp");
                    }
                }else {

                    out.print("fail");

                }
            }
        br.close();
        fr.close();


        }catch(Exception e) {
            out.println(e + "<br />index - 10-");
        }
    }
    %>
</body>
</html>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • m_yoko

    2017/12/14 13:56

    BOMの有無で少し処理がおかしいのかなぁと思いますが、具体的に一行目がどうおかしいでしょうか?先頭3バイト分えぐれるとか壊れるとかでしょうか?

    キャンセル

  • honjoriki

    2017/12/14 15:12

    out.printで比較する文字列を表示してみたのですが、見かけ上は一致しているのです。しかし、failの処理がされてしまいます。

    キャンセル

  • honjoriki

    2017/12/14 15:25

    すいません、解決できました!

    キャンセル

回答 1

check解決した方法

+1

テキストファイルがUTF-8だと先頭にBOMが入っていて
それが文字列の一致を阻害していました。お騒がせしました。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/12/14 15:42

    よくあることです。初めからそうかなぁとは思ってましたが・・・笑

    キャンセル

  • 2017/12/14 18:46

    windows標準のメモ帳はUTF-8にするとそんなモノが付くんですね…許されません…

    キャンセル

  • 2017/12/15 12:52

    あるあるd(・ω・

    キャンセル

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

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

関連した質問

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

  • Java

    13830questions

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

  • JSP

    933questions

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