java 中sendredirect()和forward()方法的区别

 更新时间:2017年08月03日 17:30:00   作者:yoxibaga  
这篇文章主要介绍了java 中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)

总结

以上所述是小编给大家介绍的java 中sendredirect()和forward()方法的区别,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • 解析Runtime中shutdown hook的使用详解

    解析Runtime中shutdown hook的使用详解

    本篇文章是对解析Runtime中shutdown hook的使用进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • Java如何在不存在文件夹的目录下创建文件

    Java如何在不存在文件夹的目录下创建文件

    这篇文章主要介绍了Java如何在不存在文件夹的目录下创建文件,代码简单易懂,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-08-08
  • Java全面解析string类型的xml字符串

    Java全面解析string类型的xml字符串

    这篇文章主要介绍了Java全面解析string类型的xml字符串,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • 使用java对一副扑克牌建模

    使用java对一副扑克牌建模

    这篇文章主要为大家详细介绍了如何使用java对一副扑克牌建模,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • Java Volatile应用单例模式实现过程解析

    Java Volatile应用单例模式实现过程解析

    这篇文章主要介绍了Java Volatile应用单例模式实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • java向上转型发生的时机知识点详解

    java向上转型发生的时机知识点详解

    在本篇文章里小编给大家整理分享的是关于java向上转型发生的时机知识点内容,有兴趣的读者们可以参考下。
    2021-05-05
  • Java上传文件到服务器端的方法

    Java上传文件到服务器端的方法

    这篇文章主要为大家详细介绍了Java上传文件到服务器端的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • java设计模式之中介者模式

    java设计模式之中介者模式

    这篇文章主要为大家详细介绍了java设计模式之中介者模式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • java MyBatis拦截器Inteceptor详细介绍

    java MyBatis拦截器Inteceptor详细介绍

    这篇文章主要介绍了java MyBatis拦截器Inteceptor详细介绍的相关资料,需要的朋友可以参考下
    2016-11-11
  • mybatis TypeHandler注入spring的依赖方式

    mybatis TypeHandler注入spring的依赖方式

    这篇文章主要介绍了mybatis TypeHandler注入spring的依赖方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01

最新评论