转发
![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(“绝对路径”);
重定向
通过response对象发送给浏览器一个新的url地址,让其重新请求;
对于浏览器来说,是两次请求和两次相应。
response.sendRedirect(“project_name/xxx.jsp”);
转发与重定向的区别
方法
实现转发调用的是HttpServletRequest对象中的方法,实现重定向调用的是HttpServletResponse对象中的方法
浏览器地址栏
转发时浏览器中的url地址栏不会发生改变,重定向时浏览器中的url地址会发生改变
请求过程
转发时浏览器只请求一次服务器,重定向时浏览器请求两次服务器
请求范围
参数
转发可以使用request带数据到跳转的页面,而重定向默认不可以使用request带数据到跳转的页面,因为是两次请求,带参数的只是第一次请求,不过可以使用ServletContext传递参数。