プログラミング中、あった問題 02

 

コンパイルのエラー

JAVAの更新ので、コードがエラーになってしまいました。

解決方法:Right click on project - >BuildPath - >Configure BuildPath - >Libraries tab - >Double click on JRE SYSTEM LIBRARY - >Then select alternate JRE

 

・画面入力部品の変更

追加画面の入力以前はinputで入力フォームを生成します。

大量に入力するために、textareaで入力フォームを生成します。

(HTML)

<textarea name="kansou" rows="20" cols="50">記入してください。</textarea>

 

CSSの反映

JSPCSSの連携WebContentの下にCSSを置きます。JSPにリンクを付けます。

<link rel="stylesheet" type="text/css" href="/ProjectName/css/style.css">

 

 

Todoの勉強

参考ページ

サンプルWEBアプリケーションの仕様

3. チュートリアル(Todoアプリケーション) — TERASOLUNA Global Framework 


TODOの一覧表示

TODOを全件表示します。


TODOの登録(新規ボタン)

追加画面に遷移して、フォームから送信されたTODOを保存します。


TODOの完了(完了ボタン)

完了のTODOは打ち消し線で装飾して、”Delete”用のボタンが付きます。

未完了のTODOに対しては”Finish”と”Delete”用のボタンが付きます。


TODOの削除(削除ボタン) 

フォームから送信されたtodoIdに対応するTODOを削除するTODOが存在しない場合はエラーコードで例外をスローします。______________________________________________________________________

 

 

・DataBase Table作成

Datatypeにboolean型がありませんでした。

解決方法:tinyintで定義しました。

参考ページ

An Introduction to MySQL BOOLEAN Data Type


プロジェクト構造

index.jsp  ログイン画面 (完成) 画面更新

new_ID.jsp 新規登録画面 (未完成)ToDoテーブルの生成、PASSWORD確認機能

member.jsp 一覧画面 (一部分完成)

delete_ID.jsp ID削除画面 (未完成)ToDoテーブルの削除

change_password.jsp パスワード変更画面 (未完成) PASSWORD確認機能

add_list.jsp 追加画面 (未完成) 機能をまだ追加しません。

delete_list.jsp 削除画面 (未完成) 機能をまだ追加しません。

edit_list.jsp  編集画面 (未完成) 機能をまだ追加しません。

result.jsp 結果画面 (一部分完成)


ShainBeans.java メソッドの実行 (一部分完成)

EditServlet.java  ボタンで事件を選びます (一部分完成)

 

不要な機能を削除しました。

アカウントの検索機能

自動的に個人的なテーブルを生成機能

 

・削除機能で発生した問題

一覧画面で削除ボタンを押すと、削除確認前に、アカウントを削除しまいました。。

解決方法:switch caseにbreakを付けました。

JAVA

case "delete":

request.setAttribute("shain", shain); request.getRequestDispatcher("/delete_ID.jsp").forward(request, response);

break;
case "delete_id":

status = "削除成功しました";

if (shain.deleteData() == false) {

status = "削除失敗しました";

message = "管理者に連絡してください。";

} break;


・一覧画面へ戻る機能

やった方法:キャンセルボタンにログイン機能を追加しました。同じIDとPASSWORDログインします。

解決方法:HTMLで前のページへ戻ります。

(HTML)

<input type="button" onclick="history.back()" value="キャンセル"></input>

 

指摘 => history.back() は ブラウザの戻るなので 正しく戻らない場合がある。

これは使わないようにする。

プログラミング中、あった問題 01


先週の問題を解決

先週のtry catchの部分(IDは同じ状況)を直しましたか、新しいバッグを出てしまいました。PASSWORDを変更できません。新しい方法を使いました。

本来の方法:入力したIDでDataBaseにアカウントを削除して、同じIDと新しいPASSWORDを作成します。

やった方法:条件式を変わりましたか、直接にDataBaseに特定のデータを更新した方がいいだと思います。

解決方法:DataBaseに指定したIDのPASSWORDを変更します。

JAVA

UPDATE shain_table SET pw ='" + pw + "' WHERE id = '" + id + "'

__________________________________________________________________________________________________________________________________________________

今日の作ったこと

1.ログイン画面で入力文字数制限の機能を追加しました。
(HTML)<input maxlength='8'>


2.新しいアカウントを作成すると、個人的なテーブルを作成します。そして、ログイン成功画面にテーブルの資料を現れます。全ての資料がチェックボックスを付けます。
(既定値があります。)

 

本来の方法:全ての人は同じテーブルで作成したいですか、将来、新しい属性を付けるなら、方法を変わりました。

やった方法:個人的なテーブルを作成します。

