個別指導 Javaプログラミングスクール 武蔵浦和(中浦和)

現役SE(システムエンジニア)が埼京線の武蔵浦和(中浦和)周辺でJavaプログラミング学習の個別指導を行っています。

サーブレット(Java Servlet)2

[Webアプリケーション] サーブレットJava Servlet)2

サーブレットを使った開発の準備が整いましたので、簡単なHTMLの出力を行います。
今回はHTMLで画像の読み込みやCSSファイルの読み込みを試します。

■WebContent配下にフォルダを作成
前回同様に新規の動的Webプロジェクトを作成し、画像とスタイルシートを格納するフォルダを作成します。

▼WebContentを選択し、右クリックで「新規>フォルダ」を作成
新規フォルダ作成

▼画像とスタイルシートの格納フォルダ
WebContentにフォルダを作成

フォルダを作成できたら、以下のサンプルプログラムを用意して、画像とCSSファイルを格納しましょう。

「src」にサンプルプログラムを作成します。

@WebServlet("/Sample")
public class Sample extends HttpServlet {
    private static final long serialVersionUID = 1L;

   public Sample() {
        super();
     }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 文字コードの設定
        response.setContentType("text/html; charset=UTF-8");
        // 出力ストリームの取得
        PrintWriter out = response.getWriter();
        // HTML文書の出力
        out.println(" <html>                                        ");
        out.println(" <head>                                        ");
        out.println("    <title>サンプル</title>                     ");
        out.println("    <link rel=\"stylesheet\" href=\"css/main.css\"> ");
        out.println(" </head>                                       ");
        out.println(" <body>                                        ");
        out.println("   <div id=\"main\">                             ");
        out.println("       <h1>画像とCSSを読み込むよ</h1>          ");
        out.println("       <p>画像を表示します。</p>               ");
        out.println("       <p><img src=\"pictures/sample.jpg\"></p>  ");
        out.println("   </div>                                      ");
        out.println(" </body>                                       ");
        out.println(" </html>                                       ");

    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}


css」フォルダにmain.cssスタイルシート)を格納します。

body{
    background-color: #F0F8FF;
}

div#main{
    background-color: #FFFFFF;
    margin: 0 auto;
    width: 1200px;
    height: 1200px;
    padding: 16px;
}

h1,p{
    text-align: center;
}

h1{
    font-size: 24px;
}

p{
    font-size: 16px;
}


「pictures」に表示したい好きな画像を格納します。名前はsample.jpgとしてください。

以上の準備ができましたら、実行しましょう。以下のような画面が表示されたら成功です。 表示されたURLを実際のchrome等のブラウザに入力して表示されることを確認してみてください。 実行結果



さいたま市南区武蔵浦和駅中浦和駅)周辺でプログラミングを勉強したい・興味のある方に、 個別指導でJavaのプログラミングを教えています。生徒さまはIT・プログラミング未経験の社会人の方がほとんどです。
▼興味があれば、下記リンクをご確認ください。

java-musashiurawa.hatenablog.com

サーブレット(Java Servlet)1

[Webアプリケーション] サーブレットJava Servlet)1

今までの学習ではコンソール画面を利用するコンソールアプリケーションを作成してきましたが、今項目からWebアプリケーションの開発練習を始めます。 まずはWebアプリケーション開発するために、eclipseの設定を行います。

Java EEパースペクティブを追加
eclipseの画面右上にあるパースペクティブを開く(+のマークがあるアイコン)をクリックして、Java EE(Enterprise Edition)を選択して開きます。

▼画像左の+のアイコンをクリック
パースペクティブ

Java EEを開く
javaEE

Java EEのアイコンが追加されているので、クリックして選択する。
JavaEE追加

■動的Webプロジェクトを作成
Java EEを選択したら、いつもの様にまず新規のプロジェクトを作成します。その際に「動的Webプロジェクト」を選択してください。

▼プロジェクトエクスプローラーで右クリックして「動的Webプロジェクト」をクリック
動的Webプロジェクト

