1. 概要
Javaで実装された軽量Webフレームワークで、MVCモデルを採用した表現層技術です。Servletをラップし、リクエスト処理とレスポンス生成を効率化します。
従来のServletベースでは1クラス1リクエストの制約がありましたが、MVCアーキテクチャでは以下のように分離されます:
- コントローラ: リクエスト受信とビジネスロジックの委譲
- サービス層: ビジネス処理の実行
- DAO層: データアクセス処理
現代のWebアプリケーションでは、非同期通信が主流となり、JSON形式でのデータ交換が一般的です。
2. ライブラリ依存関係
2.1 Spring MVCの基本設定
<!-- Servlet API -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!-- Spring Web MVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.22</version>
</dependency>
2.2 Spring Bootでの設定
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
3. 設定の詳細
3.1 エンコーディング設定
GETリクエストのUTF-8対応を追加:
<configuration>
<uriEncoding>UTF-8</uriEncoding>
</configuration>
3.2 リクエスト処理の設定
public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{WebConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/api/*"};
}
@Override
protected Filter[] getServletFilters() {
CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("UTF-8");
return new Filter[]{filter};
}
}
4. 主要アノテーション
@EnableWebMvc
JSON変換を有効化するための設定アノテーション:
@Configuration
@ComponentScan("com.example.controller")
@EnableWebMvc
public class WebConfig { }
@RequestBody
JSONデータをオブジェクトにマッピング:
@PostMapping("/data")
@ResponseBody
public Response handleData(@RequestBody InputData input) {
// データ処理
}
5. リクエストパラメータ処理
5.1 基本パラメータ
@GetMapping("/params")
@ResponseBody
public String processParams(@RequestParam("value") String param) {
return "Received: " + param;
}
5.2 オブジェクトマッピング
@PostMapping("/user")
@ResponseBody
public String createUser(@RequestBody UserDTO user) {
// ユーザー登録処理
}
5.3 日付フォーマット
@GetMapping("/date")
@ResponseBody
public String processDate(@DateTimeFormat(pattern = "yyyy/MM/dd") Date date) {
return "Date: " + date;
}
6. レスポンス処理
6.1 JSONレスポンス
@GetMapping("/response")
@ResponseBody
public Map<String, Object> jsonResponse() {
Map<String, Object> response = new HashMap<>();
response.put("status", "success");
response.put("data", "example");
return response;
}
6.2 ページ遷移
@GetMapping("/view")
public String showView() {
return "dashboard";
}