转发是由服务器端进行的页面跳转,而重定向是由浏览器端进行的页面跳转。
①代码上的区别:
- // 获取请求转发器对象
- RequestDispatcher dispatcher = request.getRequestDispatcher("/dept/list");
- // 调用请求转发器对象的forward方法完成转发
- dispatcher.forward(request, response);
-
- // 合并一行代码
- request.getRequestDispatcher("/dept/list").forward(request, response);
- // 注意:路径上要加一个项目名。为什么?
- // 浏览器发送请求,请求路径上是需要添加项目名的。
- response.sendRedirect("/oa/dept/list");
②形式上的区别:
转发(一次请求)
在浏览器地址栏上发送的请求是:http://localhost:8080/servlet10/a ,最终请求结束之后,浏览器地址栏上的地址还是这个。没变。
重定向(两次请求)
在浏览器地址栏上发送的请求是:http://localhost:8080/servlet10/a ,最终在浏览器地址栏上显示的地址是:http://localhost:8080/servlet10/b
③转发和重定向的本质区别:
转发:是由WEB服务器来控制的。A资源跳转到B资源,这个跳转动作是Tomcat服务器内部完成的。
重定向:是浏览器完成的。具体跳转到哪个资源,是浏览器说了算。
如果在上一个Servlet当中向request域当中绑定了数据,希望从下一个Servlet当中把request域里面的数据取出来,使用转发机制。剩下所有的请求均使用重定向。(重定向使用较多。)
访问数据库,增删改使用重定向,查询使用转发。
转发:

重定向: