Criming
코딩으로 업삼기
Criming
전체 방문자
오늘
어제
  • 분류 전체보기 (29)
    • Programming (28)
      • Spring (5)
      • Database (2)
      • JSP (6)
      • Java (10)
      • 탐구 및 해결 (1)
      • 연습문제 (3)
      • 예제 (1)
    • 자격증 (0)
    • 기타 (1)
      • 블로그 운영 (0)
      • 문서 (1)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • System.out
  • printf()
  • ec2
  • forward
  • HttpuURLConnection
  • java
  • main()
  • 아스키코드
  • Java SE
  • ASCII
  • println()
  • spring
  • jre
  • Eclipse
  • print()
  • jsp
  • Tomcat
  • 자바규칙
  • 인스턴스
  • redirect
  • sendRedirect
  • JDK
  • 표현언어
  • jvm
  • aws
  • Escape문자
  • param
  • json
  • Java EE
  • try-catch

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Criming

코딩으로 업삼기

Programming/JSP

[JSP] Redirect와 forward의 차이점(+sendRedirect )

2022. 10. 14. 19:58

아래와 같은 예제 및 코드를 사용하다보면 Redirect와 forward의 차이점이 무엇인지 의문점이 들때가 있다.

<jsp:forward page="page_control_end.jsp"/>
response.sendRedirect("ex1.jsp");

 

특정 URL에서 리다이렉트(redirect) 또는 포워드(forward)가 일어나게 되면 페이지가 전환되는 것을 볼 수 있다.

페이지 전환되는 같은 기능을 하는데, 이둘에는 페이지를 전환하는 주체가 다르고 추후 작동에 영향을 미치므로 이해를 하고 가야한다.

 

리다이렉트의 페이지 전환 주체는 클라이언트이며, 포워드의 페이지 전환 주체는 서버이다.

(여기서 말하는 클라이언트는 보통 웹브라우저를 뜻한다)


forward

1) 포워드 방식은 다음 이동한 URL로 요청정보(파라미터)를 그대로 전달한다.

2) 동일한 web container에 있는 페이지로만 이동이 가능하다.

3) 현재 실행중인 페이지와 forward에 의해 호출될 페이지는 request, response 객체를 공유한다.

 

(자세히)

클라이언트(웹 브라우저)가 요청(request)을 [ url 1 ]로 페이지를 이동하거나 요청정보(파라미터)를 넘길 때,

[ url 1 ]페이지 코드에는 받은 요청을 [ url 2 ]로 forward를 한다면,

 

해당 forward는 서버상에서만 알 수 있어

클라이언트는 어디로 갔는지 알 수 없어 URL경로는 최초 호출한 [ url 1 ]가 그대로 나타나고,

웹브라우저에서는 [ url 2 ] 페이지가 보이게 된다.

 

Redirect

1) 리다이렉트 방식은 웹 브라우저는 URL을 지시된 주소로 바꾸고 그 주소로 이동된다.

2) 새로운 페이지에서는 request, response 객체가 새롭게 생성된다.

 

(자세히)

클라이언트(웹 브라우저)가 요청(request)을 [ url 1 ]로 페이지를 이동하거나 요청정보(파라미터)를 넘길 때,

[ url 1 ]페이지 코드에는 받은 요청을 [ url 2 ]로 redirect를 한다면,

 

[ url 1 ] 웹브라우저에서  [ url 2 ] 로 웹브라우저로 이동하여 화면 URL도 해당 [ url 2 ]로 변경된다.

(기존 [ url 1 ] 웹브라우저는 끊긴다.)

 

다시 정리하자면, redirect와 forward의 차이점은 크게 아래와 같이 나눌 수 있다.

첫째, URL의 변화여부(변화 O → redirect, 변화 X → forward)

둘째, 객체의 재사용여부(변화 O →  forward, 변화 X → redirect)

 

리다이렉트와 포워드의 사용

사용자의 요청 정보가 바뀌어버리는 리다이렉트와 요청 정보는 그대로 유지한 체 서버 내부의 동작만 바뀌는 포워드는 적절히 사용되어야 한다.

 

시스템(session,DB)에 변화가 생기는 요청(로그인, 회원가입, 글쓰기)의 경우 redirect방식으로 응답하는 것이 바람직하며,

