请求转发(服务器端跳转,一次请求)
req.getRequestDispatcher("/index.html").forward(req,resp);
- 客户端路径不变,一次请求
- request作用域可以用来传值给客户端
- 绝对路径绝对于工程根目录
- 相对路径是相对于该servlet的访问路径
- 只能跳转至当前工程的路径中,/WEB-INF/下的目录也可以访问
重定向(客户端跳转,两次请求)
resp.sendRedirect(req.getContextPath()+"/index.html");
- 客户端路径改变 显示第二次请求的路径 两次请求
- 第二次请求是客户端发起的,所以叫客户端跳转
- 绝对路径绝对于服务器的根目录
- 相对路径相对于servlet的访问路径
- 可以跳转到其他的工程路径中
总结
- 形象地讲,服务器相当于一个超市,客户端相当于顾客,当顾客光临超市并询问导购员一件商品在哪里时:
- 如果导购员将该商品找到并直接拿给顾客,这样的操作为请求转发,也就是服务器端跳转
- 如果导购员告诉顾客该商品在哪个货架,顾客再根据货架地址去找到该商品,这样的操作为重定向,也就是客户端跳转
- 相比来说,请求转发服务器虽然仅处理一次请求,但是消耗资源更多。