2011年11月18日金曜日

[Spring][hibernate][設定]xxx-servlet.xmlの記述(後半)

Springアプリケーションのビュー(URL指定の解釈)は、次のように設定する。

  <!-- ViewResolver -->
  <bean id="internalResourceViewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass">
      <value>org.springframework.web.servlet.view.JstlView</value>
    </property>
    <property name="prefix">
      <value>/WEB-INF/jsp/</value>
    </property>
    <property name="suffix">
      <value>.jsp</value>
    </property>
  </bean>

"/WEB-INF/jsp/[任意の文字列].jsp" という名前をビューの名前として認識する。
http://localhost:8080/sample/sample.html
上記設定でURLを(↑)このように指定した場合、/WEB-INF/jsp/sample.jspが該当するビューであると認識する。

サーブレットの設定ファイルには、例外処理についても規定できる。

  <!-- ExceptionHandler -->
  <bean id="exceptionHandler"
        class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <property name="exceptionMappings">
      <value>
        java.lang.Exception=exception
      </value>
    </property>
  </bean>

このように設定した場合、コントローラクラスでjava.lang.Exception例外が発生した場合、/WEB-INF/jsp/exception.jspに遷移する。
exception.jspには「システムエラーが発生しました」等の表示を行う。(もしくはアプリケーションによっては、そのまま別のページにリダイレクトする。この辺りはエラー処理の取り決めによる)

前半部でインジェクションのためのコンポーネントスキャン設定で、特定のパッケージ配下にある全てのクラスを自動でインジェクションしたが、個々のクラスでインジェクション設定を記述することもできる。
例えば、SampleDaoインターフェースにSampleDaoImplクラスをインジェクションし、プロパティとしてdataSourceを持たせる場合は、次のように記述する。

  <bean id="sampleDao" class="sample.dao.SampleDaoImpl">
    <property name="dataSource">
      <ref bean="dataSource" />
    </property>
  </bean>

Spring version3以降を使用する場合は、コンポーネントスキャンにより書かなければならない設定を大幅に減らすことができる。
コンポーネントスキャンで読ませたクラスを@Autowiredで設定する方法が推奨される。

0 件のコメント:

コメントを投稿