struts2でアプリ作成(準備編2)

前回の作業でとりあえず枠組みはできました。
http://kamegu.hateblo.jp/entry/2013/04/02/164939

今回は、それを補足する設定を追加していきます。

リクエスト先が定義(設定)されていない場合の動作について

前回の設定のままで、例えば/myapp/hogeにアクセスするとtomcatのエラー画面が表示されるはずです。この画面の内容を指定したい場合は、
例えばsrc/main/webapp/nopage.jspをつくり、sturts.xmlを次のように書き換えます。

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
  <package name="default" extends="struts-default">
    <action name="*">
      <result>/nopage.jsp</result>
    </action>
  </package>
</struts>

nopage.jspが次のような内容だとすると、サーバ再起動後の表示は「ページがありません。」とだけとなるはずです。

<%@page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf8">
</head>
<body>
ページがありません。
</body>
</html>

struts.xmlを自動で反映させる

上で作業したようにstruts.xmlの内容はサーバを再起動しないと反映されませんでした。
これに対応するためには、src/main/resources/struts.propertiesファイルを作成し、下記行を追加します。

struts.devMode=true

もしくは

struts.configuration.xml.reload=true

これで再起動を行うと、以降はstruts.xmlの変更が自動で反映されるはずです。
前者のほうが汎用的な設定で、開発中はメリットが多いと思われます。
http://struts.apache.org/release/2.1.x/docs/devmode.html
本番環境では=falseに設定すべき項目です。

その他の設定

struts.xml

strutsタグ内に下記を追加します。(場所はどこでもいいです)

  <constant name="struts.ui.theme" value="simple" />
  <constant name="struts.convention.default.parent.package" value="myapp"/>

  <package name="myapp" extends="convention-default">
    
  </package>

struts.ui.themeは、strutsタグのテーマを設定します。
http://struts.apache.org/release/2.2.x/docs/struts-2-themes.html
デフォルトでは「xhtml」になっていますが、これだとフォームの中身を勝手に表組みに変えたりして紛らわしいこともあるのでそういう心配のない「simple」に変えています。ページごと、タグごとにテーマを変えることは可能です。

struts.convention.default.parent.packageはconventionプラグインによりマッピングされたアクションに対して適用するパッケージを指定するものです。その下でパッケージの定義を書いています。
ひとまずはconvention-default(struts-defaultと同じ)を継承していますが、今後拡張することが予想されるためあらかじめパッケージだけ宣言しています。

struts設定について

strutsの設定は下記のいずれかに記述します。

  1. struts-default.xml
  2. struts-plugin.xml
  3. struts.xml
  4. struts.properties
  5. web.xml

http://struts.apache.org/2.x/docs/constant-configuration.html
1,2についてはstruts2-coreやstrutsプラグインの範囲なので、3~5のいずれかで設定することになります。
devModeの設定ではstruts.propertiesに記述しましたが、今回は.propertiesファイルは開発環境と本番環境で切り替えて使用し、.xmlファイルは常に同じファイルを使用するという想定です。