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アプリケーションの常識
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 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マッピングの役割と、それを実現するためのドメイン層とパーシステンス層のパターンの組み合わせについて考える

