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)
前端コントローラとして機能する DispatcherServlet を web.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 ページが表示されるか確認することで、初期環境構築の確認が取れます。