前提

SpringFramework に統合する場合、Integrating with other web framworks にある、Common Configuration に記載のある方法にのっとった設定を行う事を前提としています。

プロジェクトの作成

  • Maven2 によるプロジェクトの雛形作成

    まずは以下のコマンドを入力してください。
    もし「BUILD FAILURE」と表示されエラーになった場合は、maven-archetype-plugin が古い可能性があります。 その場合「M2_REPO/org/apache/maven/plugins/maven-archetype-plugin/」をディレクトリごと削除して再実行することで、 最新のmaven-archetype-pluginを使用して実行することができます。(M2_REPOはMavenのローカルリポジトリ)

    mvn archetype:generate -DarchetypeCatalog=http://cubby.seasar.org/

    コマンド入力後、いくつかの質問に回答していきます。

    Choose archetype:
    1: remote -> cubby-s2-archetype (Cubby 2.0.1 Seasar2 Integration)
    2: remote -> cubby-guice-archetype (Cubby 2.0.1 Guice Integration)
    3: remote -> cubby-spring-archetype (Cubby 2.0.1 Spring Integration)
    4: remote -> cubby-archetype (Cubby 1.1.7)
    Choose a number:  (1/2/3/4): 

    3を入力して、cubby-spring-archetype (Cubby 2.0.1 Spring Integration) を選んでください。

    Define value for groupId: :

    作成するプロジェクトのグループIDを入力してください。 例 : com.example.foo

    Define value for artifactId: :

    作成するプロジェクトのアーティファクトIDを入力してください。 例 : barapp

    Define value for version: :

    作成するプロジェクトのバージョンを入力してください。 例 : 1.0-SNAPSHOT

    Define value for package: :

    作成するプロジェクトのパッケージを入力してください。 例 : com.example.foo.barapp

    Confirm properties configuration:
    cubby-version: 2.0.1
    spring-version: 2.5.6
    groupId: com.example.foo
    artifactId: barapp
    version: 1.0-SNAPSHOT
    package: com.example.foo.barapp
     Y: :

    いままで入力した内容の確認を求められます。問題がなければ Y を入力してください。プロジェクトの雛形が作成されます。
    spring のバージョンなどの設定を変更する場合はここで N を選択して再度設定を入力してください。 再設定の際に全てのオプションが設定可能です。(プロジェクトのアーティファクト名、パッケージ名は再入力する必要があります。)\

各種ファイル

ディレクトリに配備する必要があるファイルを説明します。 Maven2 を使わずにプロジェクトを作成するときも参考にしてください。

必要なライブラリ (WEB-INF/lib)

依存関係を参照してください。 WEB-INF/lib 以下に配備します。

主な依存ライブラリを以下にあげます。

cubby-*.jar Cubby 本体 必須
cubby-spring-*.jar Spring 統合 必須
cubby-unit-*.jar 単体テストサポート 任意
cubby-gson-*.jar JSON サポート 任意
spring-core-*.jar
spring-beans-*.jar
spring-context-*.jar
spring-web-*.jar
Spring 必須
slf4j-api.jar ログ出力 API 必須
commons-fileupload-*.jar
commons-io-*.jar
ファイルアップロード機能 必須
主な依存ライブラリ
Cubby Spring
2.0.0+ 2.5.6+
Cubby と Spring のバージョンの推奨の組み合わせ

デプロイメント記述子 (WEB-INF/web.xml)

