[Spring & Web] return "redirect:/주소" 와 일반 return "view이름"의 차이
이번 포스팅에서는 Spring Web Project에서 URL 요청에 따른 Controller의 처리 중에서 return "redirect:/주소" 와 return "view이름"의 차이에 대해 알아보겠습니다
아래는 해당 프로젝트의 구조입니다.
다음은 코드가 약간 추가된 HomeController입니다.
package blog.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HomeController {
@GetMapping(path = "/")
public String hello() {
System.out.println("Call hello()");
return "home";
}
@GetMapping(path = "/book")
public String showBook() {
System.out.println("Call showBook()");
return "home";
}
@GetMapping(path = "/coffee")
public String showCoffee() {
System.out.println("Call showCoffee()");
return "redirect:/";
}
}
/book으로 URL을 요청할 시 showBook()을 출력시키고 홈으로 돌아갑니다.마찬가지로 /coffee로 URL을 요청할 시 showCoffee()를 출력시키고 redirect를 하여 /로 돌아갑니다.어떤 차이가 있을지 실행을 해보겠습니다.
간단한 홈 화면이 보입니다.
Call hello()가 찍혀있는 것이 보이는군요.먼저 /book으로 URL을 요청하여 단순 return "viewName"의 기능을 살펴보겠습니다.
URL은 localhost:8080/book으로 변동된 것 같고 예상대로 home.html의 내용이 보입니다.
아까 출력되었던 Call hello()를 제외한다면 Call showBook()이 불린 것을 알 수 있겠습니다.그렇다면 다음으로는 /coffee로 URL을 요청하여 결과를 살펴보겠습니다.
/coffee로 요청한다 해놓고 왜 그냥 localhost:8080이냐고요??그럼 일단 출력된 것을 보시죠.
맞습니다.저는 /coffee로 URL을 요청하였고 해당 컨트롤러가 정상적으로 호출이 되어 Call showCoffee()가 출력이 되었습니다.다만 마지막에 return redirect:/를 하여 해당 URL이 다시 / (root, 여기서는 localhost:8080)로 바뀌어 요청이 들어갔고 그에 따라 hello() 함수가 한번 더 호출이 된 것입니다.마지막으로 정리를 하자면 단순 return "viewName"같은 경우는 viewName에 해당하는 view를 보여주는 것이고, return "redirect:/"같은 경우는 redirect 오른쪽의 주소로 URL 요청을 다시 하는 것입니다.그로 인해 주소가 바뀌고 해당 URL에 속하는 컨트롤러의 함수가 한번 더 호출이 되는 것입니다.
Author And Source
이 문제에 관하여([Spring & Web] return "redirect:/주소" 와 일반 return "view이름"의 차이), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jakezo/Spring-Web-return-redirect주소-와-일반-return-view이름의-차이저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)