서블릿:
물론 서블릿에서는 일반적으로 doGet, doPost 및 기타 메소드에서 점프가 발생합니다.
1) 리디렉션 방법
response.sendRedirect("/a.jsp");
페이지 경로는 상대 경로입니다. sendRedirect는 반드시 이 웹 애플리케이션에 국한되지 않고 다음과 같은 모든 페이지로 이동할 수 있습니다.
response.sendRedirect("//www.VeVB.COm");
점프 후 브라우저 주소 표시줄이 변경됩니다.
이런 방식으로 값을 전달하려면 매개변수를 URL로 가져오거나 세션에 넣는 것만 가능합니다. request.setAttribute를 사용하여 전달할 수는 없습니다.
2) 전달 방법
RequestDispatcher 디스패처 = request.getRequestDispatcher("/a.jsp");
디스패처 .forward(요청, 응답);
페이지 경로는 상대 경로입니다. 전달 방법은 이 웹 애플리케이션의 페이지로만 이동할 수 있습니다.
브라우저 주소 표시줄은 점프 후에도 변경되지 않습니다.
이 방법을 사용하여 점프하면 매개변수, 세션, URL의 request.setAttribute라는 세 가지 방법을 사용하여 값을 전달할 수 있습니다.
JSP:
1) 응답.sendRedirect();
서블릿의 response.sendRedirect()와 동일한 메소드입니다.
이 문 앞에는 Out.flush()가 허용되지 않습니다. 있는 경우 예외가 발생합니다.
java.lang.IllegalStateException: 데이터가 클라이언트에 커밋된 후에는 sendRedirect()를 수행할 수 없습니다.
com.caucho.server.connection.AbstractHttpResponse.sendRedirect(AbstractHttpResponse.java:558)에서
...
점프 후 브라우저 주소 표시줄이 변경됩니다.
다른 호스트로 점프하려는 경우 점프 후 이 명령문 뒤의 명령문은 마치 새 스레드가 열린 것처럼 계속 실행되지만 응답 작업은 의미가 없습니다.
동일한 호스트로 점프하려는 경우 이 명령문 다음의 명령문이 실행될 때까지 점프가 발생하지 않습니다.
2) response.setHeader("위치","");
이 문 앞에는 Out.flush()가 허용되지 않습니다. 있는 경우 페이지가 이동하지 않습니다.
점프 후 브라우저 주소 표시줄이 변경됩니다.
이 명령문 다음의 명령문이 실행될 때까지 점프는 발생하지 않습니다.