转发:
request.getRequestDispatcher("/pages/user/login.html").forward(request, response);
重定向:
response.sendRedirect(contextPath+"/pages/user/login_success.html");
通过这张图你就可以看到,转发是在服务器之间进行的,它的意思虽然我没有你想要的资源但是我可以帮你找到,
重定向是告诉你,我Servlet1没有这个资源,但是我告诉你那里有,你自己通过浏览器去找,
区别:
转发 | 重定向 | |
---|---|---|
浏览器感知 | 在服务器内部完成,浏览器感知不到 | 服务器以302状态码通知浏览器访问新地址,浏览器有感知 |
浏览器地址栏 | 不改变 | 改变 |
整个过程发送请求次数 | 一次 | 两次 |
执行效率 | 效率高 | 效率低 |
API(或发起者) | Request对象 | Response对象 |
能否共享request对象数据 | 能 | 否 |
WEB-INF下的资源 | 能访问 | 不能访问 |
目标资源 | 必须是当前web应用中的资源 | 不局限于当前web应用 |
说明1:默认情况下,浏览器是不能访问服务器web-inf下的资源的,而服务器是可以访问的。
说明2:浏览器默认的绝对路径:http://localhost:8080/
服务器项目的代码中的绝对路径:http://localhost:8080/项目名/