转发

  1. ![image.png](https://cdn.nlark.com/yuque/0/2020/png/1597025/1599292036480-aee2f02f-81cc-42d0-a45d-243a23deec65.png#align=left&display=inline&height=333&margin=%5Bobject%20Object%5D&name=image.png&originHeight=666&originWidth=1043&size=186164&status=done&style=none&width=521.5)<br />将当前的request和response对象交给指定的web组件处理;<br />url不变;<br />对于浏览器来说,只有一次请求和一次相应。

转发对象

RequestDispatcher,是由Servlet容器创建的。有两个方法:forward和include。
这个对象可以通过HttpServletRequest获取,也可通过ServletContext获取。

通过HttpServletRequest:
request.getRequestDispatcher(“相对路径或绝对路径”).forward(request,response);

通过ServletContext获取【两种方法】:
rd = this.getServletContext().getNamedDispatcher(“Servlet的名称”);

rd = this.getServletContext().getRequestDispatcher(“绝对路径”);

rd.forward(request,response);

重定向

image.png
通过response对象发送给浏览器一个新的url地址,让其重新请求;
对于浏览器来说,是两次请求和两次相应。

response.sendRedirect(“project_name/xxx.jsp”);

转发与重定向的区别

方法

实现转发调用的是HttpServletRequest对象中的方法,实现重定向调用的是HttpServletResponse对象中的方法

浏览器地址栏

转发时浏览器中的url地址栏不会发生改变,重定向时浏览器中的url地址会发生改变

请求过程

转发时浏览器只请求一次服务器,重定向时浏览器请求两次服务器

请求范围

转发不可跨应用,重定向可以跨应用。

参数

转发可以使用request带数据到跳转的页面,而重定向默认不可以使用request带数据到跳转的页面,因为是两次请求,带参数的只是第一次请求,不过可以使用ServletContext传递参数。