(JAVA)
    String sql = "CREATE TABLE `" + id + "` (`LIST` TEXT NULL) COLLATE='utf8mb4_0900_ai_ci' ENGINE=InnoDB";
        String defaultvalue1 = "INSERT INTO `" + id + "`(`LIST`) VALUES ('買い物');";
        String defaultvalue2 = "INSERT INTO `" + id + "`(`LIST`) VALUES ('映画');";
        String defaultvalue3 = "INSERT INTO `" + id + "`(`LIST`) VALUES ('運動');";

3.ループで資料を出力すると、チェックボックスを付けます。

問題点:HTMLに値を渡しません。

解決方法:デバッグで問題点を探して、コードの位置を変わって、最後は個別に値を渡します。

(JAVA)

            if (status.equals("成功しました") && mode.equals("verification")) {
            //Change Special Sign
            userid = userid.replaceAll("(?i)(<)", "&lt;");
            userid = userid.replaceAll("(?i)(>)", "&gt;");
            userpw = userpw.replaceAll("(?i)(<)", "&lt;");
            userpw = userpw.replaceAll("(?i)(>)", "&gt;");
            request.setAttribute("id", userid);
            request.setAttribute("pw", userpw);
            request.setAttribute("status", status);
            //Print List
            //member.jsp
            try {
                conn = ds.getConnection();

                StringBuffer sql = new StringBuffer();

                sql.append("select LIST from `" + userid + "` where LIST LIKE'%';");

                System.out.println(sql);

                pstmt = conn.prepareStatement(new String(sql));

                pstmt.execute();

                rset = pstmt.executeQuery();

                request.setAttribute("print", rset);

                (request.getRequestDispatcher("/member.jsp").forwardequest, response);

                rset.close();
                pstmt.close();
                conn.close();

            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {

                    conn.close();
                } catch (Exception e) {
                }
            }
            
            request.getRequestDispatcher("/member.jsp").forward(request, response);
        } else {

            request.setAttribute("status", status);
            request.setAttribute("message", message);
            request.getRequestDispatcher("/result.jsp").forward(request, response);
        }
    }

(HTML)
    <form action="Edit" method="post">
        <p>
            <%
                while (rset.next()) {
            %>
            <input type="checkbox" name="riyu" value="1">
            <%=rset.getString(1)%><br> <br>
            <%
                }
            %>
        </p>
        <p>
            <input type="button" onclick="location.href='addlist.jsp'"
                value="新規登録">
        </p>

4.新しい追加画面作りました。追加機能はまだ完成しません。






 

 

 

 

 

 

 


先週の問題

先週のtry catchの部分(IDは同じ状況)を直しましたか、新しいバグが出てしまいました。PASSWORDを変更できません。新しい方法を使いました。

以前の方法:入力したIDでDataBaseのアカウントを削除して、同じIDと新しいPASSWORDで作成します。 (delete => insert)

やった方法:条件式を変わりましたか、直接にDataBaseに特定のデータを更新した方がいいだと思います。

解決方法:DataBaseに指定したIDのPASSWORDを変更します。

JAVA

UPDATE shain_table SET pw ='" + pw + "' WHERE id = '" + id + "'

__________________________________________________________________________________________________________________________________________________

今日の作ったこと

1.ログイン画面で入力文字数制限の機能を追加しました。
(HTML)<input maxlength='8'>


2.新しいアカウントを作成すると、個人的なテーブルを作成します。そして、ログイン成功画面にテーブルの資料を現れます。全ての資料がチェックボックスを付けます。
(既定値があります。)

 

本来の方法:全ての人は同じテーブルで作成したいですか、将来、新しい属性を付けるなら、方法を変わりました。

やった方法:個人的なテーブルを作成します。

(JAVA)
    String sql = "CREATE TABLE `" + id + "` (`LIST` TEXT NULL) COLLATE='utf8mb4_0900_ai_ci' ENGINE=InnoDB";
        String defaultvalue1 = "INSERT INTO `" + id + "`(`LIST`) VALUES ('買い物');";
        String defaultvalue2 = "INSERT INTO `" + id + "`(`LIST`) VALUES ('映画');";
        String defaultvalue3 = "INSERT INTO `" + id + "`(`LIST`) VALUES ('運動');";

3.ループで資料を出力すると、チェックボックスを付けます。

問題点:HTMLに値を渡せません。

解決方法:デバッグで問題点を探して、コードの位置を変わって、最後は個別に値を渡します。

