J2EE 请求重定向与请求转发

重定向:

@WebServlet("/ServletRedirect")
public class ServletRedirect extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.sendRedirect("http://www.baidu.com");
    }
}

请求转发:

public class ServletForword1 extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setAttribute("name", "cjj");
        request.setAttribute("password", 123);
        request.getRequestDispatcher("/ServletForword2").forward(request, response);
    }
}


public class ServletForword2 extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String result=request.getAttribute("name")+"   "+request.getAttribute("password");
        System.out.println(result);
    }
}

请求转发:
一个servlet里面处理逻辑, 将处理结果交给下一个Servlet(JSP)负责显示.

操作(代码):
    request.getRequestDispatcher("/EServlet").forward(request,response);

问题: 将转发与重定向做对比,有什么异同?

    1.浏览器一共发送了几个请求?
            重定向: 两次请求
            转发: 一次请求

    2.浏览器的地址发生变化吗?
            重定向:  会发生变化
            转发:  不会发生变化

    3.会改变请求方式吗?
            重定向:  未必.重定向的第2次请求一定是get.
            转发:  不会.    
    4.request域可不可以共享数据?
            重定向:  不可以,因为会产生两个request对象.
            转发:  可以. 因为是在一个请求范围内.使用的是同一个request对象.

转发的Servlet不可以向response的正文中添加任何内容.但是可以向响应头添加内容.

你可能感兴趣的:(J2EE 请求重定向与请求转发)