_________ | ログイン画面 | | login.jsp .|  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ↓ 認証失敗 _________ .認証――――――――→| エラーページ | | .| loginError.jsp | |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ |認 ↑ |証 | |成 | |功 | ↓ | __________ | | ログイン成功画面| | | loginSuccess.jsp | |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | | | | | ↓ エラー | セッションチェック――――――――→| | |エ |成 |ラ |功 || ↓ | __________ ボタン押下 | | 次のページ |――――→セッションチェック | nextPage.jsp | |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | ↑ |OK |_______________|
ログイン画面
配置場所 WEBアプリのルート/pages/login.jsp
ソース <%@ page language="java" contentType="text/html; charset=Shift_JIS" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <html:html> <head> <title>ログイン画面</title> </head> <body> <html:errors/> <html:form action="/login" method="post"> ユーザID : <html:text property="id"/><br> パスワード: <html:password property="password"/><br> <html:submit value="ログイン"/> </html:form> </body> </html:html>
エラー画面
配置場所 WEBアプリのルート/pages/loginError.jsp
ソース <html:html> LoginError... </html:html>
ログイン成功画面
配置場所 WEBアプリのルート/pages/loginSuccess.jsp
ソース <%@ page language="java" contentType="text/html; charset=Shift_JIS" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <html> LoginSuccess!! <html:form action="/nextpage" method="post"> <html:submit value="次のページ"/> </html:form> </html>
次のページ画面
配置場所 WEBアプリのルート/pages/nextPage.jsp
ソース <%@ page language="java" contentType="text/html; charset=Shift_JIS" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <html> This is NextPage... <html:form action="/nextpage" method="post"> <html:submit value="次のページ"/> </html:form> </html>
LoginAction.java
ログイン認証を行うActionクラスです。配置場所 WEBアプリのルート/WEB-INF/hoge/LoginAction.java
ソース package hoge; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.struts.action.Action; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.DynaActionForm; public class LoginAction extends Action { public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { //DynaFormからメッセージを取得 DynaActionForm df = (DynaActionForm)form; String id = (String)df.get("id"); String password = (String)df.get("password"); System.out.println("id=" + id + " password=" + password); //IDが"foo"、Passwordが"bar"の場合、認証OKということにしておく //実際はこのデータベースの認証テーブルへアクセスしていろいろやるわけですw if(id.equals("foo") && password.equals("bar")){ // セッションを開始します HttpSession session = request.getSession(true); // セッションに情報を設定します session.setAttribute("id" , id); //論理名"success"に該当するページへ移動(struts-config.xmlを参照) return mapping.findForward("success"); }else{ //論理名"error"に該当するページへ移動(struts-config.xmlを参照) return mapping.findForward("error"); } } }
NextAction.java
セッションチェックを行うActionクラスです。配置場所 WEBアプリのルート/WEB-INF/hoge/NextAction.java
ソース package hoge; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.struts.action.Action; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.DynaActionForm; public class NextAction extends Action { public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { //セッションを取得します HttpSession session = request.getSession(false); //セッション変数に格納された"id"をチェックする //nullではなければセッションは確立されていることにしておく。。。 if(session.getAttribute("id") !=null){ //論理名"success"に該当するページへ移動(struts-config.xmlを参照) return mapping.findForward("success"); }else{ //論理名"error"に該当するページへ移動(struts-config.xmlを参照) return mapping.findForward("error"); } } }
配置場所 WEBアプリのルート/WEB-INF/struts-config.xml
<form-beans>に定義を追加
<form-beans> <!-- loginForm用の設定 ログイン画面のidとpasswordをプロパティとして定義します。 --> <form-bean dynamic="true" name="loginForm" type="org.apache.struts.action.DynaActionForm"> <form-property name="id" type="java.lang.String"/> <form-property name="password" type="java.lang.String"/> </form-bean> <!-- nextForm用の設定 --> <form-bean dynamic="true" name="nextForm" type="org.apache.struts.action.DynaActionForm"> </form-bean> </form-beans>
<action-mappings>に定義を追加
<action-mappings> <!-- LoginAction用の設定 path : 論理パス name : Form名 type : 呼び出すActionクラス input : validateするページ validate : validateするかしないか <forward name="論理名" path="遷移する画面(jsp)のパス" /> ここではログイン成功時の画面をsuccess、失敗のときをerrorと定義しています。 --> <action path="/login" name="loginForm" type="hoge.LoginAction" input="/pages/login.jsp" validate="true"> <forward name="success" path="/pages/loginsuccess.jsp" /> <forward name="error" path="/pages/loginerror.jsp" /> </action> <!-- NextAction用の設定 path : 論理パス name : Form名 type : 呼び出すActionクラス <forward name="論理名" path="遷移する画面(jsp)のパス" /> ここではログイン成功時の画面をsuccess、失敗のときをerrorと定義しています。 --> <action path="/nextpage" name="nextForm" type="hoge.NextAction"> <forward name="success" path="/pages/nextpage.jsp" /> <forward name="error" path="/pages/loginerror.jsp" /> </action> </action-mappings>
★validateを行う場合★
<message-resources>に定義を追加
<struts-config> ・・・(省略) <message-resources parameter="ApplicationResources" /> <plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" /> </plug-in> </struts-config>
errors.required ={0}はかならず入力してください。 errors.maxlength={0}は{1}文字以内で入力してください。 errors.integer ={0}は整数で入力してください。 errors.invalid ={0}は正しい形式で入力してください。
<?xml version="1.0" encoding="Shift_JIS" ?> <!DOCTYPE form-validation PUBLIC "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0//EN" "http://jakarta.apache.org/commons/dtds/validator_1_0.dtd"> <form-validation> <formset> <!-- ログイン画面(loginForm)のvalidation --> <form name="loginForm"> <!-- loginForm.id --> <field property="id" depends="required,maxlength"> <arg0 key="ユーザID" resource="false" /> <arg1 name="maxlength" key="${var:maxlength}" resource="false" /> <var> <var-name>maxlength</var-name> <var-value>16</var-value> </var> </field> <!-- loginForm.password --> <field property="password" depends="required,maxlength"> <arg0 key="パスワード" resource="false" /> <arg1 name="maxlength" key="${var:maxlength}" resource="false" /> <var> <var-name>maxlength</var-name> <var-value>8</var-value> </var> </field> </form> </formset> </form-validation>
以上で準備完了です!
http://localhost:8080/アプリ名/pages/login.jspログイン画面が現れますので以下のことを試してみましょう。