▼作成された動的Webプロジェクトの「src」配下にサーブレットを作成する
動的Webプロジェクトのsrc

▼「src」上で右クリックし新規でサーブレットを作成する
Servlet

▼作成したサーブレットに下記のサンプルプログラムを記述し、サーバーで実行しましょう。

@WebServlet("/Servlet1")
public class Servlet1 extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public Servlet1() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 文字コードの設定
        response.setContentType("text/html; charset=UTF-8");
        // 出力ストリームの取得
        PrintWriter out = response.getWriter();
        // HTML文書の出力
        out.println(" <html>                       ");
        out.println(" <head>                       ");
        out.println("     <title>タイトル</title>  ");
        out.println(" </head>                      ");
        out.println(" <body>                       ");
        out.println("     <h1>サンプル見出し</h1>  ");
        out.println("     <p>サンプル文章</p>      ");
        out.println(" </body>                      ");
        out.println(" </html>                      ");
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}


▼画像の様に実行されれば問題ないです。
起動



さいたま市南区武蔵浦和駅中浦和駅)周辺でプログラミングを勉強したい・興味のある方に、 個別指導でJavaのプログラミングを教えています。生徒さまはIT・プログラミング未経験の社会人の方がほとんどです。
▼興味があれば、下記リンクをご確認ください。

java-musashiurawa.hatenablog.com

データベース接続6

[Webアプリケーション] データベース接続6

SQL データベース操作の学習でトランザクションを勉強しましたが、 今までのプログラムではデータ登録の際にコミットしていないのに、自動で登録されていたのに疑問を感じていたかもしれません。

Javaでも勿論トランザクションを利用できます。トランザクションはConnectionクラスのsetAutoCommitメソッドで実装できます。 自動コミットを無効化するfalseを引数に設定することで、一連のデータベースの更新処理をトランザクションで管理できます。 トランザクションを利用する場合は、明示的にcommitメソッドを記述してデータベースに変更を反映させる必要があります。 また、データベースの変更をキャンセルする場合はrollbackメソッドを記述します。

// トランザクション
setAutoCommit(false);

// コミット
commit();

// ロールバック
rollback();


最後に下記のトランザクションを利用したサンプルを参考に、ユーザー情報の更新・退会ができるマイページをイメージしたプログラムを作成してください。
どのようなプログラムにするかは完全に自由です。イメージした機能をプログラミングで実装する練習をしましょう。

サンプルプログラム

public static void main(String[] args) throws SQLException {
    try {
        // JDBCドライバーのロード
        Class.forName("com.mysql.cj.jdbc.Driver");
    }catch(ClassNotFoundException e) {
        e.printStackTrace();
    }

    // URL、ユーザー名、パスワードに値を設定
    String url   = "jdbc:mysql://localhost/データベース名"
                     + "?characterEncoding=UTF-8&serverTimezone=JST&useSSL=false";
    String user = "ユーザー名";
    String pw   = "パスワード";

    // コネクション
    Connection con = null;
    // プリペアードステートメント
    PreparedStatement st = null;

    try {
        // データベースへの接続
        con = DriverManager.getConnection(url, user, pw);

        // トランザクションの開始
        con.setAutoCommit(false);
        System.out.println("トランザクションの開始");

        //-------------------------------------------------
        // ➀スケジュールテーブルの削除処理
        //-------------------------------------------------
        String sql = "DELETE FROM sample1 WHERE user_id = ?";
        st = con.prepareStatement(sql);
        // ユーザーIDを設定
        st.setString(1, "xxxx");
        // SQLを実行
        int cnt = st.executeUpdate();
        System.out.println("スケジュール:" + cnt + "件 削除");
        // クローズ
        st.close();

        //-------------------------------------------------
        // ➁ユーザーテーブルの削除処理
        //-------------------------------------------------
        sql = "DELETE FROM sample2 WHERE user_id = ?";
        st = con.prepareStatement(sql);
        // ユーザーIDを設定
        st.setString(1, "xxxx");
        // SQLの実行
        cnt = st.executeUpdate();
        System.out.println("ユーザー:" +cnt + "件 削除");
        // クローズ
        st.close();

        // コミット
        con.commit();
        System.out.println("コミット");

    }catch(SQLException e) {
        // ロールバック
        con.rollback();
        System.out.println("ロールバック");

        e.printStackTrace();
    }finally{
        // リソースの開放
        if(con != null) {
            try {
                con.close();
            }catch(SQLException e){
                e.printStackTrace();
            }
        }
        if(st != null) {
            try {
                st.close();
            }catch(SQLException e){
                e.printStackTrace();
            }
        }
    }



さいたま市南区武蔵浦和駅中浦和駅)周辺でプログラミングを勉強したい・興味のある方に、 個別指導でJavaのプログラミングを教えています。生徒さまはIT・プログラミング未経験の社会人の方がほとんどです。
▼興味があれば、下記リンクをご確認ください。

