framework/spring mvc

[springMVC] 11. ํฌ์›Œ๋“œ์ด๋™ VS ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ์ด๋™

jeri 2024. 8. 4. 14:57
๋ฐ˜์‘ํ˜•

[๐Ÿ–คModel] RedirectController.java
package xyz.itwill10.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

@Controller
public class RedirectController {

 

๐Ÿงกํฌ์›Œ๋“œ ์ด๋™ : [/forward_move] ์š”์ฒญ

	//ํฌ์›Œ๋“œ ์ด๋™
	@RequestMapping("/forward_move")
	public String forward(Model model) {
    
		//Model ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ทฐ์—๊ฒŒ ์ œ๊ณตํ•  ๊ฐ์ฒด๋ฅผ ์†์„ฑ๊ฐ’์œผ๋กœ ์ €์žฅ - Request Scope
		model.addAttribute("name", "ํ™๊ธธ๋™");
        
		//๋ทฐ๋ฅผ ์ƒ์„ฑํ•ญ๊ธฐ ์œ„ํ•œ ๋ทฐ์ด๋ฆ„(ViewName) ๋ฐ˜ํ™˜
		// => Front Controller๋Š” ์ œ๊ณต๋ฐ›์€ ๋ทฐ์ด๋ฆ„์„ InternalResourceViewResolver ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ JSP ๋ฌธ์„œ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  JSP ๋ฌธ์„œ๋กœ ํฌ์›Œ๋“œ ์ด๋™ํ•˜์—ฌ ์‘๋‹ต ์ฒ˜๋ฆฌ       
		// ๐Ÿงกํฌ์›Œ๋“œ ์ด๋™ : ์„œ๋ฒ„ ๋‚ด๋ถ€์—์„œ ํ˜„์žฌ ์›นํ”„๋กœ๊ทธ๋žจ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ๋‹ค๋ฅธ ์›นํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์ด๋™ํ•˜์—ฌ ์‘๋‹ต ์ฒ˜๋ฆฌ
		// => ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ URL ์ฃผ์†Œ๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์œผ๋ฉฐ Request Scope ์†์„ฑ๊ฐ’์„ ๊ฐ์ฒด๋กœ ์ œ๊ณต๋ฐ›์•„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    	// => ํฌ์›Œ๋“œ์ด๋™(์Šค๋ ˆ๋“œ ์ด๋™)์€ **request, reponse ๊ฐ์ฒด ๋‹ค ์‚ฌ์šฉ ๊ฐ€๋Šฅ**
		return "display_forward";
	}

 

๐Ÿ’š๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์ด๋™ : [/redirect]์š”์ฒญ -> [/redirect_move]์žฌ์š”์ฒญ

	//[๐ŸŽ๋ฐฉ๋ฒ•1] : ์žฌ์š”์ฒญํ•  ์ฃผ์†Œ(/redirect_move)์— ๊ฐ’์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ถœ๋ ฅ๋จ
	//Front Controller์—๊ฒŒ ๋ฐ›์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์žฌ์š”์ฒญํ•  ์ฃผ์†Œ์ž„
	//ํฌ์›Œ๋“œ ์ด๋™
	@RequestMapping("/redirect_move")
	public String redirect(Model model) {
		model.addAttribute("name", "์ž„๊บฝ์ •");
		return "display_redirect";
	}

