서블릿 forward와 include의 비교

forward와 include 모두 서블릿에서 흐름을 제어할때 쓰이는 메소드 입니다.


forward는 A에서 forward(B)를 한다면 forward를 호출하기전까지 전부 해석하다가

 

호출하는 시점에 B로 흐름이 넘어갑니다.


즉 아직까지 request는 한번 입니다


include는 A에서 include(B)를 한다면 A에서 include 호출하기전까지 모두 해석

 

-> B로 흐름 넘어가서 B 전부 해석하고 끝나면 -> 다시 A의 호출문장으로 넘어옵니다.


여기서도 request는 한번입니다.


근데 sendRedirect 라는 놈이 있는데요 이놈은 request가 두번이 일어납니다.


왜냐면  sendRedirect는 특정주소를 호출할 것을 요청하는 응답신호를 브라우저에게 보내기 때문입니다.


즉 A에서 sendeRedirect(B)를 한다면 A -> B -> A -> B


그래서 request 가 두번 발생하는것입니다.


감이 잘 안오시죠? 하하.. 저두 그렇답니다 -_-;;


그래서 소스를 준비했답니다 -_-v


Strat.html

<html>
   <head>
  <title> forward 및 include , sendRedirect 때려잡기! </title>
  </head>
  <body>
  <form action="Check.jsp" method="post">
    당신의 나이는?
   <input type="text" name="test"><br><br>

    <input type="radio" name="check" value="forward"> forward 방식
    <input type="radio" name="check" value="include">  include 방식
    <input type="submit" value="Confirm">
 </form>
 </body>
</html>


간단히 forward와 include중 어느 형식으로 보낼것인치 체크하고 나이를 넣게 했습니다.


Check.jsp

<%
String check = request.getParameter("check");
java.util.Date today = java.util.Calendar.getInstance().getTime();
%>

 이건 include 할때만 보여요~ ^^ 
<hr>
<% if (check.equals("forward"))
{%>
  <jsp:forward page="./Result.jsp" >
  <jsp:param name="check" value="<%=check%>"/>
  <jsp:param name="today" value="<%=today%>"/>
  </jsp:forward>

   <hr>
<%  } else  if  (check.equals("include")) { %>
<jsp:include page="./Result.jsp">
  <jsp:param name="check" value="<%=check%>"/>
  <jsp:param name="today" value="<%=today%>"/>
</jsp:include>

<%  }  %>


이것은 결과 페이지(result.jsp)에 가기전에 forward와 include의 차이점을 보여주는 페이지

일단 포워드는 호출하면 그 위까지만 해석하고 바로 흐름이 바뀌기 때문에 " 이건 include 할때만 보여요~ ^^"라는 문장은 해석은 하지만 뿌리지는 못합니다.

그래서 그럼 이넘이 과연 해석은 정말 하고 가는가 의문이 들어서 시간을 넘는 today를 만들어서 넘겼습니다.


Result.jsp

<br>
 이것은 <%= request.getParameter("check")  %>  방식입니다.
<hr>
나이 : <%=request.getParameter("test")%>
<hr>
현재 시간 : <%= request.getParameter("today")%>

 이건 결과 페이지입니다.



                                                    forward의 실행화면

forward의 결과화면

include의 실행화면

include의 결과화면

 
 
이해가 가시나요? 한번에 이해하시면 무지 똑똑하신 분. ^^;
 
전 제가 짜고도.. 여러번 봐야 이해가 되었다는.. -_-;
 
출처

http://blog.naver.com/bluejames77/80003297314