(JAVA)

            if (status.equals("成功しました") && mode.equals("verification")) {
            //Change Special Sign
            userid = userid.replaceAll("(?i)(<)", "&lt;");
            userid = userid.replaceAll("(?i)(>)", "&gt;");
            userpw = userpw.replaceAll("(?i)(<)", "&lt;");
            userpw = userpw.replaceAll("(?i)(>)", "&gt;");
            request.setAttribute("id", userid);
            request.setAttribute("pw", userpw);
            request.setAttribute("status", status);
            //Print List
            //member.jsp
            try {
                conn = ds.getConnection();

                StringBuffer sql = new StringBuffer();

                sql.append("select LIST from `" + userid + "` where LIST LIKE'%';");

                System.out.println(sql);

                pstmt = conn.prepareStatement(new String(sql));

                pstmt.execute();

                rset = pstmt.executeQuery();

                request.setAttribute("print", rset);

                (request.getRequestDispatcher("/member.jsp").forwardequest, response);

                rset.close();
                pstmt.close();
                conn.close();

            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {

                    conn.close();
                } catch (Exception e) {
                }
            }
            
            request.getRequestDispatcher("/member.jsp").forward(request, response);
        } else {

            request.setAttribute("status", status);
            request.setAttribute("message", message);
            request.getRequestDispatcher("/result.jsp").forward(request, response);
        }
    }

(HTML)
    <form action="Edit" method="post">
        <p>
            <%
                while (rset.next()) {
            %>
            <input type="checkbox" name="riyu" value="1">
            <%=rset.getString(1)%><br> <br>
            <%
                }
            %>
        </p>
        <p>
            <input type="button" onclick="location.href='addlist.jsp'"
                value="新規登録">
        </p>

4.新しい追加画面作りました。追加機能はまだ完成しません。





JSPのlesson 2.

JSPのlesson 2.

ブラウザからのデータを受け取ろう。

 

 

手順:

1.ブラウザから、ローカルのtomcatにアクセスする。

 

期待結果:

ブラウザテキストボックスと送信ボタンが表示される。

 

手順:

1.テキストボックスに、鄭くんこんにちは と入力する

2.送信ボタンを押す

 

期待結果:

次の画面で、鄭くんこんにちは と表示される。

 

JAVAの基礎学習 06

UDEMYのUDEMYの


・第10章 クラスとオブジェクト3

・第11章 Javaのシステム

 

のまとめ

 

java.lang.Object

全てのクラスの親になる重要なクラスです。Javaのクラスは、extendsを書かなかった場合は、自動的にjava.lang.Objectのサブクラスになります。

 

equals  (イコール)

オブジェクトを比較する時、比較演算子ではなく、「equals」メソッドを使います。

 

instanceof (インスタンスオブ)

オブジェクトに対して使える比較演算子です。基本型には使用できません。instanceofの使い方は、左辺にオブジェクト、右辺にクラスやインターフェースです。右辺が自身のクラスか、祖先のクラスやインターフェースならばtrueと判定されます。

 

clone (クローン)

オブジェクト複製する方法です。自作クラスで使う場合は、cloneメソッドをオバーライドして、「Cloneable」インターフェースを実装しなければなりまん。

 

シャローコピー(浅い複製)

参照型のフィールドでは、オブジェクトへの参照が複製されるだけです。

 

ディープコピー(深い複製)

オブジェクトの内容も複製することです。

 

java.lang.Class

クラスの情報にアクセスし、操作するためのクラスです。

 

getClassメソッド

オブジェクトは全てのクラスの祖先に当てるクラスです。

 

classフィールド

クラスのオブジェクトを得られます。そして、このオブジェクトを通して、クラスの情報や、クラスの操作を行うことができます。

 

reflection リフレクション

Classクラスの各種命令を使い、フィールドやメソッドの情報を得たり、その操作をしたり、オブジェクトを生成したりすることができます。この仕組みのことを「リフレクション」と呼びます。

 

ネスト(nest)したクラス 

クラスの中に記述されたクラスのことです。

 

内部クラスと外部クラス

クラスの中に非static (スタティック) のクラスを作ると、それは「内部クラス」になります。この時、外側のクラスを「外部クラス」と呼びます。

 

ラッパークラス  wrapper class

基本型の値をラッピングする種々のクラスの総称(そうしょう)です。

例:int(イント)->Integer(インテジャー)、char(キャラ\チャー)->Character(キャラクター)、byte (バイト)->Byte

 

ガベージコレクション garbage collection 

Javaでは、作成したインスタンスのメモリは、Javaのシステムが監視して、必要に応じて自動で解放してくれます。

 

ガベージコレクタ garbage collector

ガベージコレクションを実行するシステムです。

 

メモリリーク memory leak

配置したメモリが参照や解放されないの状態とは、メモリリークです。

アプリケーションが設計不良の時、時間に伴ってメモリの使用量が増えてしまいます。

その場合、そのアプリケーションはメモリリークの可能性が高いです。

 

