본문 바로가기

Server Oriented/Java & JSP

forward, include

http://ihacker.blog.me/110016122739 참조.




*. forward

   : 원래의 JSP 에서 다른 JSP 로 현재 페이지를 전환.

   : 전환시 원래의 JSP 가 가지고 있던 request (파라미터 포함) 와 response 개체를 그대로 사용.

     만약 원래의 JSP 에 파라미터가 있었다면 request.getParameter("변수명") 으로 호출이 가능

 

  1. pageContext 개체의 메소드

 

     < %

          pageContext.forward("/index.jsp");

     % >

 

     파라미터를 추가하는 경우

     < %

          pageContext.forward("/index.jsp?변수명=변수값");

     % >

 

  2. JSP 액션

 

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

 

     파라미터를 추가하는 경우

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

       <jsp:param name="변수명" value="변수값" / >

     < /jsp:forward>

 

 

 

*. include

   : 원래의 JSP 에 다른 JSP 를 포함. 전환되는 것이 아니고 포함되는 것.

   : 원래의 JSP 가 가지고 있던 request 와 response 개체를 사용하지 않고 null 값으로 새로 생성.

     만약 원래의 JSP 에 파라미터가 있었다면 request.getParameter("변수명") 으로 호출하면 그 값이 null 이 됨

 

  1. pageContext 개체의 메소드

 

     < %

          out.flush();

          pageContext.include("/index.jsp");

     % >

 

     파라미터를 추가하는 경우

     < %

          pageContext.include("/index.jsp?변수명=변수값");

     % >

 

  2. JSP 액션

     : A 가 B 를 include 하는 경우, A 와 B 를 별도로 컴파일 하여 실행 시점에서 결과를 포함

     : A 에 사용된 JSP 변수를 B 에서 사용할 수 없고, 반대로 B 에 사용된 JSP 변수를 A 에서 사용할 수 없다. (다만 포함 위치에 따라 달라짐에 유의)

     : A 와 B 중에 한 곳에서만 JS 나 CSS 를 사용하여야 한다. 동일한 JS 나 CSS 를 둘 모두에 사용하면 오류 가능

       cf) iframe 을 사용하는 경우 서로 별도로 JS 나 CSS 를 사용해야 한다. 필요하다면 동일한 JS 나 CSS 를 둘 모두 사용해야 한다는 얘기.

 

     < jsp:include page="/index.jsp" flush="true" / >

 

     파라미터를 추가하는 경우

     < jsp:include page="/index.jsp" >

       < jsp:param name="변수명" value="변수값" / >

     < /jsp:include >

 

  3. @include 지시어

     : A 가 B 를 include 하는 경우, A 에 B 를 포함하여 컴파일

     : A 에 사용된 JSP 변수를 B 에서 사용할 수 있고, 반대로 B 에 사용된 JSP 변수를 A 에서 사용할 수 있다. (다만 포함 위치에 따라 달라짐에 유의)

     : A 와 B 모두 수정되어야 재컴파일이 이루어진다. 아니면 jspwork 에서 해당 파일들을 모두 삭제하고 JSP 를 컴파일.

     : A 와 B 중에 한 곳에서만 JS 나 CSS 를 사용하여야 한다. 동일한 JS 나 CSS 를 둘 모두에 사용하면 오류 가능

 

     < %@ include file="인클루드.jsp" % >

 

 

 

*. sendRedirect

   : 원래의 JSP 에서 다른 JSP 로 현재 페이지를 전환.

   : 전환시 원래의 JSP 가 가지고 있던 request 와 response 개체를 사용하지 않고 null 값으로 새로 생성.

     만약 원래의 JSP 에 파라미터가 있었다면 request.getParameter("변수명") 으로 호출하면 그 값이 null 이 됨

 

  1. pageContext 개체의 메소드 사용

 

     < %

          response.sendRedirect("/index.jsp");

     % >

 

     파라미터를 추가하는 경우

     < %

          response.sendRedirect("/index.jsp?변수명=변수값");

     % >

 

  2. JSP 액션 사용

 

     없음

 




*. 자바스크립트의 top.location.href = ''

  : 원래의 JSP 에서 다른 JSP 로 현재 페이지를 전환.

   : 전환시 원래의 JSP 가 가지고 있던 request 와 response 개체를 사용하지 않고 null 값으로 새로 생성.

     sendRedirect() 와 다른 점은.. response 에 sendRedirect() 를 하는 거라서,
     웹브라우저에서 최초 호출한 그 흐름에서 다음 URL 을 호출하므로 request 가 1회.
     top.locaiton.href='' 는, 최초 호출한 흐름에 답이 끝나고, 웹브라우저가 다시 다음 URL 을 호출하는것이므로 request 가 2회 수행.
     forward include sendRedirect 들은 최초 request 가 서버에서 최종 response 로 달려가는 것으로 사용자 웹브라우저는 request 1회 작동