Hibernateで覚えるO/RマッピングとBeanの常識:Webアプリの常識をJSPとStrutsで身につける(9)(3/3 ページ)
本連載は、JSP/サーブレット+StrutsのWebアプリケーション開発を通じて、Java言語以外(PHPやASP.NET、Ruby on Railsなど)の開発にも通用するWebアプリケーション全般の広い知識・常識を身に付けるための連載です
O/Rマッピングを使ったWebアプリのコーディング
それでは、ソースコードを作成していきましょう。「PKG\Hello\pages」配下に下記のJSPファイルを作成してください。
<%@ page contentType="text/html; charset=Shift-JIS" %> <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %> <html:html> <head><title>ログイン画面(O/Rマッピング)</title></head> <html:form action="/LoginOR"> <H2>ログイン画面(O/Rマッピング)</H2> <TABLE> <TR><TD><html:errors/></TD></TR> <TR> <TD>ログインID : </TD> <TD><html:text property="id" size="20" /></TD> </TR> <TR><TD>パスワード : </TD> <TD> <html:password property="password" size="20" redisplay="false" /> </TD> </TR> </TABLE> <P> <html:submit property="submit" value="ログイン" /> </P> </html:form> </html:html>
<%@ page contentType="text/html; charset=Shift-JIS" %> <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %> <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %> <html:html> <head><title>ログイン成功(O/Rマッピング)</title></head> <html:form action="/LoginOR"> <P> <h2>ログイン成功(O/Rマッピング)</h2> </P> <TABLE> <TR> <TD>ようこそ <bean:write name="LoginORForm" property="name" /> さん</TD> </TR> </TABLE> </html:form> </html:html>
次に、前回作成した「login」フォルダ配下に、「LoginORAction.java」を作成してください。
package login; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.*; import org.hibernate.Session; import login.form.LoginORForm; import mapping.Mapping; public final class LoginORAction extends Action { public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { LoginORForm loginORForm = (LoginORForm)form; LoginORForm user = (LoginORForm)form; ActionMessages errors = new ActionMessages(); String id = loginORForm.getId(); String password = loginORForm.getPassword(); user = load(id,password); // 一致しなければ認証失敗 if (! id.equals(user.getId()) || ! password.equals(user.getPassword())) { errors.add( ActionMessages.GLOBAL_MESSAGE, new ActionMessage("errors.login")); } loginORForm.setName(user.getName()); return mapping.findForward("success"); } public LoginORForm load(String id,String password) { Session session = Mapping.getSession(); LoginORForm user = (LoginORForm) session.load(LoginORForm.class, id); session.close(); return user; } }
次に、Beanである「login」フォルダの「form」フォルダに、「LoginORForm.java」を作成します。
package login.form; import org.apache.struts.action.ActionForm; public class LoginORForm extends ActionForm { private String id; private String name; private String password; /** * * @return */ public String getName() { return name; } /** * * @param name */ public void setName(String name) { this.name = name; } /** * * @return */ public String getPassword() { return password; } /** * * @param password */ public void setPassword(String password) { this.password = password; } /** * * @return */ public String getId() { return id; } /** * * @param id */ public void setId(String id) { this.id = id; } }
次に、マッピングしたデータ取得を目的としたクラスを作成します。「PKG\Hello\WEB-INF\src」配下に「mapping」フォルダを作成して「form」フォルダに、「Mapping.java」を作成します。
package mapping; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class Mapping { public static Session getSession() { Configuration config = new Configuration().configure(); SessionFactory sessionFactory = config.buildSessionFactory(); Session session = sessionFactory.openSession(); return session; } }
最後に、「C:\PKG\Hello\WEB-INF」配下の「struts-config.xml」を以下のように編集します。
<?xml version="1.0" encoding="Shift_JIS" ?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd"> <struts-config> <!-- =================================== Form Bean Definitions --> <form-beans> <form-bean name="HelloForm" type="hello.form.HelloForm" /> <form-bean name="LoginForm" type="login.form.LoginForm" /> <!-- ここから追加 --> <form-bean name=" LoginORForm" type="login.form.LoginORForm" /> <!-- ここまで追加 --> </form-beans> <!-- ============================ Global Exception Definitions --> <global-exceptions></global-exceptions> <!-- ============================== Global Forward Definitions --> <global-forwards></global-forwards> <!-- ============================== Action Mapping Definitions --> <action-mappings> <action attribute="HelloForm" input="/pages/Who.jsp" name="HelloForm" path="/hello" type="hello.HelloAction" scope="session" validate="true"> <forward name="success" path="/pages/Hello.jsp" /> </action> <action attribute="LoginForm" input="/pages/Login01.jsp" name="LoginForm" path="/Login" type="login.LoginAction" scope="session" validate="true"> <forward name="success" path="/pages/Login02.jsp" /> </action> <!-- ここから追加 --> <action attribute="LoginORForm" input="/pages/LoginOR.jsp" name=" LoginORForm" path="/LoginOR" type="login.LoginORAction" scope="session" validate="true"> <forward name="success" path="/pages/Success.jsp" /> </action> <!-- ここまで追加 --> </action-mappings> <!-- ========================== Message Resources Definitions --> <!-- ================================= Plug Ins Configuration --> <!-- =========================================== Tiles plugin --> <!-- ======================================= Validator plugin --> </struts-config>
これで、サンプルのソースコードソースおよび設定ファイルの編集は完了です。
設定ファイルが多いと思うのは1度だけ
完成したサンプルを実行してみましょう。連載第2回の「Strutsの常識を知り、EclipseとTomcatの環境構築」のときと同様に、Eclipseを起動します。次に、[プロジェクト・エクスプローラー]の「Hello」を選択して右クリックをして、[リフレッシュ]を選択します。Eclipseで[プロジェクト]の[クリーン]を選択して、Helloプロジェクトのコンパイルが完了したら、Eclipse上から「Tomcat起動」アイコン(猫マーク)を押して、Tomcatを起動してください。
正常に起動したことを確認したら、Webブラウザで「http://localhost:8080/hello/pages/LoginOR.jsp」にアクセスしてください。すると、下記のような画面が表示されます。
前回の記事で登録した、IDとパスワードを入力してログインボタンを押してください。
すると、前回と同様にDBに登録した情報(name)を取得して画面に表示しているのが、分かると思います。
今回は、新規の組み込み作業からだったので、前回より設定ファイルが多いと感じるかもしれませんが、次からActionクラスを作成するだけでuserテーブルから情報を取得できるようになり、効率化が図れます。
今回作成したサンプルは、こちらからダウンロードできます。
プロフィール
眞野 寿彦(まの としひこ)
株式会社メセナ・ネットコム所属
SEとして充実した日々を送っている。現在はStrutsを使ったWebアプリケーション開発を担当中。「信頼されるプロジェクトマネジャー」を目指し、自分に必要なことを常に考え、行動し、「真の技術者」として日々成長している。
趣味はボウリング、ビリヤード、ダーツ
尊敬する人はティム・バーナーズ=リー
- JavaScript/Ajaxで知るWebアプリとスクリプトの常識
- Webアプリにおける11の脆弱性の常識と対策
- JUnitとEclipseを使って学ぶ、“テスト”の常識
- Hibernateで覚えるO/RマッピングとBeanの常識
- MySQLの常識を知りセットアップしてJSPからDB操作
- Webアプリ開発の常識、バリデーションとテンプレート
- 発掘! Webの“あるある”問題点−ステートの常識
- もはやWeb利用者の常識、“URL”の意味を理解しよう
- HTMLやStrutsに必須の“タグ”と“サブミット”の常識
- Webアプリにおけるサーバとクライアントの常識
- Strutsの常識を知り、EclipseとTomcatの環境構築
- いまさら聞けない、Webアプリケーションの常識
関連記事
- Hibernateで理解するO/Rマッピング
スマートなデータアクセス手法として注目されるO/Rマッピングを、オープンソースHibernateを使いながら解説する - DB操作の“壁”を壊すJPAが起こした「赤壁の戦い」
現場から学ぶWebアプリ開発のトラブルハック(13) O/Rマッピングなどのフレームワークは確かに開発を楽にした。しかし、そこには思わぬ“伏兵”が潜んでいることも…… - iBATISのORMとSpringのAOPを活用したDBアクセス
オープンソースTERASOLUNAで作るWebアプリ(3) フレームワークの各クラスや設定ファイルの内容、動作原理、多人数でのWebアプリ開発の分業化について解説します - Webの上のポジョをステートフルにつなぐJBoss Seam
Java EE 6のWeb Beansを先取りするオープンソース アノテーションでDIやO/RマッピングのXML地獄から解放してくれたり、双方向DIやEJBの簡素化など利点がいっぱい - O/Rマッピングで郵便番号検索Ajaxアプリ作成!
MyEclipseでAjax+Javaをやさしく開発(3) DWRを使うと、JavaScriptとJavaの間でデータを送受信するときにクラス/型を気にする必要がないなど、便利な機能が満載です - SeasarのDBアクセスにHibernateを使う
Seasar Projectの全貌を探る(6) SeasarV2のプロダクトにはHibernateを使ったDBアクセスを実現するS2Hibernateが用意されている - ドメイン層をシンプルに作るためのO-Rマッピング
保守性・拡張性に優れたシステムを作る(10) 今回はO-Rマッピングの役割と、それを実現するためのドメイン層とパーシステンス層のパターンの組み合わせについて考える
Copyright © ITmedia, Inc. All Rights Reserved.