시스템 변화가 생기지 않는 단순조회(리스트보기, 검색)의 경우 forward방식으로 응답하는 것이 바람직하다.


예제

 

예제1) forward와 sendRedirect 차이점

 

forward 방식은

→ URL 변화하지 않아 어떤 페이지로 이동했는지 알 수 없고, 브라우저에 최초 호출한 URL이 표시된다.

→ 최초 호출한 url에서 입력한 파라미터(name)를 사용하여 출력한다.

     (추가로 포워드하며 파라미터를 추가 생성할 수도 있다.)

 

sendRedirect 방식은

→ 요청한 페이지로 이동되면서 URL로 변경된다.

→ 최초로 호출한 URL의 파라미터는 사용할 수 없다.

 

(page_control.jsp)

<title>page control</title>
</head>
<body>
	<hr>
	<form action="forward_action.jsp" method="post">
		forward action : <input type=text name=usename>
		<input type=submit value="확인">
	</form>
	<form action="response_sendRedirect.jsp" method="post">
		response.sendRedirect : <input type=text name=usename>
		<input type=submit value="확인">
	</form>
</body>

(forward_action.jsp)

<title>forward_action</title>
</head>
<body>
	<% request.setCharacterEncoding("UTF-8"); %>
	
	<!--forward 액션은 최종 페이지에 파라미터를 함께 전달함, 최초 요청된 페이지 url이 표시됨 -->
	<jsp:forward page="page_control_end.jsp">
		<jsp:param name="tel" value="000-000-0000"/>
	</jsp:forward>
</body>

(response_sendRedirect.jsp)

<title>response_sendRedirect</title>
</head>
<body>
	<!-- sendRedirect는 단순히 지정된 페이지로 최종 화면 이동, 최종 전달된 페이지 url이 표시됨 -->
  	<% response.sendRedirect("page_control_end.jsp"); %>
</body>

(page_control_end.jsp)

<title>page_control_end</title>
</head>
<body>
	<hr>
	결과창
	<hr>
	이름: <%= request.getParameter("username") %> <br>
	전화번호: <%= request.getParameter("tel") %>
</body>

(참고 사이트) 

https://doublesprogramming.tistory.com/63

 

Redirect VS, Forward (Redirect와 forward의 차이)

Redirect VS, Forward (Redirect와 forward의 차이) JSP환경에서 현재 작업중인 페이지에서 다른페이지로 이동하는 두가지 방식의 페이지 전환기능 사례를 통해 redirect와 forward의 차이점에 대해 감을 잡아보

doublesprogramming.tistory.com

https://mangobab.tistory.com/16

 

[JSP] forward와 sendRedirect의 차이

forward 방식: 웹 컨테이너 차원의 페이지 이동, 웹 브라우저는 다른 페이지로 이동했음을 알 수 없고, 브라우저에 최초 호출한 URL이 표시된다. 최초 요청 (클라이언트 -> request -> URL 1) forward (URL 1 ->

mangobab.tistory.com

https://kotlinworld.com/329

 

리다이렉트(Redirect)와 포워드(Forward)의 차이는 무엇인가?

리다이렉트와 포워드 특정 URL 접속 시 리다이렉트 또는 포워드가 일어나게 되면 작업 중인 페이지가 전환된다. 리다이렉트와 포워드는 페이지가 전환된다는 점에서 비슷한 역할을 한다. 하지만

kotlinworld.com

'Programming > JSP' 카테고리의 다른 글

[JSP] JSP 액션 태그 <jsp:useBean>  (0) 2022.10.17
[JSP] RequestDispatcher().forward();  (0) 2022.10.14
[JSP] JSTL와 JAR 다운방법  (0) 2022.10.13
[JSP] 표현언어(EL, ${ })과 Scope(객체범위)  (0) 2022.10.12
[JSP] Tomcat을 이용한 Eclipse 웹 자바 개발환경 세팅하기  (0) 2022.09.07
    'Programming/JSP' 카테고리의 다른 글
    • [JSP] JSP 액션 태그 <jsp:useBean>
    • [JSP] RequestDispatcher().forward();
    • [JSP] JSTL와 JAR 다운방법
    • [JSP] 표현언어(EL, ${ })과 Scope(객체범위)
    Criming
    Criming

    티스토리툴바