[JSP]Forward와 sendRedirect 사용해보기
- forward 방식: 웹 컨테이너 차원의 페이지 이동, 웹 브라우저는 다른 페이지로 이동했음을 알 수 없고, 브라우저에 최초 호출한 URL이 표시된다.
- 최초 요청 (클라이언트 -> request -> URL 1)
- forward (URL 1 -> forward -> URL 2)
- 응답 (URL 2 -> response -> 클라이언트)
- redirect 방식: 다른 웹 컨테이너에 있는 주소로 이동 가능, 웹 브라우저는 URL을 지시된 주소로 바꾸고 그 주소로 이동
- 최초 요청 (클라이언트 -> request 1 -> URL 1)
- redirect 할 새로운 URL 2 리턴 (URL 1 -> redirect -> 클라이언트)
- URL 2 요청 (클라이언트 -> request 2 -> URL 2)
- 응답 (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

확인 버튼을 누르면 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")%>'/>
이 코드가 되는 코드이다... 진짜 아까 멘붕에 빠져버렸었다..ㅠㅠ