-
[Camel][JSP] 요청 흐름 제어 ( <jsp:forward> )JSP 2020. 3. 11. 21:22
요청 흐름 제어
하나의 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%>" />
'JSP' 카테고리의 다른 글
[Camel][JSP] CookieBox 클래스 & 로그인 페이지 (0) 2020.03.13 [Camel][JSP] 쿠키 (Cookie) in JSP (0) 2020.03.12 [Camel][JSP] 에러(Error) 처리, 에러 페이지 (Error Page) (0) 2020.03.12 [Camel][JSP] 페이지 모듈화 ( <jsp:include> ) (1) 2020.03.11 [Camel][JSP] JSP의 기본객체 (0) 2020.03.09