java-musashiurawa.hatenablog.com

データベース接続5

[Webアプリケーション] データベース接続5

今まで学習したことを応用して、実際にスケジュールアプリを作成しましょう。

スケジュールアプリのプログラムは、DTO・DAOパターンを採用し、下記4つのクラスで構成します。 イメージは前回学習した通りです。
DTO・DAOパターン

まずは実行結果を見て、機能を確認しましょう。

実行結果

ログイン画面
メールアドレス:tanaka_taro@gamil.com
パスワード:abc

ログインしました。ようこそ 田中 太郎 さん。
----------------------------------------------
ユーザー情報
ID:0001
氏名:田中 太郎
性別:男性
年齢:32
----------------------------------------------

スケジュールを入力してください。
日付:20201012
予定:プログラミング学習
開始時間:1000
終了時間:1200
備考:データベース
スケジュールを登録しました。
引き続き予定を入れる場合は「はい」と入力してください。
予定をいれる:いいえ

----------------------------------------------
予定一覧
2020年07月23日:BBQ 11:00 ~ 17:00 多摩川
2020年07月23日:歯医者 14:00 ~ 15:00 
2020年07月29日:花火大会 17:00 ~ 21:00 飲み物買い出し
2020年09月09日:MTG 11:30 ~ 13:00 会議室2
2020年10月12日:プログラミング学習 10:00 ~ 12:00 データベース
2020年10月12日:映画 17:00 ~ 20:00 渋谷
----------------------------------------------


実装する機能は下記3つの処理です。
■ログイン
入力したメールアドレスとパスワードでデータベースを確認します。データが存在すればユーザー情報を表示する。存在しなければ、もう一度入力処理に戻る。

■スケジュール登録
入力したスケジュール情報をデータベースに登録します。スケジュールの登録は繰り返し何度でも登録できます。

■スケジュール表示
スケジュール登録を終了した場合、ログインユーザーが登録してある全てのスケジュールを表示します。

こちらの課題は自由にプログラミングしてください。その際のプログラムのポイントは、SQLです。
Javaの処理を簡潔にするために、SQLで処理できることは、SQLで処理しましょう。



さいたま市南区武蔵浦和駅中浦和駅)周辺でプログラミングを勉強したい・興味のある方に、 個別指導でJavaのプログラミングを教えています。生徒さまはIT・プログラミング未経験の社会人の方がほとんどです。
▼興味があれば、下記リンクをご確認ください。

java-musashiurawa.hatenablog.com

データベース接続4

[Webアプリケーション] データベース接続4

Javaでデータベースの接続方法を学習したので、実際にスケジュールアプリのプログラミングを開始する準備をしましょう。

スケジュールアプリのプログラムは、DTO・DAOパターンを採用し、下記4つのクラスで構成します。
・Mainクラス ... ユーザー情報や、スケジュールの入力処理のみを行う。

ビジネスロジック ... 実際の処理をまとめたクラス。メインクラスから呼び出されるプログラムを作成する。

・DAO(Data Access Object) ... データベースにアクセスする処理をまとめたクラス。

DTO(Data Transfer Object) ... データベースから取得したデータを格納するためのクラス。格納したデータをビジネスロジックに渡すために使用する。

