zoukankan      html  css  js  c++  java
  • sendredirect()和forward()的区别 (转)

    sendRedirect() 和forward()的区别

     

    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
     
    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)

  • 相关阅读:
    Python——装饰器
    黑马Python——学习之前
    遇到的问题及解决办法——待完善
    springboot @Slf4j log 日志配置 控制台输出彩色日志并过滤DEBUG日志
    常用linux指令
    Spring Security内置 Filter 全解析
    jquery attr与prop区别。
    instanceof不能跨框架判定数组类型,必须用Array.isArray方法,实例
    font-size:em单位
    通过简单的css样式让按钮居中显示
  • 原文地址:https://www.cnblogs.com/geek1116/p/6693213.html
Copyright © 2011-2022 走看看