페이지이동기술 forward

1 minute read



페이지이동기술

  • jsp로는 html요소(화면단)만 사용.
  • java 코드를 jsp에 쓰지 않는 MVC 패턴이 등장하면서 중요성이 커짐.
  • 요청을 a.jsp에 한 상황에서 응답을 b.jsp가 하도록 떠넘기는(?) 기술
  • 요청을 받은 jsp와 응답을 하는 jsp가 다른 기술 외부에서는 알 수 없음
  • forward시 b.jsp에서는 a.jsp의 파라미터를 알 수 있다.
  • 종류 : Action Forward, sendRedirect
  • forward는 out객체를 공유하는 개념이 아님.
  • 중요한 내용이 담긴 페이지를 숨길 수 있음.
  • 이동의 개념으로 url이 고정인 forward를 사용하지 않는다. sendRedirect사용할 것!





Action Forward

  • request영역 공유, 파라미터 사용하여 데이터 공유

<jsp:forward page="파일경로" />

//파라미터 설정
<jsp:forward page="파일경로">
  <jsp:param name="msg" value="test" />
</jsp:forward>

  • 응답을 떠넘기는 것이므로, 요청받은 jsp의 내용은 호출되지 않는다.
  • 파라미터를 안넘겨도 나오는 이유는?
    • url에 붙은 ?id=”aaa”이런 애들은 파라미터 태그를 쓰면서 request영역에 공유할 필요 없다.
    • 요청이 날라온 파라미터들은 이미 공유되고 있음.

//forwardSet.jsp
<jsp:forward page="user.jsp">
    <%-- 파라미터를 안넘겨도 나오는 이유? url의(?id="aaa") request객체를 공유함 --%>
    <%-- <jsp:param name="id" value="${ param.id }" /> --%>
</jsp:forward>

//user.jsp
<h2>${ param.id } 환영합니다!</h2>
    





sendRedirect

  • forward나 include는 jsp기술이다.
  • Servlet문법:java코드이기 때문에 response.sendRedirect문법을 사용.
  • 요청을 재발생시키는 기술.
  • response.sendRedirect(재요청할 url)
  • forward와 차이점
    • 클라이언트가 알 수 없는 forward와는 달리 sendRedirect는 클라이언트가 알고 있음.
    • 요청이 재발생되어 데이터가 공유되지 않음.(request영역 공유불가)
    • url이 재요청한 url로 변경됨.

<% response.sendRedirect("admin.jsp"); %>

  • 값을 공유하는 방법
    • 직접 값을 넘긴다.

<% response.sendRedirect("user.jsp?id=aaa"); %>

//값 받기 : request.getParameter( )
<% response.sendRedirect("user.jsp?id=" + request.getParameter("id")); %>