请求的转发与重定向是web应用页面跳转的主要手段,在Web应用中使用非常广泛区别
举例:假设用户发送了一个请求给服务器中的地址A,但最终要进入的是地址B对应的网页。
转发
服务器内部解决,服务器将用户对A发的请求交给了地址B并让其给出响应,地址栏中的地址也并不会发生改变,所以用户并不知情,用户只发出了一次请求。如果两个网页分别对应两个servlet,那转发的方式两个servlet可以共享同一个请求域的数据。
重定向
地址A接收到了用户的请求,进行一定的处理,然后给用户一个特殊的响应,这个响应通知用户去访问另外一个资源也就是地址B,但系列动作是浏览器和服务器自动完成的,不需要用户再次手动访问,整个过程浏览器发出了两次请求,并且在地址栏可以看到地址的变化,变为下一个资源的地址(地址B)
转发
protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
//1.使用RequestDispatcher对象封装目标资源的虚拟路径
RequestDispatcher dispatcher = request.getRequestDispatcher("/index.html");
//2.调用RequestDispatcher对象的forward()方法“前往”目标资源
//[注意:传入的参数必须是传递给当前Servlet的service方法的
//那两个ServletRequest和ServletResponse对象]
dispatcher.forward(request, response);
}
重定向
protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
//1.调用HttpServletResponse对象的sendRedirect()方法
//2.传入的参数是目标资源的虚拟路径
response.sendRedirect("index.html");
}
TIP:
转发以“/”开始表示项目根路径, http://localhost:8080/项目名/
重定向以”/”开始表示主机地址。 http://localhost:8080/



