S2Struts導入

本家のクイックスタートが、MayaaPOJO Actionも絡んだもので、個人的にちんぷんかんぷんだったので、StrutsとS2を知っていればなんとかなる感じの手順を書いてみました。

Tomcat 5.5
S2Struts 1.2.9


(1) http://s2struts.seasar.org/ja/index.html より、
 S2StrutsBlank-V1.2.9.zip をダウンロード。
 展開したフォルダを、Eclipseワークスペースへインポート。
 s2struts-blankをTomcatコンテキストに追加しておく。


(2) S2系の設定を実施する。

・WEB-INF/struts-config.xml を編集。
 今回、無設定S2Strutsを利用する。デフォルトでそのように設定
 されているが、以下を修正しておく。

<plug-in className="org.seasar.struts.plugin.AutoStrutsConfigRegisterPlugIn">
	<set-property property="enableJar" value="false"/>
</plug-in><plug-in className="org.seasar.struts.plugin.AutoStrutsConfigRegisterPlugIn">
	<set-property property="enableJar" value="false"/>
	<set-property property="docRoot" value="/WEB-INF/jsp"/>
</plug-in>

 本プラグインが無設定の設定。今回、jspを/WEB-INF/jspの下におくため、そのように
 設定しておく。

・WEB-INF/src/ に、sampleパッケージを作成し、
 WEB-INF/src/sample.dicon を作成し、以下とする。
 

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
  "http://www.seasar.org/dtd/components21.dtd">
<components>
	<include path="aop.dicon" />

	<component name="traceInterceptor"
		class="org.seasar.framework.aop.interceptors.TraceInterceptor" />

	<component
		class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRegister">
		<property name="autoNaming">
			<component
				class="org.seasar.framework.container.autoregister.DefaultAutoNaming" />
		</property>
		<initMethod name="addClassPattern">
			<arg>"sample"</arg>
			<arg>".*ServiceImpl"</arg>
		</initMethod>
	</component>

	<component
		class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRegister">
		<property name="instanceDef">
			@org.seasar.framework.container.deployer.InstanceDefFactory@REQUEST
		</property>
		<property name="autoNaming">
			<component
				class="org.seasar.framework.container.autoregister.DefaultAutoNaming" />
		</property>
		<initMethod name="addClassPattern">
			<arg>"sample"</arg>
			<arg>".*Action"</arg>
		</initMethod>
	</component>
	<component
		class="org.seasar.framework.container.autoregister.AspectAutoRegister">
		<property name="interceptor">traceInterceptor</property>
		<initMethod name="addClassPattern">
			<arg>"sample"</arg>
			<arg>".*Action"</arg>
		</initMethod>
	</component>
</components>

・WEB-INF/src/app.dicon にincludeを追加。

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
	"http://www.seasar.org/dtd/components21.dtd">
<components>
	<include path="s2struts.dicon"/>
	<include path="sample/sample.dicon"/>
</components>

 ここまでで、S2系の設定が終了。あとは対応する命名規約に従って、
 各クラスを用意すれば良い。

(3) jsp、各クラスを用意する。

・/WEB-INF/jsp/login.jsp

<%@ page contentType="text/html; charset=Windows-31J" pageEncoding="Windows-31J"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<html>
<head>
	<meta http-equiv="Content-type" content="text/html; charset=Shift_JIS"/>
	<title>ログイン画面</title>
</head>
<body>
<center>
<html:form action="/auth" focus="userId">
	<table>
		<tr><td>ログイン名</td><td><html:text size="15" property="userId" /></td></tr>
		<tr><td>パスワード</td><td><html:password size="15" property="password" /></td></tr>
		<tr><td colspan="2" align="center"><html:submit value="ログイン" /></td></tr>
	</table>
</html:form>
</center>
</body>
</html>

・/WEB-INF/jsp/auth.jsp

<%@ page contentType="text/html; charset=Windows-31J" pageEncoding="Windows-31J"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<html>
<head>
	<meta http-equiv="Content-type" content="text/html; charset=Shift_JIS"/>
	<title>ログイン結果</title>
</head>
<body>
<center>
ログインしました。<br/>
<bean:write name="message" /><br/>
<html:link page="/login.do">ログインページへ</html:link>
</center>
</body>
</html>

・/WEB-INF/src/sample/AuthForm.java

public class AuthForm extends ActionForm {
    private static final long serialVersionUID = -7936486757862722375L;
    private String userId;
    private String password;
    public String getPassword() {
        return password;
    }
    public void setPassword( String password ) {
        this.password = password;
    }
    public String getUserId() {
        return userId;
    }
    public void setUserId( String userId ) {
        this.userId = userId;
    }
}

・/WEB-INF/src/sample/LoginAction.java

public class LoginAction extends Action {
    public ActionForward execute( ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response ) {
        AuthForm authForm = new AuthForm();
        authForm.setUserId( "default" );
        authForm.setPassword( "" );
        request.setAttribute( "authForm", authForm );
        return ( mapping.findForward( "success" ) );
    }
}

・/WEB-INF/src/sample/AuthAction.java

public class AuthAction extends Action {
    private static final Log LOG = LogFactory.getLog( AuthAction.class );

    public ActionForward execute( ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response ) {
        AuthForm authForm = (AuthForm)form;
        LOG.info( "indexForm::userId=" + authForm.getUserId() );
        LOG.info( "indexForm::password=" + authForm.getPassword() );
        request.setAttribute( "message", "Welcome, " + authForm.getUserId() );
        return ( mapping.findForward( "success" ) );
    }
}

(4) http://localhost:8080/s2struts-blank/login.do に接続して
  動作確認。