Cubby はサーブレットフィルタとして動作します。 web.xml にサーブレットフィルタとフィルタマッピングを追加します。 登録する際は以下の順序で登録してください。

  1. コンテキストパラメータ contextConfigLocation (必須)

    Spring の ApplicationContext設定ファイルのパスををコンテキストパラメータに指定します。
    パスやファイル名はご利用のものを指定ください。

            <context-param>
                    <param-name>contextConfigLocation</param-name>
                    <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
            </context-param>
  2. ContextLoaderListener (必須)

    上述の設定ファイルに基づいて ApplicationContext を初期化するサーブレットコンテキストリスナです。

            <listener>
                    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
            </listener>
  3. RequestContextListener (必須)

    @Scope("request") や @Scope("session") を利用するためのサーブレットコンテキストリスナです。

            <listener>
                    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
            </listener>
  4. SendErrorFilter (任意)

    *.jsp ファイルなど、直接アクセスされたくないファイルへのアクセスを制御するフィルターです。
    この例ではブラウザ等から *.jsp へアクセスがあった場合に NotFound (404) を返します。

            <filter>
                    <filter-name>senderror</filter-name>
                    <filter-class>org.seasar.cubby.filter.SendErrorFilter</filter-class>
                    <init-param>
                            <param-name>statusCode</param-name>
                            <param-value>404</param-value>
                    </init-param>
            </filter>
            <filter-mapping>
                    <filter-name>senderror</filter-name>
                    <url-pattern>*.jsp</url-pattern>
                    <dispatcher>REQUEST</dispatcher>
            </filter-mapping>
  5. EncodingFilter (任意)

    リクエストのエンコーディングを設定するためのフィルタです。

            <filter>
                    <filter-name>encoding</filter-name>
                    <filter-class>org.seasar.cubby.filter.EncodingFilter</filter-class>
                    <init-param>
                            <param-name>encoding</param-name>
                            <param-value>UTF-8</param-value>
                    </init-param>
            </filter>
            <filter-mapping>
                    <filter-name>encoding</filter-name>
                    <url-pattern>/*</url-pattern>
            </filter-mapping>
  6. CubbyFilter (必須)

    Cubby の主な処理を行うフィルタです。 リクエストの情報からアクションメソッドを起動します。 対象のアクションが見つからない場合は FilterChain で後続のフィルタに処理を移譲します。

    また、処理の対象外とする URL を ignorePathPattern で指定できます。 イメージのフォルダなどはここで指定して処理対象外とすることでパフォーマンスの低下を防ぐことができます。 対象外にするパスを正規表現のカンマ区切りで指定してください。

        <filter>
            <filter-name>cubby</filter-name>
            <filter-class>org.seasar.cubby.filter.CubbyFilter</filter-class>
            <init-param>
                <param-name>ignorePathPattern</param-name>
                <param-value>/css/.*,/js/.*,/img/.*</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>cubby</filter-name>
            <url-pattern>/*</url-pattern>
            <dispatcher>REQUEST</dispatcher>
            <dispatcher>FORWARD</dispatcher>
        </filter-mapping>
  7. CubbyServlet (必須)

    Cubby のプラグインの初期化を行うサーブレットです。

            <servlet>
                    <servlet-name>cubby</servlet-name>
                    <servlet-class>org.seasar.cubby.servlet.CubbyServlet</servlet-class>
                    <load-on-startup>1</load-on-startup>
            </servlet>

ApplicationContext設定ファイル (WEB-INF/classes)

  1. applicationContext.xml

    ファイル名はデプロイメント記述子で指定したものにして下さい。ここでは慣例にのっとって、applicationContext.xml としています。 このファイルでは以下の xml をインポートしてください。

    • cubby.xml (cubby-spring の jar ファイルに含まれます)
    • app-cubby.xml
    <?xml version="1.0" encoding="UTF-8" ?>
    <beans xmlns="http://www.springframework.org/schema/beans"
            xmlns:context="http://www.springframework.org/schema/context"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="
            http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
    
            <import resource="classpath*:cubby.xml" />
            <import resource="app-cubby.xml" />
    </beans>
  2. app-cubby.xml

    Cubby アプリケーション全体の設定です。 applicationContext.xml からインポートしてください。 現在は日付フォーマット、リクエストのパーサ、ファイルアップロード用の設定、メッセージの振る舞いを指定できます。

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
            xmlns:util="http://www.springframework.org/schema/util" xmlns:context="http://www.springframework.org/schema/context"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
            http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
    
            <import resource="classpath*:cubby-converters.xml" />
    
            <!-- 日付フォーマットの設定 -->
            <bean id="defaultFormatPattern" class="org.seasar.cubby.controller.impl.DefaultFormatPattern">
                    <property name="datePattern">
                            <value>yyyy-MM-dd</value>
                    </property>
                    <property name="timePattern">
                            <value>HH:mm:ss</value>
                    </property>
                    <property name="timestampPattern">
                            <value>yyyy-MM-dd HH:mm:ss</value>
                    </property>
            </bean>
    
            <!-- リクエストパーサー -->
            <bean id="multipartRequestParser" class="org.seasar.cubby.controller.impl.MultipartRequestParser" />
            <bean id="defaultRequestParser" class="org.seasar.cubby.controller.impl.DefaultRequestParser" />
            <util:list id="requestParsers">
                    <ref bean="multipartRequestParser" />
                    <ref bean="defaultRequestParser" />
            </util:list>
    
            <!-- ファイルアップロードの設定 -->
            <bean id="servletFileUpload" class="org.apache.commons.fileupload.servlet.ServletFileUpload"
                    scope="prototype">
                    <property name="fileItemFactory">
                            <bean id="diskItemFactory"
                                    class="org.apache.commons.fileupload.disk.DiskFileItemFactory">
                                    <property name="sizeThreshold">
                                            <value>4096</value>
                                    </property>
                            </bean>
                    </property>
                    <property name="fileSizeMax">
                            <value>10000000</value>
                    </property>
            </bean>
    
            <!-- メッセージの振る舞い -->
            <bean id="messagesBehavior"
                    class="org.seasar.cubby.controller.impl.DefaultMessagesBehaviour">
                    <property name="baseName">
                            <value>messages</value>
                    </property>
            </bean>
    
    </beans>

プロパティファイル (WEB-INF/classes)

  1. messages_ja.properties (messages_en.properties)

    メッセージリソース用のプロパティファイル。 メッセージリソースを参照してください。