有一些地方还是没有弄明白。为什么请求重定向中必须获取上下文地址,如response.sendRedirect(request.getContextPath()+"/test.jsp"); 而服务器内部跳转则不需要获得上下文地址,直接写: request.getRequestDispatcher("/test.jsp").forward(request, response); 猜测是否是因为这两种请求方式分别在服务器内外,在服务器外不知道当前项目根目录,就必须通过request.getContextPath()来获得地址,而服务器内已经知晓了当前项目根目录,所以直接可以用/代替。 请问是这样吗?
你是不是弄混了 这并不是重定向和转发的区别,而是为了讲解绝对路径和相对路径的区别才这么写的。
请求转发与请求重定向的区别:
重定向:客户端行为,response.sendRedirect(),从本质上讲等同于两次请求,前一次请求对象不会保存,地址栏的URL地址会改变;
请求转发:服务器行为,request.getRequestDispatcher().forward(req,resp);是一次请求,转发后请求对象会保存,地址栏的URL地址不会改变;