DTO・DAOパターン

まずは、下記サンプルを参考に簡単なDTO・DAOパターンのプログラムを作成してみましょう。

・実行するJavaクラス

public static void main(String[] args) {
    String comma = ",";
    //DAOをインスタンス化
    Common_DAO cd = new Common_DAO();
    //DTOでユーザーテーブルのデータを取得
    List<User_DTO> list = cd.getUserInfo();

    System.out.println("ユーザーテーブルを表示");
    if(list != null) {
        for(int i = 0; i < list.size(); i++) {
            System.out.print(list.get(i).getUserID());
            System.out.print(comma);
            System.out.print(list.get(i).getUserName());
            System.out.print(comma);
            System.out.print(list.get(i).getGender());
            System.out.print(comma);
            System.out.println(list.get(i).getEmail());
        }
    }else{
        System.out.print("データの取得失敗");
        }
}


・User_DTO クラス(DTO
データベースの値を格納するメンバ変数(フィールド)とゲッター、セッターを用意しただけのクラス。

public class User_DTO {
    //フィールド
    private String userID;
    private String userName;
    private String gender;
    private String email;
    
    //ゲッター、セッター
    public String getUserID() {
        return userID;
    }
    public void setUserID(String userID) {
        this.userID = userID;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }

}


・Common_DAO クラス(DAO)
データベース接続3で、mainメソッドに書いたデータベースの接続処理をメソッド化して、まとめたクラス。

public class Common_DAO  {
    // フィールド
    private Connection con;

    // コンストラクタ
    public Common_DAO () {
        getConnection();
    }
    // メソッド
    //------------------------------------------------------------
    // getConnection:データベース接続
    // 引数  :なし
    // 戻り値:なし
    //------------------------------------------------------------
    private void getConnection() {
        try {
            //JDBCドライバーのロード
            Class.forName("com.mysql.cj.jdbc.Driver");
        }catch(ClassNotFoundException e) {
            e.printStackTrace();
        }
        //URL、ユーザー名、パスワードに値を設定
        String url   = "jdbc:mysql://localhost/データベース"
                         + "?characterEncoding=UTF-8&serverTimezone=JST&useSSL=false";
        String user = "ユーザー";
        String pw   = "パスワード";
        try {
            con = DriverManager.getConnection(url, user, pw);
        }catch(SQLException e){
            e.printStackTrace();
        }
    }
    //------------------------------------------------------------
    // close :データベース接続をクローズ
    // 引数  :なし
    // 戻り値:なし
    //------------------------------------------------------------
    private void close() throws SQLException{
        if(con != null) {
                con.close();
        }
    }
    //------------------------------------------------------------
    // getUserInfo:ユーザーテーブルのデータを取得
    // 引数  :なし
    // 戻り値:ユーザー情報 (List)
    //------------------------------------------------------------
    public List<User_DTO > getUserInfo() {
        //return用のリスト(DTOをリストに格納していく)
        List list = new ArrayList<User_DTO >();
        //プリペアードステートメント
        PreparedStatement st = null;
        //リザルトセット
        ResultSet rs =null;
        try {
            //SQL文の生成
            StringBuilder buf = new StringBuilder();
            buf.append(" SELECT      ");
            buf.append("      COL1   ");
            buf.append("     ,COL2   ");
            buf.append("     ,COL3   ");
            buf.append("     ,COL4   ");
            buf.append(" FROM        ");
            buf.append("     SAMPLE  ");

            //preparedStatementオブジェクトの生成
            st = con.prepareStatement(buf.toString());

            rs = st.executeQuery();

            while(rs.next()) {
                User_DTO dto = new User_DTO();
                dto.setUserID(rs.getString("COL1"));
                dto.setUserName(rs.getString("COL2"));
                dto.setGender(rs.getString("COL3"));
                dto.setEmail(rs.getString("COL4"));
                list.add(dto);
            }

        }catch(SQLException e) {
            e.printStackTrace();
        }finally {
            //リソースの開放
            try {
                if(st != null) {
                    st.close();
                }
                if(rs != null) {
                    rs.close();
                }
                close();
            }catch(SQLException e) {
                e.printStackTrace();
            }
        }
        return list;
    }
}



さいたま市南区武蔵浦和駅中浦和駅)周辺でプログラミングを勉強したい・興味のある方に、 個別指導でJavaのプログラミングを教えています。生徒さまはIT・プログラミング未経験の社会人の方がほとんどです。
▼興味があれば、下記リンクをご確認ください。

