forward和sendRedirect的差别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了forward和sendRedirect的差别相关的知识,希望对你有一定的参考价值。
HttpServletResponse.sendRedirect与RequestDispatcher.forward方法都可以实现获取相应URL资源。
sendRedirect实现请求重定向,forward实现的是请求转发。在web服务器内部的处理机制也是不一样的。
1.forward方法只能转发给同一个web站点的资源,而sendRedirect方法还可以定位到同一个web站点的其他应用,甚至可以通过传入绝对路径定位到别的web站点,这事forward的方法所不能比拟的优势。
如果传给RequestDispatcher 的参数以"/"开头,则访问的是当前web应用的根目录。如果传给sendRedirect方法以"/"开头,访问的是整个web站点的根目录。
2.forward重定向后,浏览器url地址不变,sendRedirect转发后,浏览器url地址变为目的url地址。
3.使用forward重定向的过程,是浏览器先向目的Servlet发送一次Request请求,然后再服务器端由Servlet再将请求发送到目的url,再由服务器端Servlet返回Response到浏览器端。浏览器和服务器一次请求响应。
使用sendRedirect转发的过程,浏览器先向目的Servlet发送一次请求,Servlet看到sendRedirect将目的url返回到浏览器,浏览器再去请求目的url,目的url再返回response到浏览器。浏览器和服务器两次请求响应。
4.forward方法的调用者与被调用者之间共享Request和Response
sendRedirect方法由于两次浏览器服务器请求,所以有两个Request和Response。
如果使用request.setAttribute传递一些属性就需要用forward,如果想要跳转到别的应用的资源,就需要用sendRedirect。
5.无论是forward方法还是sendRedirect方法调用前面都不能有PrintWriter输出到客户端。
forward方法报错: java.lang.IllegalStateException: Cannot forward after response has been committed
sendRedirect报错:java.lang.IllegalStateException: at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:435)
以上是关于forward和sendRedirect的差别的主要内容,如果未能解决你的问题,请参考以下文章
关于java中sendRedirect,forward和include区别
RequestDispatcher.forward和HttpServletResponse.sendRedirect
简述Servlet使用sendRedirect()和forward()两种方法的异同点
response.sendRedirect() 和 request.getRequestDispatcher().forward(request,response) 有啥区别 [重复]
response.sendRedirect()和request.getRequestDispatcher().forward(request,response)的区别