客户端跳转(重定向):
response.sendRedirect("/webapp/index.jsp"); //加上了应用名,/代表webapps目录
上面方法其实是对setStatus()和setHeader()进行了封装
response.setStatus(302); //302状态码在http协议中代表的就是临时重定向
response.setHeader("Location","/webapp/index.jsp");
服务器跳转(转发):
request.getRequestDispatcher("/index.jsp").forward(request,response); //没有加应用名,/代表的是本应用的根目录
资源地址问题:给服务器用的直接从资源名开始写,给浏览器用的要加上应用名。
去往的url范围:转发只能去往本应用的web资源,而重定向可以去往任何其他资源。
传递的数据类型:request对象可以传递任何类型,包括对象,而重定向只能传递字符串。
跳转时间:转发在执行到转发语句时立即跳转,而重定向在整个页面执行完之后才开始跳转。
应用场景:
转发:访问servlet然后跳转到jsp显示处理结果,同一个url。
重定向:提交表单,处理成功后redirect到另一个jsp,防止重复提交。
注意:转发前后是同一个request,同一个请求,带着同一个请求的参数,url没有发生变化,而重定向是新的请求,url发生了变化。