SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

GlassFishからアプローチするJava

GlassFishからアプローチするJava~入門編~
第5回「Webアプリケーションの作成 MySQL Workbenchを使う」

買い物かごへの追加機能の実装

ダウンロード サンプルコード (13.0 KB)

ImoshochuShop.jspの修正

 第4回では芋焼酎のカタログのみの表示でした。仕様で記述したとおり、購入したい銘柄が選択できなくてはなりません。そのためには図11のformタグ(A)の追加、action属性値(B)の指定、チェックボックスの追加(C)、選択された場合Servletに渡す値(D)、submitボタン(E)の追加が必要です。Bの値はjp.kawakubo.BasketServletクラスを作成するときに指定したURLパターン「/BasketServlet」(正確にはContextパスである/ImoshochuWeb01を頭に付けます)です。Dは選択された銘柄のidを式言語で指定します。

図11.ImoshochuShop.jspのform要素
図11.ImoshochuShop.jspのform要素
図12.BasketServletクラスのprocessRequestメソッド
図12.BasketServletクラスのprocessRequestメソッド

 繰り返しになりますが、プログラミングは1つずつ確かめながら進めるべきだと思います。本来なら買い物かごの実装を行いところですが我慢して、JSPで選択した銘柄のidがBasketServletで取得できるかのみ確認します。そのための仮のBasketServletプログラムが図12となります。

 getParameterValuesはチェックボックスのように同じ名前で複数の値を持つ場合に使用します。for文の中で選択した銘柄のidを表示しています。

 図13が選択した後の銘柄カタログです。「がんこ焼酎屋」「鴨神楽」「一壺春」を選択しているため、BasketServletが実行されると図14のように1、3、4が表示されます。このことにより選択した銘柄のidがBasketServletに渡されていることが確認できます。

図13.カタログでの選択
図13.カタログでの選択
図14.BasketServletクラスの出力結果
図14.BasketServletクラスの出力結果

BasketServletの修正

 図15がカタログから選択した銘柄を買い物かごへ追加するServletです。13行目で分かるように今回はユーザidを「tomoharu」に固定します。第3回でuserテーブルなどに改良を加えることで、userテーブルなどに登録したユーザidをHttpSessionから取り出し、複数のユーザが使用できるよう改良します。

図15.改良版BasketServletクラスのprocessRequestメソッド
001:    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
002:    throws ServletException, IOException {
003:
004:        ArrayList basketItems = new ArrayList();
005:
006:        String[] meigaraItems = request.getParameterValues("items");
007:
008:        int basketId = 0;
009:
010:        BasketHelper basketHelper = new BasketHelper();
011:        // ログインしたユーザidをもとにデータベースからbasket情報を
012:        // 取得する。第5回は固定で「tomoharu」とする
013:        basketId = basketHelper.getBasketId("tomoharu");
014:
015:        basketHelper.insertBasketItems(basketId, meigaraItems);
016:
017:        basketItems = basketHelper.getBasketItems(basketId);
018:        request.getSession().setAttribute("basket", basketItems);
019:
020:        // ImoshochuShop.jspに遷移する
021:        RequestDispatcher rd = request.getRequestDispatcher("/ImoshochuShop.jsp");
022:        rd.forward(request, response);
023:    } 

 図15の説明をします。4、17、18行目はJSPに渡すための処理です。4行目でBasketItemのArrayListを作成し、途中の処理を経て、17行目でそのArrayListに値を設定しています。18行目はJSPで値を取り出せるようにHttpSessionに"basket"で格納しています。21、22行目は前回説明したとおり、遷移したいJSPを指定します。

 新しいところを説明します。10、13、15、17、18行目が目新しいところです。10行目はそれ以降の処理で直接データベースにアクセスせずにすむようHelperクラスを生成しています。少し難しい表現になりますが、層(ティア)アーキテクチャに則って、Servletクラスからデータベース操作を隠ぺいしています。簡単に言えば、データベースの操作の仕方に左右されない作りにするためにHelperクラスを導入してみました。

次のページ
Helperクラスを作成

この記事は参考になりましたか?

GlassFishからアプローチするJava連載記事一覧

もっと読む

この記事の著者

川久保 智晴(カワクボ トモハル)

haruプログラミング教室(https://haru-idea.jp/)主宰。COBOL、FORTRANで13年、Javaを中心としたWeb開発で11年。3つしか言語知らないのかというとそうでもなく、sed/awk、Perl、Python, PHP,  C#, JavaScriptなども一時期は業...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4900 2010/03/03 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー