見出し画像

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 にアクセス

画像1


4. 解説
それぞれの挙動をまとめると次のようになる。

画像2

・フォワード
サーバー内部で別のページを読み込み表示するもの。
表示内容だけ別のページに差し替わる。

・リダイレクト
クライアントに送られたあとで別のページに移動させるもの。
表示内容とアドレスが別のページに差し替わる。



■ まとめ

リダイレクトとフォワードの違いを理解し、Spring Bootで実現する実装を確認した。リダイレクト、及びリダイレクトはWebアプリケーションでは欠かせない概念なので、基本としてしっかり抑えておきたい。




この記事が気に入ったらサポートをしてみませんか?