Java Servlet(九):转发请求与重定向请求区别

转发:

<%
        pageContext.setAttribute("pageContextAttr", "pageContextAttribute");
        request.setAttribute("requestAttr", "requestAttribute");
        session.setAttribute("sessionAttr", "sessionAttribute");
        application.setAttribute("applicationAttr", "applicationAttribute");
    %>

    pageContext:<%=pageContext.getAttribute("pageContextAttr")%><br />
    request:<%=request.getAttribute("requestAttr")%><br /> 
    session:<%=session.getAttribute("sessionAttr")%><br />
    application:<%=application.getAttribute("applicationAttr")%><br />

    <%
        String servletName = "myELServletPage.jsp";
        RequestDispatcher requestDispatcher = request.getRequestDispatcher("/" + servletName);
        requestDispatcher.forward(request, response);
        // 1、 重定向 "/"代表当前web站点的根目录
        //  转发:“/”代表当期web应用的 根目录。
        // 2、转发:只能转发到当前web应用的资源;
        //   重定向:可以重定向到任何资源(包括外部资源)。 
    %>

重定向:

<%
        pageContext.setAttribute("pageContextAttr", "pageContextAttribute");
        request.setAttribute("requestAttr", "requestAttribute");
        session.setAttribute("sessionAttr", "sessionAttribute");
        application.setAttribute("applicationAttr", "applicationAttribute");
    %>

    pageContext:<%=pageContext.getAttribute("pageContextAttr")%><br />
    request:<%=request.getAttribute("requestAttr")%><br /> 
    session:<%=session.getAttribute("sessionAttr")%><br />
    application:<%=application.getAttribute("applicationAttr")%><br />

    <%
        // 1、 重定向 "/"代表当前web站点的根目录
        //  转发:“/”代表当期web应用的 根目录。
        response.sendRedirect("myRedirectPage.jsp");
        
        // 2、转发:只能转发到当前web应用的资源;
        //   重定向:可以重定向到任何资源(包括外部资源)。 
    %>

myELServletPage.jsp与myRedirectPage.jsp内容都相同:

    pageContext:<%= pageContext.getAttribute("pageContextAttr") %><br/>
    request:<%= request.getAttribute("requestAttr") %><br/>    
    session:<%= session.getAttribute("sessionAttr") %><br/>
    application:<%= application.getAttribute("applicationAttr") %><br/>        

当访问转发页面时,结果是:

当访重定向页面时,结果是:

转发与从定向区别:

1、用法却别:

重定向请求:1、调用HttpServletRequest 的getRequestDispatcher()的方法,获取RequestDispatcher对象, 调用getRequestDispatcher()需要传入转发的地址。

                2、调用HttpServletRequest的forward(request,response)方法。

转发请求:调用HttpServletResponse对象的sendRedirect()方法,直接在sendRedirect()方法中传入要转发的目标地址。

2、重定向请求: "/"代表当前web站点的根目录;
     转发请求:“/”代表当期web应用的 根目录。

3、重定向请求:可以重定向到任何资源(包括外部资源);

     转发请求:只能转发到当前web应用的资源。

4、重定向请求:只发送了一个次请求。浏览器地址不发送变化。

    转发请求:发送了两次请求。浏览器地址发送变化。

5、转化请求:目的页面可以接受该页面传递的参数信息。在最终的Servlet中,request对象和中转的那个request是同一个对象。
    重定向请求:在最终的Servlet中,request对象和中转的那个request不是同一个对象。

原文地址:https://www.cnblogs.com/yy3b2007com/p/5484121.html