웹 개발에서는 전달과 리디렉션 사이에 큰 차이가 있습니다.
직관적으로 말하면 전달을 하면 URL 주소가 변경되지 않지만 리디렉션을 하면 URL이 변경됩니다.
이건 겉모습일 뿐입니다. HttpServlet의 요청 객체와 응답 객체는 사용자가 웹페이지를 요청할 때 브라우저가 전달한 매개변수를 기반으로 서버에 의해 캡슐화되고 생성됩니다. 브라우저에서 요청이 이루어지고 서버가 응답하면 요청과 응답의 수명이 다한 것입니다.
전달을 사용할 때 브라우저는 한 번만 요청하지만 서버는 여러 번의 점프를 경험할 수 있습니다. 서버 측 실행 중에 전달이 발생하면 서버는 실행 중인 작업을 중지하고 지정된 주소를 전달할 작업을 지정합니다.
리디렉션을 사용하면 브라우저가 서버에 여러 요청을 보냅니다. 코드가 서버 측에서 실행될 때 리디렉션이 발생하면 다른 URL에 액세스하도록 브라우저에 알립니다. 브라우저는 전송된 URL에서 리소스를 요청합니다.
코드 보기:
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>login</title></head><body> <form action="myServlet" method="post"> name :<input type="text" name="username"/><br/> <input type="submit" value="submit"/> </form></body></html>
이것은 jsp 코드 조각입니다. 제출을 클릭하면 양식이 myServlet에 제출됩니다.
인터페이스는 다음과 같습니다.
public class MyServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = (String)request.getParameter("username"); request.setAttribute("welcome", "welcome!!!"); RequestDispatcher rd = request.getRequestDispatcher("welcome.jsp"); rd.forward(request,response); } }
이것은 MySerlet입니다. 사용자가 양식을 제출하기 위해 클릭하면 서버는 MyServlet의 doPost 메소드를 호출합니다. 이 메소드에서는 페이지가 전달됩니다.
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>welcome</title></head><body> <%=request.getParameter("username")%> <br/> <%=request.getAttribute("welcome") %></body></html>
welcome.jsp의 코드입니다.
제출 결과는 다음과 같습니다.
제출 버튼을 클릭한 후 네트워크 요청 프로세스를 살펴볼 수 있습니다.
브라우저가 서버에 요청을 한 번만 보낸 것을 확인할 수 있습니다.
다음에는 리디렉션을 살펴보겠습니다.
MyServlet의 코드를 변경하는 경우.
public class MyServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = (String)request.getParameter("username"); request.setAttribute("welcome", "welcome!!!");// RequestDispatcher rd = request.getRequestDispatcher("welcome.jsp");// rd.forward(request,response); response.sendRedirect("welcome.jsp"); } }
결과는 다음과 같습니다.
그리고 브라우저 항목 서버는 두 가지 요청을 보냈습니다.
위 결과에서 리디렉션 이후에 시작된 또 다른 요청이기 때문에 welcom을 볼 수 있습니다. 페이지 내용이 모두 null입니다. 전달은 요청 객체와 응답 객체가 동일하므로 브라우저가 요청한 매개변수를 얻을 수 있을 뿐만 아니라 요청에 입력된 속성 값도 얻을 수 있습니다.
실제로 코드를 보면 sendRedirect() 메소드가 HttpServletResponse 객체의 응답 메소드라는 것을 알 수 있는데, 응답 객체의 메소드가 호출되기 때문에 전체 요청이 끝났다는 뜻이고, 서버는- 사이드 항목은 실행 결과를 클라이언트에 반환합니다. getRequestDispatcher 메소드는 요청 객체의 메소드로, 요청이 아직 진행 중이므로 결과가 즉시 브라우저에 반환되지 않고 전달 작업을 계속 수행함을 나타냅니다.
한 가지 설명해야 할 것이 있습니다. forward 메소드 또는 sendRedirect 메소드에 전달된 URL이 ""로 시작하는 경우 해당 URL은 서블릿의 루트에 대한 요청임을 의미합니다. 컨테이너, 즉 localhost:8080이 아닌 경우 ""로 시작하는 것은 요청 주소가 현재 요청 URL을 기준으로 지정되었음을 나타냅니다.
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>login</title></head><body> <!--这里改成了绝对地址 --> <form action="/myServlet" method="post"> name :<input type="text" name="username"/><br/> <input type="submit" value="submit"/> </form></body></html>
다시 제출을 클릭하면:
""로 시작하지 않는 요청 주소:
전달 모델:
리디렉션 모델:
이 문서 웹페이지 전달 및 리디렉션에 대해 설명합니다. 더 많은 관련 내용을 보려면 PHP 중국어 웹사이트를 참조하세요.
관련 권장 사항:
HTML을 Excel로 변환하고 인쇄 및 다운로드 기능을 실현
위 내용은 웹페이지 전달 및 리디렉션의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!