- 포워딩 리다이렉트 차이 목차
Send14.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="css/main.css">
</head>
<body>
<div>
<H2> Send14.jsp ● ->Receive14_for.jsp ○ ->Receive14.jsp</H2>
<H2> Send14.jsp ● ->Receive14_re.jsp ○ ->Receive14.jsp</H2>
</div>
<br>
<div>
<form action"" method="post">
이름:<input type="text" name="userName" class="txt"><br><br>
<!-- 버튼안 -> form 안 -> action 속성안 -->
<button type="submit" class="btn" onclick="this.form.action='Send14_re.jsp'">리다이렉트
</button>
<button type="submit" class="btn" onclick="this.form.action='Send14_for.jsp'">포워드
</button>
</form>
</div>
<!-- 페이지의 실행 흐름 -->
<!--
①리다이렉트(Send14.jsp ->Send14_re.jsp ->Receive14.jsp)
-리다이렉트는 지정한 주소
(response.sendRedirect("Receive14.jsp")를
클라이언트가 서버에게 재 요청하는 것.
-처음 요청한 request 객체는 리다이렉트로 넘어가는 과정에서 사라진다.
(소멸된다.)
-요청이 클라이언트 단위에서 새로 요청하는 것이기 때문에
속도가 늦어질 수 있다.
-DB에서 insert,update,delete하고 나면 리다이렉트를 지정하여 처리해야
수정된 내용을 적용하여 확인할 수 있다.
-브라우저의 주소를 확인해보면 ...
최종 도착 페이지에 해당하는 Receive14.jsp인 것을 확인할 수 있따.
②포워드(Send14.jsp ->Send14_for.jsp ->Receive14.jsp)
-포워드는 서버 내에 수신된 데이터를 포워딩한 주소로 넘겨주는 것.
-이 상황에서는 처음 요청한 request객체가 유지된다.
-서버 내부에서 주소가 변경된 것이기 때문에
클라이언트 입장에서는 이 사실을 알지 못한다.
그렇기 때문에 클라이언트에게 보이ㅡㄴ 주소는
포워딩 되기 이전의 주소만 노출된다.
-보안 측면에서 유리할 수 있다.
-포워딩 시 재전송하는 데이터를 가감할 수 있다.
(SetAttribute(),getAttribute() 메소드 사용)
※setAttribute() , getAttribute()는 문자열 뿐 아니라
객체를 넘기고 받을 수 있다.
-서블릿에서 작업한 결과를 클라이언트 출력 화면을 구성하는
JSP로 넘길 때 포워등을 많이 사용하게 된다.
-브라우저의 주소를 확인해 보면 . . .
최종 도착 페이지가 아닌 Send10_for.jsp인 것을 확인할 수 있다. -->
</body>
</html>
Send14_re.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%
request.setCharacterEncoding("UTF-8");
String userName=request.getParameter("userName");
request.setAttribute("message", "만나서 반갑습니다.");
//response전에
//request객체의 key(message)의 값 안에 "만나서 반갑습니다."를
// value로 넣는다.
//클라이언트에게 던져주는 것 즉 B의 주소 (다른 볶음밥 집)
//그러므로 최초 요청은 여기서 끝이난다. 1번의 요청이 종결됨.
//볶음밥을달라 하면서 A에게 만났지만 B에게 가면 알아서
//만들어주지 않음 .
//결과적으로 B는 만나지만 다시 재요청을 새롭게 해야한다
//즉,Receive에서 다시 재 요청을 해야한다.(클라이언트와 만나지않음)(바로Receive에게감)
response.sendRedirect("Receive14.jsp"); //리다이렉트
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="css/main.css">
</head>
<body>
<div>
<p>리다이렉트</p>
</div>
<div>
<p>이름 : <%=userName %></p>
</div>
</body>
</html>
Send04_for.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%
request.setCharacterEncoding("UTF-8");
//여기서는 다시 요청 발생하지 않음.
String userName=request.getParameter("userName");
//볶음밥을 만들어주세요 하는 요청을 A가 받아 B에게 넘겨주는것.
//즉, 주방안에서 A가 B에게 요청하는것
//(서버 내부에서 발생하는 일 )
request.setAttribute("message", "안녕하세요");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Send14_for.jsp</title>
<link rel="stylesheet" type="text/css" href="css/main.css">
</head>
<body>
<div>
<h1> 포워딩 </h1>
</div>
<div>
<p>이름 : <%=userName %></p>
<jsp:forward page="Receive14.jsp"></jsp:forward>
</div>
</body>
</html>
Receive14.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%
request.setCharacterEncoding("UTF-8");
String userName = request.getParameter("userName");
//Send14_re에서 setAttribute로 request에 값을 적재했을때,
// 그 값을 꺼내어 쓰려면 getAttribute로 쓴다.
//또한, 객체 자체를 반환값으로 받을 수 있다.
//한 마디로 object type이 된다.
//String으로 형변환 즉,다운캐스팅 해줘야한다.
String message = (String)request.getAttribute("message");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Receive14.jsp</title>
<link rel="stylesheet" type="text/css" href="css/main.css">
</head>
<body>
<div>
<p>최종 수신 페이지(Receive14.jsp)</p>
</div>
<div>
<p>이름:<%=userName %></p>
<p>메시지:<%=message %></p>
</div>
</body>
</html>
'Web(국비) > JSP' 카테고리의 다른 글
JSP-포워딩/리다이렉트 관련 문제 (0) | 2019.10.24 |
---|---|
JSP (0) | 2019.10.24 |
포워딩과 리다이렉트란? (0) | 2019.10.24 |
JSP-<a>태그 활용하여 값 넘겨주기 (0) | 2019.10.24 |
JSP-과제 이전 이후 만년달력 출력 (0) | 2019.10.24 |