	//๋ฆฌ๋‹ค์ด๋ ‰ํŠธ์ด๋™
	@RequestMapping("/redirect")
	public String redirect() {   
		//๋ฐ˜ํ™˜๋˜๋Š” ๋ทฐ์ด๋ฆ„์— redirect ์ ‘๋‘์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ URL ์ฃผ์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด Front Controller๋Š” ๋ฐ˜ํ™˜๋ฐ›์€ ๋ทฐ์ด๋ฆ„์˜ URL ์ฃผ์†Œ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌ - ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์ด๋™
    	// => ์ฆ‰, Front Controller๋Š” ํฌ์›Œ๋“œ ์ด๋™ํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ JSP๋กœ ์‘๋‹ตํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์žฌ์š”์ฒญํ•  URL ์ฃผ์†Œ๋กœ ์‘๋‹ตํ•˜๋Š” ๊ฒƒ์ž„
		// => ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ URL ์ฃผ์†Œ๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ์‘๋‹ต ์ฒ˜๋ฆฌํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” ํ•ด๋‹น URL ์ฃผ์†Œ๋กœ ๋ธŒ๋ผ์šฐ์ €์˜ ์ฃผ์†Œ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์„œ๋ฒ„์— URL ์ฃผ์†Œ์˜ ํŽ˜์ด์ง€ ์š”์ฒญ ์ฒ˜๋ฆฌ      
		// ๐Ÿ’š๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์ด๋™ : ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ URL ์ฃผ์†Œ๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ํŽ˜์ด์ง€๋ฅผ ์žฌ์š”์ฒญํ•˜์—ฌ ์›นํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰๊ฒฐ๊ณผ๋กœ ์‘๋‹ต ์ฒ˜๋ฆฌ
		// => ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ URL ์ฃผ์†Œ๋Š” ๋ณ€๊ฒฝ๋˜์ง€๋งŒ **Request Scope ์†์„ฑ๊ฐ’ ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅ**
		return "redirect:/redirect_move"; ///ํด๋ผ์•ผ redirect_move๋กœ ๋‹ค์‹œ ์š”์ฒญํ•ด!
	}
	//[๐Ÿ๋ฐฉ๋ฒ•2] : ์žฌ์š”์ฒญํ•  ์ฃผ์†Œ(/redirect_move)์— ๊ฐ’์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ถœ๋ ฅ์•ˆ๋จ
	//Front Controller์—๊ฒŒ ๋ฐ›์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์žฌ์š”์ฒญํ•  ์ฃผ์†Œ์ž„
	//ํฌ์›Œ๋“œ ์ด๋™
	@RequestMapping("/redirect_move")
	public String redirect() {
		return "display_redirect";
	}
    
	//๋ฆฌ๋‹ค์ด๋ ‰ํŠธ์ด๋™
	@RequestMapping("/redirect")
	public String redirect(Model model) {
		//Model ๊ฐ์ฒด์— ์ €์žฅ๋œ ์†์„ฑ๊ฐ’์€ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์ด๋™๋œ ํŽ˜์ด์ง€์˜ ์š”์ฒญ์ฒ˜๋ฆฌ ๋ฉ”์†Œ๋“œ์™€ ๋ทฐ์—์„œ ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅ
		model.addAttribute("name", "์ž„๊บฝ์ •"); //Request Scope - ์Šค๋ ˆ๋“œ๊ฐ€ ์ด๋™๋˜์ง€ ์•Š์€ ์ด์ƒ ์ ˆ๋Œ€ ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅ
		return "redirect:/redirect_move";
	}
	//[๐Ÿ“๋ฐฉ๋ฒ•3] : ์žฌ์š”์ฒญํ•  ์ฃผ์†Œ(/redirect_move)์— ๊ฐ’์ด ์—†์–ด๋„ RedirectAttributes๊ฐ์ฒด ์ด์šฉํ•˜๋ฉด ์‚ฌ์šฉ ๊ฐ€๋Šฅ
	//Front Controller์—๊ฒŒ ๋ฐ›์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์žฌ์š”์ฒญํ•  ์ฃผ์†Œ์ž„
	//ํฌ์›Œ๋“œ ์ด๋™
	@RequestMapping("/redirect_move")
	public String redirect() {
		return "display_redirect";
	}

