Web/Spring

[Spring] JSP와 Spring에서의 Forward와 Redirect : InternalResourceView / RedirectView

728x90

 

 

 

 

JSP에서 한 서블릿에서 다른 서블릿 / JSP로 요청를 전달할 때 사용하는 방법인

Forward & Redirect에 대해 알아보고,

Spring에서 이들을 어떻게 처리하는지 알아보자!

 

 

1. Forward

"내가 물어보고 알려줄게"

- 웹 애플리케이션에서 한 서블릿에서 다른 리소스(Servlet, JSP, HTML)로 요청을 전달 (총 요청 1번)

- 클라이언트로 요청을 전달하는 것이 아니라 서버 내 다른 리소스 호출

- 기존 request 정보가 유지되어 조회 가능

 

 

1.1. Forward 예시 코드

@Controller
public class TestController {
    @GetMapping("/test")
    public String test(HttpServletRequest request) {
    	System.out.println("test");
        return "forward:/hello";
    }
}

 

 

1.2. Spring의 Forward : InternalResourceView

- InternalResourceView : forward로 응답할 때, 내부적으로 forward 요청을 처리

- Forward 요청 처리

    1. 클라이언트의 요청

    2. DispatcherServlet이 요청을 받아 URL에 해당하는 Controller로 전달

    3. Controller에서 "뷰 이름" DispatcherServlet에 반환

    4. InternalResourceView에서 forward() 사용하여 JSP 실행

    5. 클라이언트로 응답

 

💡 일반적인 요청 처리

    1. 클라이언트의 요청

    2. DispatcherServlet이 요청을 받아 URL에 해당하는 Controller로 전달

    3. Controller에서 "뷰 이름" DispatcherServlet에 반환

    4. InternalResourceViewResolver는 JSTL라이브러리가 있으면 JstlView 반환

    5. JstlView에서 Jsp View 처리

    6. 클라이언트로 응답

 

 

 

 

 

 

 

 

 

2. Redirect

"내가 연락처 줄게 물어봐"

- 요청을 클라이언트로 전달하여 다른 웹 애플리케이션 요청 (총 요청 2번)

    • 브라우저 요청 → 상태코드 300번대 + Location 응답 → 브라우저가 자동으로 해당 Location으로 요청

- 기존 요청의 request에 있는 정보를 사용하지 않고 새롭게 request, response 객체가 생성된다

- 요청 변환에 따라 다른 URL로 변경될 수 있다

 

 

2.1. Redirect 예시 코드

@Controller
public class TestController {
    @GetMapping("/test")
    public String test(Model m) {
    	String msg = URLEncoder.encode("인사를 먼저 하셔야죠.", "utf-8");
        return "redirect:/hello?msg=" + msg;    // URL 재작성
    }

    • redirect는 재요청되어 위에서 사용된 model을 /hello에서도 사용할 수 없다

    • URL 재작성을 통해 msg를 전달

    💡 URL 재작성 시, String을 그대로 넘기면 깨지기 때문에 인코딩 필요!

 

 

2.2. Spring의 Redirect : RedirectView

- RedirectView : redirect로 응답할 때, 응답 헤더를 생성

- Redirect 처리 과정

    1. 클라이언트의 요청

    2. DispatcherServlet이 요청을 받아 URL에 해당하는 Controller로 전달

    3. Controller에서 "redirect:로케이션"를 DispatcherServlet에 반환

    4. RedirectView에서 응답헤더 만들어 응답

    5. 클라이언트는 응답 내 로케이션으로 재요청

 

 

 

 

 

 

 

 

📌  References

- https://dev-handbook.tistory.com/35

 

[java] jsp에서 forward vs redirect, 포워드와 리다이렉트 비교

Java 기반의 웹 애플리케이션에서 JSP는 forward 혹은 redirect의 두 가지 방법을 사용하여 한 서블릿(Servlet)에서 다른 서블릿 혹은 JSP로 제어를 전달합니다. forward와 redirect는 요청을 전달하지만 완전

dev-handbook.tistory.com

- https://byungmin.tistory.com/71

 

[Spring] Redirect와 Forward에 대해 알아보자

JSP에서 Redirect와 Forard 처리 과정 Redirect - 위와 같이 Redirect는 요청이 2번이며, 각 요청은 서로 다른 객체(request)이다. - 첫 번째 요청을 GET으로 하던 POST로 하던 Redirect로 인해서 두 번째 요청을 보

byungmin.tistory.com

- https://mgyo.tistory.com/577

 

스프링 MVC 1 - 뷰 리졸버

뷰 리졸버 이번에는 뷰 리졸버에 대해서 자세히 알아보자. OldController - View 조회할 수 있도록 변경 View를 사용할 수 있도록 다음 코드를 추가했다. return new ModelAndView("new-form"); 실행 http://localhost:80

mgyo.tistory.com

 

 

 

 

 

728x90