一. 文章 1
HttpServletResponse.sendRedirect 与 RequestDispatcher.forward 方法都可以实现获取相应 URL 资源.
sendRedirect 实现请求重定向, forward 实现的是请求转发.
在 web 服务器内部的处理机制也是不一样的.
1. 跳转方式
运用 forward 方法只能重定向到同一个 Web 应用程序中的一个资源. 而 sendRedirect 方法可以让你重定向到任何 URL.
表单 form 的 action= "/uu";sendRedirect("/uu"); 表示相对于服务器根路径.
如 http://localhost:8080/Test 应用 (则提交至 http://localhost:8080/uu );
Forward 代码中的 "/uu" 则代表相对与 WEB 应用的路径. 如 http://localhost:8080/Test 应用 (则提交至 http://localhost:8080/Test/uu );
2.forward 重定向后, 浏览器 url 地址不变, sendRedirect 转发后, 浏览器 url 地址变为目的 url 地址.
forward() 无法重定向至有 frame 的 jsp 文件, 可以重定向至有 frame 的 html 文件, 同时 forward() 无法在后面带参数传递,
比如 servlet?name=frank, 这样不行, 可以程序内通过 response.setAttribute( "name",name) 来传至下一个页面.
3. 使用 forward 重定向的过程, 是浏览器先向目的 Servlet 发送一次 Request 请求, 然后再服务器端由 Servlet 再将请求发送到目的 url, 再由服务器端 Servlet 返回 Response 到浏览器端. 浏览器和服务器一次请求响应.
使用 sendRedirect 转发的过程, 浏览器先向目的 Servlet 发送一次请求, Servlet 看到 sendRedirect 将目的 url 返回到浏览器, 浏览器再去请求目的 url, 目的 url 再返回 response 到浏览器. 浏览器和服务器两次请求响应.
4. forward 方法的调用者与被调用者之间共享 Request 和 Response
- RequestDispatcher rd = request.getRequestDispatcher("userlist.jsp");
- rd.forward(request,response);
- RequestDispatcher rd=request.getRequestDispatcher("*.jsp");
- rd.forward(request,response);
来源: http://www.bubuko.com/infodetail-2750660.html