GAE/J (Google App Engine for Java) で Struts を動かす
GAE/J でも Struts は動く
GAE/J では Spring を始め、いわゆる「重い」フレームワークは避けたい。
今後オレオレフレームワークを作るのか、Slim3等に移行するのかは、まだ決めかねています。
当面は Spring は兎も角、使い慣れた Struts と Velocity を使うことにします。
Velocityは先日やりましたから、今回はStrutsです。
因みにWill it play in App Engine – Google App Engine for Java | Google Groupsによると、Struts1系は 1.2.28 で COMPATIBLE となっています(2010年02月09日現在)。
ダウンロードとインストール
Apache Software Foundation の Strutsのサイトからダウンロードします。ライブラリだけで良いので、struts-1.3.10-apps.zip をダウンロードして解凍します。
解凍して出来た struts-1.3.10/lib/ の中身を全部、ワークスペースのプロジェクト下の war/WEB-INF/lib/ にコピーします。
eclipseを起動して、war/WEB-INF/lib/ の下にコピーしたjarファイルを、[CTRLキー]を押しながらポチポチと選択していきます。それらを右クリックして、[ビルド・バス(B)] – [ビルド・パスに追加(A)]をクリックします。
念のため、プロジェクトの[参照ライブラリー]にそれらが追加されている事を確認します。
web.xml に追加
WEBアプリケーションの設定ファイル( web.xml )に、Strutsのマッピングとかを追加します。(プロジェクト下の war/WEB-INF/にあります)
ベタに書くならこんなかんじです。
※load-on-startup は一応書いてますが、GAE/Jでは無視されます
<servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/classes/struts-config.xml</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
log4j.properties に追加
ロギングはlog4jを使ってます。
Struts関係のデバッグログとかが多くて困るので、追加したライブラリ関係のロギングをWARNに変更する設定を追加しました。
log4j.logger.org.apache.struts=WARN,A1 log4j.logger.org.apache.commons=WARN,A1
勿論、アペンダー(A1)は環境にあわせて適宜変えて下さい。
struts-config.xml を作成
Strutsの設定ファイル (struts-config.xml)をプロジェクトの src/ に作ります(ビルドしたら、war/WEB-INF/classes/にコピーされます)。
フォーマットとかは割愛しますが、encoding に UTF-8 を明示的に指定して上げるのが、文字化け対策としての作法の様です。
こんな風に。
<?xml version="1.0" encoding="UTF-8"?> <!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-beans> . . .
appengine-web.xml に追加
Google App Engine設定ファイル(/war/WEB-INF/appengine-web.xml)に設定を追記し、セッションを有効にします。
<sessions-enabled>true</sessions-enabled>
これをしないと、「Session support is not enabled in appengine-web.xml」とかがいっぱい出て動きません。