Javaのメモリ監視ツール

Java Monitoring & Managemeent (ジャバモニタリング &マネージメント)Console (コンソール)と Java VisualVM がよく使っています。

 

java.lang.Systemクラス

Javaのシステム関係のクラスです。全てのフィールドとメソッドがstaticで、

インスタンスを作ることはできません。

 

java.lang.Runtimeクラス

プログラムの実行に必要な部品の集合です。

JAVAの基礎学習 05

UDEMYの

第9章 クラスとオブジェクト2

のまとめ

パッケージ package
クラスを集めるのはパッケージです。他のパッケージのクラスを使用する時、

インポート(import)と書くと、利用できます。

 

スーパークラスとサブクラス
スーパークラスとサブクラスは親子関係みたいです。

スーパークラスは継承元、サブクラスは継承先です。

継承する時、クラス名の後ろにextendsと書き、その後ろに継承したいクラス名を書くと、継承を行えます。

 

スーパー super
スーパークラスのフィールドやメソッドが利用できます。

 

this
自分のクラスのフィールドやメソッドが利用できます。

 

オーバーライド override
サブクラスをスーパークラスと同じメソッド名で定義して、スーパークラスのメソッドを書き換えます。

 

オブジェクトのキャスト
あるクラスから別のクラスへのオブジェクトのキャストは不可能です。しかし、サブクラスからスーパークラスへのオブジェクトのキャストは可能です。サブクラスはスーパークラスのフィールドとメソッドが含まれているからです。

 

アクセス制御の範囲
修飾子(しゅうしょくし)によってアクセスの範囲が違います。
public 
できる範囲:全体
protected
できる範囲:同一クラス 同一パッケージ サブクラス
なし
できる範囲:同一クラス 同一パッケージ
private
できる範囲:同一クラス

定数
一度値や参照を設定すると、変更できません。

使い方は変数を宣言する時に「final」を付けます。

 

抽象クラスと抽象メソッド
未実装のクラスやメソッドです。抽象クラスは、必ずextendsして使用する必要があります。

抽象メソッドは、extends先のクラスで実装する必要があります。

 

多重継承
複数の親を継承することです。Javaでは多重継承は禁止されており、必ず1つの親からしか継承できません。

 

interface インターフェース
Javaで疑似的(ぎじてき)に多重継承を実現する仕組みです。classの代わりに「interface」と書きます。インターフェースのフィールドには、public、static、finalの3種類のみが許されています。インターフェースのメソッドには、public、abstructの2種類のみが許されています。

 

implements インプリメント
インターフェースを継承する際は、「implements」を使います。

 

listener リスナー
あるイベントが発生した時、通知を受取るオブジェクトです。

JAVAの基礎学習 04

UDEMYの

第8章 メソッド

のまとめ

メソッドの構造
先ず入力します。 

値や参照型を代入して、次に内部処理です。 (引数)

メソッドの機能を実行します。最後は出力です。

メソッドを実行した結果を返します。(返り値、戻り値)

 

void 
メソッドにvoidで宣言される時は、戻り値のないメソッドがvoid

 

引数のないメソッド

戻り値も引数もないメソッド

 

return
メソッド終了時、値を指定位置に返します。

 

メソッド内のローカル変数  (スコープ) scope
ローカルとは局地的です。メソッド内部だけ使えます。メソッドの内部で作成して、終わったら、消滅します。いい点は外の影響を受けません。変数のリセットも必要がありません。

 

参照型の引数
参照型とは、変数の値を変わると、全ての変数の値をかわります。引数は式を代入するための値です。配列に参照型の引数を代入して、全ての値を変わります。

 

オーバーロード
同じ名前のメソッドを複数作ることはできません。引数が異なる場合はできます。

 

可変長引数
引数がたくさんある場合は可変長引数を使います。一つ一つ書くのは大変ですから、可変長引数が用意されています。
例:public static int sum(int... iArr)

 

コンストラクタ constructor
クラスのインスタンス生成時に実行されるメソッドで、そのクラスのメンバ変数を初期化する時に使用します。

 

mainメソッド
最初に呼び出されるメソッドです。
例:public static void main(String[] args)

 

throw
例外が発生する時、エラーを投げて、例外処理になります。
例:throw new IOException();  // ファイル読み込み時の例外
  throw new DataFormatException("テキスト形式でない");  // データ形式の例外(メッセージ付き)

 

try catch
もし例外が発生した時、例外の型変数をキャッチして、catchの中の式を処理します。

 

再帰再帰呼び出し再帰処理) recursive
同じメソッドを呼び出す処理です。しかし、終了条件がない場合は無限ループのような状態になるかもしれません。