6. JSP - 포워딩(forward)과 리다이렉트(redirect)

한승록·2023년 5월 25일
0

JSP 기초

목록 보기
6/9
post-thumbnail
포워딩(forward)은 클라이언트의 requestresponse를 한 페이지에서 한 번에 처리해주기위해 사용됩니다.
	request.setCharacterEncoding("UTF-8");

	String jspName = request.getParameter("jspName");
	
	request.setAttribute("test", "Velog");
	
	RequestDispatcher rd;
	rd = request.getRequestDispatcher(jspName);
	rd.forward(request, response);
	// 대상페이지가 request와 response그대로 전달받는다

1) RequestDispatcher

forward를 이해하기 위해서는 RequestDispatcher에 대한 이해도가 우선되어야 합니다.
RequestDispatcher은 다른 페이지로의 이동을 주관하는 클래스로 forward()include()메서드를 포함하고 있습니다.
여기서 include() 메서드와 forward() 메서드는 제어권을 특정 대상으로 넘기는 등의 역할은 동일합니다. 하지만 세부적으로 들어가면 include()는 넘기는 데이터가 stream이 유지되며 남아있는데 forward()는 데이터를 넘겨준 뒤 해당 streamclear()하여 stream을 비워주게 됩니다.




2) forward

그렇다면 위의 개념을 바탕으로 다시 포워딩에 대해 말씀드려볼까 합니다.
포워딩은 서버에 지정한 페이지로 요청과 응답을 넘기고 해당 변경 내역을 서버에서 임의로 변경하기 때문에 브라우저의 주소는 바뀌지 않습니다.
그렇기 때문에 클라이언트는 변경 내역을 알 수 없으며 현재 서버 내부의 페이지로만 포워드 할 수 있게 됩니다.
또한 request를 전달하면서 페이지를 전환하므로 기존 parameter/attribute 를 사용할 수 있습니다.
즉, 전달하는 것에 중점을 둔 방식이라고 정리할 수 있는것이죠.




3) redirect

리다이렉트는 포워딩과 다르게 브라우저가 능동적으로 주소를 변경하기 때문에 바뀐 주소가 주소창에 드러나게 됩니다.
브라우저가 응답을 받은 후, 전달받은 주소로 새로운 요청을 보내게 되어 request를 새로운 요청으로 인식되어 기존 parameter/attribute 를 사용할 수 없게 됩니다.
대신 forward와 달리 현재 서버 외부의 주소에도 리다이렉트 할 수 있게 됩니다.
이러한 특성 때문에 값을 전달한다기 보다 웹 페이지에서 기능을 수행한 후 넘어갈 페이지를 지정하는 것에 사용하게 됩니다.
profile
개발 학습

0개의 댓글