一、请求转发
1.请求转发可以将两个servlet连成一个工作流,共同去完成一个任务
2.如何使用请求转发在两个servlet中进行跳转?
①获取一个调度对象
    RequestDispatcher rd = request.getRequestDispatcher("目标Servlet的url-pattern");
②指定跳转的目标Servlet
    在构建调度对象时指定目标跳转的程序路径
③完成跳转
    rd.forward(request,response);
3.请求转发的特点
①地址栏不变,请求转发发生在服务器内部
②请求转发连接两个servlet处于同一个请求中

request作用域
小明            小红
       邮局
//存储
request.setAttribute("key(String)", "value(Object)");

二、重定向
1.作用:请求重定向可以完成在两个servlet之间的跳转
2.如何使用
response.sendRedirect("目标的URI");
3.请求重定向的特点
地址栏发生改变,发生在服务器外部

三、请求转发和请求重定向的区别

  1. request.getRequestDispatcher()是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;服务器内部转发,整个过程处于同一个请求当中。
    response.sendRedirect()则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。不在同一个请求。重定向,实际上客户端会向服务器端发送两个请求。
    所以转发中数据的存取可以用request作用域:request.setAttribute(), request.getAttribute(),重定向是取不到request中的数据的。只能用session。

  2. forward()更加高效,在可以满足需要时,尽量使用RequestDispatcher.forward()方法。(思考一下为什么?)

  3. RequestDispatcher是通过调用HttpServletRequest对象的getRequestDispatcher()方法得到的,是属于请求对象的方法。
    sendRedirect()是HttpServletResponse对象的方法,即响应对象的方法,既然调用了响应对象的方法,那就表明整个请求过程已经结束了,服务器开始向客户端返回执行的结果。

  4. 重定向可以跨域访问,而转发是在web服务器内部进行的,不能跨域访问。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