Spring Bootにおけるフォワードとリダイレクトの違い
■ 何をするのか
Spring Bootでリダイレクト、及びフォワードを実装する。リダイレクトとフォワードの違いを理解し実装できれば柔軟なアプリケーション設計が可能になる。
前提としてリダイレクトとフォワードの用語としての理解は次の記事が参考になる。本投稿ではSpring Bootでリダイレクトとフォワードのそれぞれを実現するサンプル実装を行う。
■ 前提
動作環境情報を掲示する。
環境
OS : macOS Mojave 10.14
JDK : jdk1.8.0_231.jdk
IDE : IntelliJ IDEA
ビルドツール : Gradle 6.4.1
Spring Boot バージョン : 2.3.2
Thymeleaf : 3.0
ファイル階層
main
.
├── java
│ └── com
│ └── example
│ └── hellospringboot
│ ├── HelloSpring.java
│ └── HelloSpringBootApplication.java
└── resources
├── application.properties
├── static
└── templates
├── test1.html
└── test2.html
■ 流れ
1. HTMLの作成
2. コントローラーの実装
3. 実行
4. 解説
■ 実装
1. HTMLの作成
まずフォワードとリダイレクトの動きを確認しやすくするために、HTMLファイルを2つ用意する。URLの動きが確認したいので、HTMLについては中身の指定はないものとする。
test1.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>test1.html</h1>
</body>
</html>
test2.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>ここはtest2.htmlです</h2>
</body>
</html>
2. コントローラーの実装
次にJava側の実装を行う
helloSpring.java
package com.example.hellospringboot;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class HelloSpring {
@RequestMapping(value = "/", method = RequestMethod.GET)
public ModelAndView getTest1(ModelAndView mav){
mav.setViewName("test1");
return mav;
}
@RequestMapping(value = "/test2", method = RequestMethod.GET)
public ModelAndView getTest2(ModelAndView mav){
mav.setViewName("test2");
return mav;
}
@RequestMapping(value = "/redirect_test", method = RequestMethod.GET)
public String other(){
return "redirect:/test2";
}
@RequestMapping("/forward_test", method = RequestMethod.GET)
public String home(){
return "forward:/test2";
}
}
3. 実行
実際に実行し挙動を確認する。下部の画像では次の操作を行っている。
1. localhost:8080/ にアクセス
2. localhost:8080/ → localhost:8080/forward_test にアクセス
3. localhost:8080/forward_test → localhost:8080/redirect_test にアクセス
4. 解説
それぞれの挙動をまとめると次のようになる。
・フォワード
サーバー内部で別のページを読み込み表示するもの。
表示内容だけ別のページに差し替わる。
・リダイレクト
クライアントに送られたあとで別のページに移動させるもの。
表示内容とアドレスが別のページに差し替わる。
■ まとめ
リダイレクトとフォワードの違いを理解し、Spring Bootで実現する実装を確認した。リダイレクト、及びリダイレクトはWebアプリケーションでは欠かせない概念なので、基本としてしっかり抑えておきたい。
この記事が気に入ったらサポートをしてみませんか?