

포워드는 페이지 전환 주체가 서버
서버가 전환 주체가 되면 URL 주소가 바뀌지 않고도 서버 내부의 동작을 통해 다른 응답을 클라이언트에 내려줄 수 있다.
웹 브라우저에는 최초 호출한 URL만 표시되고, 이동한 페이지의 URL정보는 볼수가 없다.
따라서 포워드는 특정 URL에 대해 외부에 공개되지 말아야 하는 부분을 가리는데 사용하거나 조회를 위해 사용된다.
현재 실행중인 페이지와 forward에 의해 호출될 페이지는 request, response 객체를 공유한다.
forwar방식은 다음 이동한 URL로 요청정보를 그대로 전달한다. 말 그대로 forward(건네주기)하는 것이다. 그렇기 때문에 사용자가 최초로 요청한 요청정보는 다음 URL에서도 유효하다.

리다이렉트는 페이지 전환 주체가 클라이언트
클라이언트가 주체가 되어 페이지를 전환하는 방법은 접속한 URL이 아닌 다른 URL로 직접 접속한다.
리다이렉트는 클라이언트의 요청에 의해 서버의 DB에 변화가 생기는 작업에 사용된다. 예를 들어 DB의 유저 테이블을 변경하는 회원가입과 같은 경우에는 리다이렉트가 사용되어야 요청을 중복해서 보내는 것을 방지할 수 있다.
웹 브라우저는 URL을 지시된 주소로 바꾸고 그 주소로 이동한다.
새로운 페이지에서는 request, response객체가 새롭게 생성된다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String err = request.getParameter("err");
if("1".equals(err)){
out.print("회원정보를 확인하세요!");
}
%>
<form action="LoginCheck.jsp" method="post">
아이디 : <input type="text" name="id" value="hong" />
비밀번호 : <input type="password" name = "pw" value="1234" />
<button>로그인</button>
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String id = request.getParameter("id");
String pw = request.getParameter("pw");
// 로그인 성공할 경우 리다이렉트
if("hong".equals(id) && "1234".equals(pw)){
response.sendRedirect("welcome.jsp?id="+id);
}
// 로그인 실패할 경우 포워드
else {
request.getRequestDispatcher("LoginMain.jsp?err=1").forward(request, response);
}
%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2><%=request.getParameter("id") %>님 환영합니다!</h2>
</body>
</html>


요청이 두번 되었다! url이 변경된 것도 확인할 수 있다.


요청이 한 번되었으며, url이 변경되지 않았다! 오류 메세지가 출력된 것은 쿼리스트링으로 err의 값이 유지된 상태로 페이지만 메인으로 호출된 것임을 알 수 있다.
https://kotlinworld.com/329
https://doublesprogramming.tistory.com/63