それでは、ソースコードを作成していきましょう。「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>
これで、サンプルのソースコードソースおよび設定ファイルの編集は完了です。
完成したサンプルを実行してみましょう。連載第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アプリケーション開発を担当中。「信頼されるプロジェクトマネジャー」を目指し、自分に必要なことを常に考え、行動し、「真の技術者」として日々成長している。
趣味はボウリング、ビリヤード、ダーツ
尊敬する人はティム・バーナーズ=リー
Copyright © ITmedia, Inc. All Rights Reserved.