Home > 2009年09月

2009年09月

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  • Comments (Close): -
  • TrackBack (Close): -

スモールスタートなプロジェクトの設定(Spring Framework MVC 2.5)

バーボンです。 SpringMVCベースでシンプルなプロジェクトを立ち上げるというささやかな試みの備忘録です。 ほとんど設定ファイルの書き方に終始しています。

Spring MVCの流れ

参考:http://www.vaannila.com/spring/spring-mvc-tutorial-1.html

  1. DispatcherServletがリクエストを受け取る
  2. DispatcherServletがHandlerMappingを調べに行き、転送先のコントローラを決定し、呼び出す。
  3. コントローラがビジネスロジックを呼び出す
  4. ビジネスロジックを呼び出して「モデル」に結果をセットする
  5. モデルと、それを表示するビュー名をセットし、DispatcherServletに返す
  6. DispatcherServletがビュー名をViewResolverに送り、ビューを解決する
  7. モデルの結果を表示する

作業手順

  • pom.xmlの設定
  • web.xmlの設定
  • [servlet-name]-servlet.xmlの設定
  • applicationContext.xmlの設定
  • Controller作って画面に表示する

①pom.xmlの設定

Maven2のこちらの記事を参考にどうぞ
今回依存するjarを登録します。

  • spring-2.5.6.jar
  • spring-webmvc-2.5.6.jar
  • freemarker-2.3.9.jar(View用)

②web.xmlの設定

まずDispatcherServlet(コントローラサーブレット。コントローラのコントローラ)の設定をweb.xmlに記述します。

【web.xml】
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
  <display-name>sample</display-name>
  <servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>  
</web-app>

定義されたDispatcherServletはリクエストを受け取った後、WEB-INF配下の"[servlet-name]-servlet.xml"という名前の付いたBean定義ファイルを探しに行きます。ここで、サーブレット名は「dispatcher」となっているので、次はWEB-INF配下に"dispatcher-servlet.xml"という設定ファイルを作成します。

③dispatcher-servlet.xmlの設定

【dispatcher-servlet.xml】
<?xml version="1.0" encoding="UTF-8"?>
<!-- configure bean file by using XML scheme -->
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context"
    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">
    
</beans>

ここではBeanファイルで利用するスキーマを記述しています。 スキーマを追加するときは以下の形で追加します。 「xlmns:スキーマ名=スキーマ名の名前空間を表すURI
xsi:schemaLocation=スキーマを定義するxsdファイルのURI」

④applicationContext.xmlの設定

webアプリケーションの場合、メモリに難がない限り[servlet-name]-servlet.xml以外にapplicationContext(これもbean定義ファイル)の設定を書くことが推奨されています。ApplicationContextはDispatcherServletがデフォルトで実装している BeanFactoryを拡張したもので、BeanFactoryよりも多くの機能を持っています。
今回はContextLoaderを使ってApplicationContextを宣言的に生成します。

【web.xmlに追加】
  <listener>
    <listenerclass>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
   <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value>
  </context-param>

ContextLoaderListnerはBean定義ファイルを読み込みApplicationContextの具象クラスを生成してくれるリスナです。デフォルトでWEB-INF配下のapplicationContext.xmlを読み込みに行きますが、ファイルパスを変更したいときなどはcontext-param要素にContextConfigLocationを指定するとそのパスのファイルを読み込みます。

さて、せっかくバージョンが2.5なのでクラスを自動的にコンテナに登録してくれるアノテーションを使います。次にアノテーションを付記する設定を書きます。

【applicationContext.xml】
<?xml version="1.0" encoding="UTF-8"?>
<!-- configure bean file by using XML scheme -->
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context"
    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">
    <context:component-scan base-package="sample" />
    <context:annotation-config />
</beans>

component-scan:component-scanの設定で、base-packageで指定したパッケージ以下にあるステレオタイプアノテーションを走査して自動的にコンテナに登録してもらえます。
使えるアノテーション:@Component,@Service,@Controller,エトセトラ
annotation-config:こちらもアノテーションを解釈します。
使えるアノテーション:@Autowired,@Required,@Qualifierなど

最後にお好みのViewResolverを設定します。以下はFreeMarkerを設定した時の例です。

【applicationContext.xmlに追加】
  <bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView" />
    <property name="exposeSpringMacroHelpers" value="true"/>
    <property name="contentType" value="text/html; charset=UTF-8"/>
    <property name="cache" value="true"/>
  </bean>  
  <bean id="freemarkerConfig" 
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
    <property name="templateLoaderPaths" value="/WEB-INF/"/>
    <property name="defaultEncoding" value="SJIS"/>
    <property name="freemarkerSettings">
      <props>
        <prop key="auto_import">/spring.ftl as spring</prop>
        <prop key="locale">ja_JP</prop>
      </props>
    </property>
  </bean>

以上で設定ファイル記述は終わりです。

⑤Controller作ってViewに表示させてみる

【SampleController】
package sample;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/sample.html")
public class SampleController
{
  @RequestMapping
  public String edit(ModelMap model)
  {
    model.addAttribute("greeting", "Hello World");
    return "/sample.html";
  }
}
【sample.html】
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>test</title>
</head>
<body>
${greeting}
</body>
</html>

サーバURL/sample/sample.htmlにアクセスするとHello Worldが表示されます。以上です。

Home > 2009年09月

Recent Comments
Recent Trackback
Search
Meta
Links
Feeds

Page Top

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。