一、两种跳转方式的区别:
分类 |
请求转发 |
重定向 |
归属对象 |
request |
response |
url |
/连接名 |
/应用名/连接名 |
跳转范围 |
本应用 |
本应用或外部 |
浏览器地址 |
不变 |
变化 |
请求传递 |
传递请求 |
重新请求 |
速度 |
快 |
慢 |
二、请求转发:
(1)request.getRequestDispatcher("/BServlet").forward(request, response);
(2)request.getRequestDispatcher("/BServlet").includ(request, response);
//如果使用forward跳转则后面的response输出则不会执行;
//而用include来跳转,则include的servlet执行完后,再返回到原来的servlet执行response的输出(如果有);
注意点:
(1)必须在当前应用内跳转;
(2)url必须是资源最短路径;
//对于servlet是urlparrent;对于html是html页面名字.html
(3)转发后地址不变;是一次请求;
三、重定向:
//响应码302:表示重定向;
1.重定向的创建:
(1)设置状态码和响应头;
response.setStatus(302);
response.setHeader("Location", "http://www.baidu.com");
(2)sendRedirect()方法:
response.sendRedirect("http://www.baidu.com");
//response.sendRedirect("/hello/BServlet");
2.重定向小结:
(1)重定向是两次请求;
(2)重定向url不局限于当前应用,可以是其他应用;
(3)重定向后不要使用response.getWriter()或response.getOutputStream()输出数据;