java-musashiurawa.hatenablog.com

データベース接続3

[Webアプリケーション] データベース接続3

データベースの接続2で登録したデータを出力するプログラムを作成しましょう。

下記サンプルプログラムを参考に、SQLを作成しデータが取得できるプログラミングをしてください。
※ResultSet は finallyでクローズすることを忘れずに!

public static void main(String[] args) {
    try {
        //JDBCドライバのロード
        Class.forName("com.mysql.cj.jdbc.Driver");
    }catch(ClassNotFoundException e) {
        e.printStackTrace();
    }

    //URL、ユーザー名、パスワードに値を設定
    String url   = "jdbc:mysql://localhost/テーブル名"
                     + "?characterEncoding=UTF-8&serverTimezone=JST&useSSL=false";
    String user = "ユーザー名";
    String pw   = "パスワード";

    //コネクション
    Connection con = null;
    //プリペアードステートメント
    PreparedStatement st = null;
    //リザルトセット
    ResultSet rs =null;
    
    try {
        //データベースへの接続
        con = DriverManager.getConnection(url, user, pw);
        System.out.println("接続成功");

        //SQL文の生成
        StringBuilder buf = new StringBuilder();
        buf.append(" SELECT      ");
        buf.append("    COL1     ");
        buf.append("   ,COL2     ");
        buf.append("   ,COL3     ");
        buf.append(" FROM        ");
        buf.append("    SAMPLE   ");
        buf.append(" WHERE       ");
        buf.append("    COL1 = ? ");

        //プリペアードステートメントの取得
        st = con.prepareStatement(buf.toString());

        //プレースホルダに値をセット
        st.setString(1, "a");

        //SQLの実行
        rs = st.executeQuery();

        while(rs.next()) {
            System.out.print(rs.getString("COL1") + ",");
            System.out.print(rs.getString("COL2") + ",");
            System.out.println(rs.getString("COL3"));
        }

    }catch(SQLException e) {
        e.printStackTrace();
    }finally{
        //リソースの開放
        if(con != null) {
            try {
                con.close();
            }catch(SQLException e){
                e.printStackTrace();
            }
        }
        if(st != null) {
            try {
                st.close();
            }catch(SQLException e){
                e.printStackTrace();
            }
        }
        if(rs != null) {
            try {
                rs.close();
            }catch(SQLException e){
                e.printStackTrace();
            }
        }
    }
}



さいたま市南区武蔵浦和駅中浦和駅)周辺でプログラミングを勉強したい・興味のある方に、 個別指導でJavaのプログラミングを教えています。生徒さまはIT・プログラミング未経験の社会人の方がほとんどです。
▼興味があれば、下記リンクをご確認ください。

java-musashiurawa.hatenablog.com

インクリメント・デクリメント演算子1

[Java]インクリメント・デクリメント演算子の練習問題

問題1

public static void main(String[] args) 
    int num = 0;
    int result = (4 / num++) / 2;
    System.out.println(result);
}


実行結果がどうなるかを、実際にプログラムを実行する前に考えてみましょう。
実行結果は、自分の想定通りでしたか?間違えていた場合は、もう一度学習内容を復習しましょう。

さいたま市南区武蔵浦和駅中浦和駅)周辺でプログラミングを勉強したい・興味のある方に、 個別指導でJavaのプログラミングを教えています。生徒さまはIT・プログラミング未経験の社会人の方がほとんどです。
▼興味があれば、下記リンクをご確認ください。 java-musashiurawa.hatenablog.com