それでは、ソースコードを作成していきましょう。「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.