[JSP/Servlet] 리다이렉트(Redirect)와 포워드(forward)

DANI·2023년 11월 12일

JSP/Servlet

목록 보기
7/9
post-thumbnail

💻 포워드(forward) 방식

  • 포워드는 페이지 전환 주체가 서버

  • 서버가 전환 주체가 되면 URL 주소가 바뀌지 않고도 서버 내부의 동작을 통해 다른 응답을 클라이언트에 내려줄 수 있다.

  • 웹 브라우저에는 최초 호출한 URL만 표시되고, 이동한 페이지의 URL정보는 볼수가 없다.

  • 따라서 포워드는 특정 URL에 대해 외부에 공개되지 말아야 하는 부분을 가리는데 사용하거나 조회를 위해 사용된다.

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

  • forwar방식은 다음 이동한 URL로 요청정보를 그대로 전달한다. 말 그대로 forward(건네주기)하는 것이다. 그렇기 때문에 사용자가 최초로 요청한 요청정보는 다음 URL에서도 유효하다.



💻 리다이렉트(Redirect) 방식

  • 리다이렉트는 페이지 전환 주체가 클라이언트

  • 클라이언트가 주체가 되어 페이지를 전환하는 방법은 접속한 URL이 아닌 다른 URL로 직접 접속한다.

  • 리다이렉트는 클라이언트의 요청에 의해 서버의 DB에 변화가 생기는 작업에 사용된다. 예를 들어 DB의 유저 테이블을 변경하는 회원가입과 같은 경우에는 리다이렉트가 사용되어야 요청을 중복해서 보내는 것을 방지할 수 있다.

  • 웹 브라우저는 URL을 지시된 주소로 바꾸고 그 주소로 이동한다.

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




✨ 로그인으로 알아보는 포워드와 리다이렉트

💾 LoginMain.jsp 파일

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
	String err = request.getParameter("err");
	if("1".equals(err)){
		out.print("회원정보를 확인하세요!");
	} 
%>
<form action="LoginCheck.jsp" method="post">
아이디 : <input type="text" name="id" value="hong" />
비밀번호 : <input type="password" name = "pw" value="1234" />
<button>로그인</button>
</form>
</body>
</html>

💾 LoginCheck.jsp 파일

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
	String id = request.getParameter("id");
	String pw = request.getParameter("pw");

    // 로그인 성공할 경우 리다이렉트
	if("hong".equals(id) && "1234".equals(pw)){
		response.sendRedirect("welcome.jsp?id="+id);
	} 
    // 로그인 실패할 경우 포워드
    else {
		request.getRequestDispatcher("LoginMain.jsp?err=1").forward(request, response);
	}

%>
</body>
</html>

💾 welcome.jsp 파일

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2><%=request.getParameter("id") %>님 환영합니다!</h2>
</body>
</html>


⭐ 로그인 성공(리다이렉트)

요청이 두번 되었다! url이 변경된 것도 확인할 수 있다.



⭐ 로그인 실패(포워드)

요청이 한 번되었으며, url이 변경되지 않았다! 오류 메세지가 출력된 것은 쿼리스트링으로 err의 값이 유지된 상태로 페이지만 메인으로 호출된 것임을 알 수 있다.



⭐ 참고

https://kotlinworld.com/329
https://doublesprogramming.tistory.com/63

0개의 댓글