리다이렉트(Redirect)와 포워드(Forward)

zooyeong·2023년 6월 2일
0

18주차

목록 보기
3/5
post-thumbnail

📌Redirect

리다이렉트(Redirect)는 클라이언트에서 요청한 URL에 대한 응답에서 다른 URL로 재접속하라고 서버가 명령을 보내는 것이다. 클라이언트는 해당 URL로 다시 요청하게 되며 리다이렉트가 일어나면 URL 주소가 바뀌면서 다시 접속되는 것을 확인할 수 있다.

redirect 활용 예시 redirect:/

@RequestMapping("/flowRedirect")
public String flowRedirect(Model model) {
		
	System.out.println("flowRedirect 들어옴");
	model.addAttribute("red1", "redirect로 전달하는 값");
		
	return "redirect:/flowmain";
}

@RequestMapping("/flowmain")
public String flowMain(HttpServletRequest request) {
		
	System.out.println("flowmain 들어옴");

	String red1 = (String)request.getAttribute("red1");
	System.out.println("redirect에서 넘어옴 red1 : " + red1);
		
	return "flowmain";
}

📌Forward

포워드(Forward)는 서버 내부에서 일어나는 호출이다. 즉, 클라이언트의 URL에 대한 요청이 들어오면 포워딩된 URL의 리소스를 확인하여 클라이언트에 응답한다. 포워딩이 일어나면 모든 동작을 서버에서 처리하고, 클라이언트에서 요청한 URL과 요청정보는 바뀌지 않는다.

forward 활용 예시 forward:/

@RequestMapping("/flowForward")
public String flowForward(Model model) {
		
	System.out.println("flowForward 들어옴");
	model.addAttribute("fwd1", "forward로 전달하는 값");
		
	return "forward:/flowmain";
}
    
@RequestMapping("/flowmain")
public String flowMain(HttpServletRequest request) {
		
	System.out.println("flowmain 들어옴");

	String fwd1 = (String)request.getAttribute("fwd1");
	System.out.println("forward에서 넘어옴 fwd1 : " + fwd1);
		
	return "flowmain";
}


값 넘기기

  • HttpSession 객체에 담아서 넘기기
    ex. session.setAttribute("sessionKey", "sessionValue");
    >>> (String)session.getAttribute("sessionKey");
  • Model 객체에 담아서 넘기기
    🔥주의! Model이 아니라 HttpServletRequest에 담겨서 넘어감
    ex. model.addAttribute("modelKey", "modelValue");
    >>> (String)request.getAttribute("modelKey");

__연습문제__

아래와 같이 접근하는 경로들이 있다.
1. localhost:8080/SpringProject/A
2. localhost:8080/SpringProject/B

아래 케이스에 맞게 나타나도록 서버 및 화면 코드를 작성하세요.

1) /A 경로로 접근 시의 화면 출력 결과

FromA
OriginalA

2) /B 경로로 접근 시의 화면 출력 결과

FromB
OriginalB

3) /B 경로로 접근 한 이후, /A경로로 접근 시 화면 출력 결과

FromA
OriginalA
FromB


*예시
서버 시작 후, 바로 A로 접근한 경우

FromA
OriginalA

서버 시작 후, B를 한번 불렀다가 A로 접근한 경우

FromA
OriginalA
FromB

서버 시작 후, B로 접근하면

FromB
OriginalB

서버 시작 후, B 갔다가 A갔다가 다시  B로 가도

FromB
OriginalB

↓ Controller

@RequestMapping("/A")
public String A(Model model) {
		
	model.addAttribute("fromA", "FromA");
	model.addAttribute("originalA", "OriginalA");
		
	return "prac0601";
}
	
@RequestMapping("/B")
public String B(HttpSession session, Model model) {
		
	session.setAttribute("fromB", "FromB");
	model.addAttribute("originalB", "OriginalB");
		
	return "prac0601";
}

↓ JSP

<p>${fromA}</p>
<p>${originalA}</p>
<p>${fromB}</p>
<p>${originalB}</p>

↓ 실행결과

profile
Have a good day ⌯’▾’⌯

0개의 댓글