>  기사  >  백엔드 개발  >  웹페이지 전달 및 리디렉션

웹페이지 전달 및 리디렉션

jacklove
jacklove원래의
2018-06-11 23:42:102297검색

웹 개발에서는 전달과 리디렉션 사이에 큰 차이가 있습니다.

직관적으로 말하면 전달을 하면 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 중국어 웹사이트를 참조하세요.

관련 권장 사항:

간단한 PHP+MySQL 페이징 클래스

재귀가 없는 두 개의 트리 배열 생성자

HTML을 Excel로 변환하고 인쇄 및 다운로드 기능을 실현

위 내용은 웹페이지 전달 및 리디렉션의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.