Spring MVC 環境構築と Hello World アプリケーションの作成

Spring フレームワークは、ビジネスロジック層からプレゼンテーション層に至るまでを統合的にサポートする、軽量かつモダンなオープンソース基盤です。その核心となる設計思想には、制御逆転(IOC)とアスペクト指向プログラミング(AOP)があります。

IOC はオブジェクトの生成ライフサイクルをフレームワーク側で管理し、AOP は横断的な関心事を切り離すことでコードの結合度を下げます。これらは主にリフレクション技術に基づいて実現されています。また、DI(依存性注入)という概念もあり、これは従来の明示的なインスタンス化(new演算子など)やセッターメソッドによる代入ではなく、コンテナが反射を用いて依存関係を自動的に解決・注入する仕組みです。

開発環境の準備と Maven プロジェクト構成

まず、IDE の機能を利用して新しい Maven プロジェクトを作成します。アーキタイプとして「maven-archetype-webapp」を選択し、グループID とパッケージ名を設定します。

標準的な Maven 構造において、以下の配置を行います:

  • src/main/java:Java ソースコード格納用(ソースルートとして設定)
  • src/main/resources:各種設定ファイル格納用(リソースルートとして設定)

POM ファイルにおける依存関係定義

pom.xmlファイルを編集し、必要なライブラリを宣言します。バージョン管理のため、properties セクションで定数を使用するのが推奨されます。

<properties>
    <spring.version>5.0.2.RELEASE</spring.version>
</properties>

次に、dependencies セクションに Spring モジュールとサーブレット API を追加します。

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

これらの依存関係により、Spring のコンテナ機能や Web コンテナとの連携が可能になります。

ディスパッチャースーレトの設定 (web.xml)

前端コントローラとして機能する DispatcherServletweb.xml に登録します。すべての HTTP リクエストをここで受け取り、適切なハンドラへ転送します。

<servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-mvc-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

さらに、文字化けを防ぐためのフィルターも設定しておきます。

<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>

Spring マネージメント設定ファイル

resources ディレクトリ配下に Spring の設定ファイルを作成します。ここではコンポーネントスキャンとビューresolverを設定します。

<beans xmlns="..." 
       xmlns:mvc="http://www.springframework.org/schema/mvc" 
       xmlns:context="http://www.springframework.org/schema/context">

    <!-- スキャン対象パッケージの指定 -->
    <context:component-scan base-package="com.example.webapp"/>

    <!-- ビューの解決規則 -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <!-- MVC アノテーション対応 -->
    <mvc:annotation-driven />

</beans>

コントローラークラスの実装

java ディレクトリ配下の appropriate パッケージ内にコントローラーを定義します。@Controller アノテーションにより Bean として登録され、URL マッピングを通じてメソッドが呼び出されます。

package com.example.webapp;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.ui.Model;

@Controller
@RequestMapping(value = "/app")
public class AppController {

    @RequestMapping(value = "/home", method = RequestMethod.GET)
    public String showHome(Model model) {
        model.addAttribute("message", "Welcome to Spring MVC");
        return "index";
    }

    @RequestMapping(value = "/result", method = RequestMethod.GET)
    public String processResult() {
        // 処理後の表示ページへ遷移
        return "success";
    }
}

ビューページの作成

JSP ファイルは指定したプレフィックスとサフィックスのパス(上記設定では /WEB-INF/views/)に配置します。index.jsp にはリンクを設置し、success.jsp にはメッセージを表示させます。

<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<html>
<body>
    <a href="${pageContext.request.contextPath}/app/home">Home Page</a>
</body>
</html>

実行確認

Tomcat サーバーへのデプロイ設定を行い、アプリケーションを起動します。ブラウザから該当 URL にアクセスし、リクエストが正しくディスパッチされ、期待される JSP ページが表示されるか確認することで、初期環境構築の確認が取れます。

タグ: spring-mvc Maven servlet-api JSP dependency-injection

5月19日 13:00 投稿