TIL. 158 JavaScript 요청 흐름 제어

조윤식·2022년 9월 19일
0

요청 흐름 제어
하나의 JSP 페이지에서 다른 JSP 페이지로 요청 처리를 전달할 때 <jsp:forward> 액션태그를 사용합니다. 웹 브라우저로부터 요청을 받은 JSP 파일은 <jsp:forward> 액션태그가 실행되면서 다른 JSP 파일로 요청 흐름이 이동되게 됩니다. 그리고 요청 흐름의 이동이 발생할 때 <jsp:forward> 액션태그를 사용한 JSP 파일에서 사용한 request, response 기본 객체가 다른 JSP파일로 전달되게 됩니다. 요청 흐름의 이동을 통해 요청을 전달받은 JSP파일은 응답 결과를 생성하고 이 결과를 웹 브라우저에 전달하게 됩니다. 

 주목해야할 점은 request, response 기본 객체가 그대로 전달된다는 점과 <jsp:forward> 액션태그를 사용한 JSP 파일이 아닌 다른 JSP파일에서 생성한 응답결과가 웹 브라우저에게 전달된다는 점입니다. 

1. <jsp:forword> 액션태그

 <jsp:forward> 액션태그의 사용방법은 아래와 같습니다. 

<jsp:forward page="examples.jsp"/>

그렇다면 <jsp:forward> 액션태그를 사용한 기본적인 사용방법에 대한 예제 코드를 확인해 보겠습니다. 

main.jsp

<%@ page contentType="text/html; charset=utf-8" %>
<html>
<head><title> jsp:forward 액션태그 활용 </title></head>
<body>
1111111111111111111111111111111111

<jsp:forward page = "/examples.jsp" />

</body>
</html>

examples.jsp

<%@ page contentType="text/html; charset=utf-8" %>
<html>
<head><title> examples.jsp 출력 결과 </title></head>
<body>
22222222222222222222222222
</body>
</html>

 위 예제의 실행 결과를 확인해보면 main.jsp의 출력 결과는 사라지고, <jsp:forward> 액션태그를 사용해 이동한 examples.jsp의 결과가 출력되는 것을 확인할 수 있습니다. 그런데 웹 브라우저의 주소는 최초로 요청을 받은 main.jsp의 의 주소가 표시되어 있습니다. 

<jsp:forward>액션태그를 실행하면 출력버퍼에 기존까지 저장되었던 내용들을 비우게 되고, <jsp:forward>액션태그를통해 이동한 페이지의 출력결과가 출력버퍼에 저장되며 그 내용을 응답결과로 사용해 웹 브라우저로 전달하는 것입니다. 위의 코드에서는 확인할 수 없지만 한가지 더 알아야 할 점은 <jsp:forward> 액션태그 뒤에 위치한 코드는 실행조차 되지 않는다는 점입니다. 

 그렇기 때문에 <jsp:forward> 액션태그를 사용하기 위해서는 <jsp:forward> 액션태그가 실행되기 전에 웹 브라우저로 데이터를 전송하면 안된다는 것입니다. 

 그리고 웹 부라우저의 주소가 최초로 요청을 받은 JSP페이지의 주소로 표시되는 이유는 <jsp:forward> 액션태그를 사용하면 웹 컨테이너 내에서 요청의 흐름을 이동시키는 것이기 때문에 웹 브라우저는 요청 처리의 흐름의 변화를 알 수 없기 때문입니다. 

1-1. <jsp:forword> 액션태그의 활용

일반적으로 <jsp:forward> 액션태그는 조건에 따른 페이지의 분기 상황에서 자주 사용됩니다. 쉽게 말해서 조건에 따라서 서로 다른 결과 화면을 보여야 할 때 사용되는 것입니다. <jsp:forward> 액션태그를 사용하지 않아도 충분히 구현이 가능하지만 <jsp:forward> 액션태그를 사용하지 않으면 코드가 다소 복잡해질 수 있습니다

<%@ page contentType="text/html; charset=utf-8" %>
<%
	String nextPage = null;
    
    	if (option.equals("A")) {
    		nextPage = "/examples1.jsp"
    	} else if (option.equals("B")) {
    		nextPage = "/examples2.jsp"
    	} else if (option.equals("C")) {
    		nextPage = "/examples3.jsp"
    	}
%>
<jsp:forward page="<%=nextPage%>" />

출처: https://cameldev.tistory.com/34 [낙타의 개발일기 - CamelDev:티스토리]

profile
Slow and steady wins the race

0개의 댓글