_________ | ログイン画面 | | 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ログイン画面が現れますので以下のことを試してみましょう。