	//๋ฆฌ๋‹ค์ด๋ ‰ํŠธ์ด๋™
	// => RedirectAttributes ๊ฐ์ฒด : ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์ด๋™๋˜๋Š” ํŽ˜์ด์ง€์˜ ์š”์ฒญ ์ฒ˜๋ฆฌ ๋ฉ”์†Œ๋“œ์™€ ๋ทฐ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ Request Scope ์†์„ฑ๊ฐ’์„ ์ €์žฅํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๊ฐ์ฒด
	@RequestMapping("/redirect")
	public String redirect(RedirectAttributes attributes) {
		//RedirectAttributes.addFlashAttribute(String attributeName, Object attributeValue) : ์†์„ฑ๋ช…๊ณผ ์†์„ฑ๊ฐ’์„ ์ €์žฅํ•˜์—ฌ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์ด๋™๋˜๋Š” ํŽ˜์ด์ง€์˜ ์š”์ฒญ ์ฒ˜๋ฆฌ ๋ฉ”์†Œ๋“œ์™€ ๋ทฐ์—๊ฒŒ ์†์„ฑ๊ฐ’์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์†Œ๋“œ - Request Scope
		// => ์ฃผ์˜) addAttribute ์•„๋‹ˆ๊ณ , addFlashAttribute์ž„
		attributes.addFlashAttribute("name", "์ž„๊บฝ์ •");
		return "redirect:/redirect_move";
	}
    
    //Request Scope๋Š” 
    //@ModelAttribute ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ฉ”์†Œ๋“œ์— ์ž‘์„ฑํ•˜๋ฉด "๋ชจ๋“  ์š”์ฒญ์ฒ˜๋ฆฌ๋ฉ”์†Œ๋“œ์˜ ๋ทฐ"์—๊ฒŒ ์ œ๊ณต ๊ฐ€๋Šฅ
    //@ModelAttribute ์–ด๋…ธํ…Œ์ด์…˜์„ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ž‘์„ฑํ•˜๋ฉด "ํ•ด๋‹น ์š”์ฒญ์ฒ˜๋ฆฌ๋ฉ”์†Œ๋“œ์˜ ๋ทฐ"์—๊ฒŒ๋งŒ ์ œ๊ณต ๊ฐ€๋Šฅ
    
    //Seesion Scope๋„
    //๊ฐ™์€ Session์„ ์ด์šฉํ•˜๋Š” ๋ชจ๋“  ๋ทฐ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    //ํด๋ž˜์Šค ๋‚ด์—์„œ๋งŒ ์‹œ์šฉํ•˜๋Š” ๋ทฐ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    //HttpSession ๊ฐ์ฒด์— ์ €์žฅํ•˜๋ฉด ๋ชจ๋“  ์š”์ฒญ ์ฒ˜๋ฆฌ ๋ฉ”์†Œ๋“œ์˜ ๋ทฐ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
}
[๐ŸงกView] display_forward.jsp - ์ถœ๋ ฅํŽ˜์ด์ง€
  • ํฌ์›Œ๋“œ ์ด๋™ํ•ด ์†์„ฑ๊ฐ’ ์‚ฌ์šฉํ•œ ๋ชจ์Šต
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SPRING</title>
</head>
<body>
	<h1>ํฌ์›Œ๋“œ ์ด๋™</h1>
	<hr>
	<h2>${name }๋‹˜, ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.</h2>
</body>
</html>

[๐Ÿ’šView] display_redirect.jsp - ์ถœ๋ ฅํŽ˜์ด์ง€
  • ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์ด๋™ํ•ด ์†์„ฑ๊ฐ’ ์‚ฌ์šฉํ•œ ๋ชจ์Šต
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SPRING</title>
</head>
<body>
	<h1>๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์ด๋™</h1>
	<hr>
	<h2>${name }๋‹˜, ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.</h2>
</body>
</html>

๐ŸŽ ๋ฐฉ๋ฒ•1์— ์˜ํ•ด ์ถœ๋ ฅ๋จ

 

๐Ÿ ๋ฐฉ๋ฒ•2์— ์˜ํ•ด ์ถœ๋ ฅ๋จ

 

๐Ÿ“ ๋ฐฉ๋ฒ•3์— ์˜ํ•ด ์ถœ๋ ฅ๋จ

 

๋ฐ˜์‘ํ˜•