struts.xmlに以下の記述をします。
<?xml version="1.0"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.ui.theme" value="simple" />
<constant name="struts.configuration.xml.reload" value="true" />
<constant name="struts.codebehind.defaultPackage" value="mydefault" />
<!-- 独自パッケージとして「mydefault」を定義 -->
<package name="mydefault" namespace="/" extends="struts-default">
<interceptors>
<!-- LoginInterceptorクラスに対して「login」と名前を定義 -->
<interceptor name="login" class="pkg.sample.LoginInterceptor" />
<!-- LoginInterceptorとStruts標準のdefaultStackを
足し合わせた新しい「defaultLoginStack」を定義 -->
<interceptor-stack name="defaultLoginStack">
<interceptor-ref name="login" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<!-- デフォルトのinterceptorを、defaultLoginStackに設定 -->
<default-interceptor-ref name="defaultLoginStack"/>
<!-- 「return "login"」「return "mainmenu"」に対して、固定のURLを定義 -->
<global-results>
<result name="login">index.jsp</result>
<result name="mainmenu" type="redirect">mainMenu.action</result>
</global-results>
<!-- actionタグは記述不要 -->
</package>
</struts>
(1) 「struts.codebehind.defaultPackage」に、独自パッケージである
「mydefault」を設定します。
(2) 次に、独自パッケージである「mydefault」を定義します。
(3) 独自インターセプターである「pkg.sample.LoginInterceptor」に、「login」という
名前をつけます。
(4) Struts2標準の「defaultStack」と独自インターセプターである「login」を
組み合わせた「defaultLoginStack」を新たに定義します。
(5) 更に、「defaultLoginStack」をこのパッケージのデフォルトのインターセプターとします。
(6) 未ログイン時に必ず「ログイン画面」に戻るようにするため、<global-results>を定義します。
インターセプターや各アクションクラス内で「return "login"」した場合には、
必ず「index.jsp」に遷移するように定義します。
index.jspに以下の記述をします。
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="Windows-31J"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Login Sample</title>
</head>
<body>
ログイン画面<br /><br />
<s:actionerror />
<s:form action="mainMenu.action">
<table border="1">
<tr>
<td>ユーザID</td> <td><s:textfield name="userid" value="" /></td>
</tr>
<tr>
<td>パスワード</td> <td><s:textfield name="passwd" value="" /></td>
</tr>
</table>
<s:submit value="ログイン" />
</s:form>
</body>
</html>
(1) <s:actionerror />タグには、ログイン認証時のエラーメッセージを出力します。
(2) <s:form>タグで、action="mainMenu.action"と指定しているため、ログインボタン押下時には
「MainMenuActionクラス」が呼び出されます。ただし、今回は自前のインターセプター群である
「defaultLoginStack」を定義しているため「LoginInterceptorクラス」がその前に割り込んで
呼び出されます。
(3) ユーザIDとパスワードのパラメタ名は、「userid」と「passwd」としています。