JSP

[JSP]Forward와 sendRedirect 사용해보기

jackypark 2022. 9. 19. 20:32
  • forward 방식: 웹 컨테이너 차원의 페이지 이동, 웹 브라우저는 다른 페이지로 이동했음을 알 수 없고,  브라우저에 최초 호출한 URL이 표시된다.
  1. 최초 요청 (클라이언트 -> request -> URL 1)
  2. forward (URL 1 -> forward -> URL 2)
  3. 응답 (URL 2 -> response -> 클라이언트)
  • redirect 방식: 다른 웹 컨테이너에 있는 주소로 이동 가능, 웹 브라우저는 URL을 지시된 주소로 바꾸고 그 주소로 이동
  1. 최초 요청 (클라이언트 -> request 1 -> URL 1)
  2. redirect 할 새로운 URL 2 리턴 (URL 1 -> redirect -> 클라이언트)
  3. URL 2 요청 (클라이언트 -> request 2 -> URL 2)
  4. 응답 (URL 2 -> response -> 클라이언트)

forward 예제!

<%@pagecontentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
  <form action="forward_action2.jsp" method="post">
    forward action:<input type="text" name="username">
    <input type="submit" value="확인">
  </form>

</body>
</html>

page_control.jsp

<%@pagecontentType="text/html;charset=UTF-8" language="java" %>
<%
    request.setCharacterEncoding("UTF-8");
%>
<html>
<head>
    <title>Title</title>
</head>
<body>
<jsp:forward page="page_control_end.jsp">
  <jsp:paramname="tel" value="010-0000-0000"/>
</jsp:forward>

</body>
</html>

forward_action2.jsp

<%@pagecontentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>지금 보인느 화면은 pagecontrolend에서 출력한 결과</h1>
<hr>
이름: <%=request.getParameter("username")%><BR>
전화번호:<%=request.getParameter("tel")%>

</body>
</html>

page_control_end

page_control.jsp 실행

확인 버튼을 누르면 forward_action2.jsp으로 이동하라고 action을 주었고 action2에서 forward page를 page_control_end로 가게 했지만 결과를 보시면 action2.jsp url에서 end의 내용을 출력하고 있다.

그리면 forward를 사용 안 하고 똑같은 결과를 어떻게 출력시킬까?

고민해보았다.. include를 사용해 가져온 첫 url에서 보낸 이름을 다시 저장시켜서 다시 넘기는 것도 똑같은 결과를 보낼 것 같았다.  말로 해서 무슨 말인지 잘 모르겠지만 코드를 보여드리겠습니다.

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    request.setCharacterEncoding("UTF-8");
%>
<html>
<head>
    <title>Title</title>
</head>
<body>
<jsp:include page="page_control_end.jsp">
    <jsp:param name="name" value='<%=request.getParameter("username")%>'/>
  <jsp:param name="tel" value="010-0000-0000"/>
</jsp:include>
</body>
</html>

forward_action2.jsp

결과 역시 똑같이 나온것을 볼 수 있다. 느낌은 다르다 request를 해서 값을 받고 그걸 다시 value로 넘긴 거다..

 

다음으로 Page를 하나 더 만들어 4페이지로 forward를 넘겨보자

우선 control page와 endpage은 그대로로 forward를 2번 해서 이름과 tel을 넘겨보자

생각보다 간단했다. forward를 두 번 사용해서 값을 잘 넘겨주면 끝이다.

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    request.setCharacterEncoding("UTF-8");
%>
<html>
<head>
    <title>Title</title>
</head>
<body>
<jsp:forward page="forward_action3.jsp">
  <jsp:param name="tel" value="010-0000-0000"/>
</jsp:forward>
</body>
</html>

 forward_action2.jsp


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<jsp:forward page="page_control_end.jsp">
  <jsp:param name="tel" value='<%=request.getParameter("tel")%>'/>
</jsp:forward>

forward_action3.jsp

이러면  페이지를 4번넘겼는데도 불구하고 아까와 똑같은 페이지를 구현할 수 있게 된다.

 

Redirect로 넘기면 어떻게 될까

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

이 코드를 거쳐서 넘기면

url이 이동한 것을 확인할 수 있다.

 

느낀 점:

사실 아까 30분 동안 멘붕 온 코드가 있다

<jsp:param name="tel" value="<%=request.getParameter("tel")%>"/>

이 코드가 안 먹어서 대체 왜 안 먹을까 고민 고민하다가 외 따옴표로 바꿔야 한다는 것을 알아냈다.. 저위 코드처럼 하면 에러가 난다... 꼭 기억하자

<jsp:param name="tel" value='<%=request.getParameter("tel")%>'/>

이 코드가 되는 코드이다... 진짜 아까 멘붕에 빠져버렸었다..ㅠㅠ