1.RequestDispatcher.forward()는
서버 측에서 작동합니다.forward()를 사용하면 서블릿 엔진은 현재 서블릿 또는 JSP의 HTTP 요청을 다른 서블릿, JSP 또는 일반 HTML 파일로 전달합니다. a.jsp에서는 a.jsp에서 전달()을 사용하여 b.jsp로 리디렉션합니다. 이때 양식에서 제출한 모든 정보는 b.jsp에서 가져올 수 있으며 매개변수는 자동으로 전달됩니다.
그러나 프레임이 있는 jsp 파일로 리디렉션할 수는 없습니다. 동시에 프레임이 있는 html 파일로 리디렉션할 수는 없습니다. 동시에 servlet?name=frank와 같은 매개변수와 함께 전달될 수 없습니다. . 이것이 작동하지 않으면 프로그램에서 .setAttribute("name",name)를 전달하여 리디렉션
후에
브라우저 주소 표시줄 URL을 변경하지 않을 수 있습니다.
코드 내용은 일반적으로 jsp가 아닌 서블릿에서 사용됩니다.
공개 무효 doPost(HttpServletRequest 요청,HttpServletResponse 응답)
ServletException,IOException이 발생합니다 ...{
response.setContentType("text/html; charset=gb2312");
ServletContext sc = getServletContext();
RequestDispatcher rd = null;
rd = sc.getRequestDispatcher("/index.jsp"); //페이지 이동
rd.forward(요청, 응답);
}
2.response.sendRedirect()
이는 사용자의 브라우저에서 작동하며, sendRedirect()는 servlet?name=frank와 같은 매개변수를 다음 페이지로 전달할 수 있습니다. 동시에 sendRedirect()는 프레임을 리디렉션할 수 있습니다.
리디렉션 후에는 리디렉션된 페이지의 URL이 브라우저 주소 표시줄에 나타납니다.
예: 서블릿에서 리디렉션
코드 내용
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException ...{
response.setContentType("text/html;
charset=gb2312")
response.sendRedirect("/index.jsp");
response는 jsp 페이지의 암시적 객체이므로 response.sendRedirect()를 사용하여 jsp 페이지에서 재배치를 직접 구현할 수 있습니다.
참고:
(1) response.sendRedirect를 사용할 때 HTML 출력이 앞에 있을 수 없습니다.
이는 절대적이지 않습니다. HTML 출력이 없다는 것은 실제로 HTML이 브라우저로 전송될 수 없음을 의미합니다. 실제로 오늘날의 서버에는 일반적으로 8K(JSP SERVER를 의미함)의 캐시 메커니즘이 있습니다. 즉, 캐시를 끄거나 out.flush()를 사용하여 강제로 새로 고치지 않는 한, sendRedirect를 사용하기 전에는 약간의 캐시 메커니즘이 있습니다. HTML 출력도 허용됩니다.
(2) .response.sendRedirect 이후에는 return이 와야 합니다.
response.sendRedirect가 브라우저를 통해 리디렉션된다는 것을 이미 알고 있으므로 페이지 처리가 완료될 때까지 실제 작업이 없습니다. 이제 이미 조정을 마쳤으므로 최종 출력의 의미는 무엇입니까? 그리고 후속 출력으로 인해 조향이 실패할 수도 있습니다.
비교하다:
(1).Request Dispatcher.forward()는 컨테이너의 제어 리디렉션이며 리디렉션된 주소는 클라이언트 브라우저의 주소 표시줄에 표시되지 않습니다.
(2).response.sendRedirect()는 완전한 점프입니다. 브라우저는 점프 주소를 얻고 요청 링크를 다시 보냅니다. 이런 식으로 점프 후의 링크 주소를 브라우저의 주소 표시줄에서 볼 수 있습니다.
전자가 요구 사항을 충족할 수 있으면 RequestDispatcher.forward() 메서드를 사용해 보십시오.
참고: 예를 들어 다른 서버의 리소스로 이동해야 하는 경우에는 다음을 사용해야 합니다. HttpServletResponse.sendRequest() 메소드.
3.<jsp:forward page="" />
기본 부분은 RequestDispatcher에 의해 구현되므로 RequestDispatcher.forward() 메서드의 흔적이 남아 있습니다. <jsp:forward> 이전에 많은 출력이 있고 이전 출력으로 인해 버퍼가 가득 차서 자동으로 클라이언트에 출력되는 경우 이 명령문은 작동하지 않습니다. 이는 특히 주의해야 합니다.
또한 브라우저 주소는 변경할 수 없습니다. 새로 고치면 제출이 반복됩니다.
4. 리디렉션할 HTTP 헤더의 위치 속성을 수정합니다.
주소 표시줄을 직접 수정하여 페이지를 리디렉션하세요.
jsp 파일 코드는 다음과 같습니다.
코드 내용: 5. JSP는 특정 페이지에 몇 초 동안 머물렀다가 다른 페이지로 자동 리디렉션을 구현합니다.
html 파일에서 다음 코드는 다음과 같습니다.
<meta http-equiv="refresh" content="300; url=target.jsp">
의미: 5분 후에 탐색 중인 페이지가 자동으로 target.html 페이지로 변경됩니다. 코드에서 300은 새로 고침 지연 시간(초)입니다. target.html은 리디렉션하려는 대상 페이지입니다. 이 페이지인 경우 자동으로 이 페이지가 새로 고쳐집니다.
위에서 볼 수 있듯이 setHeader를 사용하면 몇 초 동안 페이지에 머문 후 자동으로 다른 페이지로 리디렉션할 수 있습니다.
키 코드:
코드 내용
<%
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
String newLocn = "/newpath/jsa.jsp";
response.setHeader("위치",newLocn);
%>
문자열 내용=stayTime+";URL="+URL;
response.setHeader("REFRESH",content);