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应用(则提交至);
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()方法的区别,希望对大家有所帮助
推荐阅读
-
java 中sendredirect()和forward()方法的区别
-
Java中Color和16进制字符串互相转换的方法
-
Java中启动线程start和run的两种方法
-
Java中HashMap和Hashtable及HashSet的区别
-
c#方法中调用参数的值传递方式和引用传递方式以及ref与out的区别深入解析
-
java中out.print和out.write的方法
-
浅析java中print和println的区别
-
基于Java中throw和throws的区别(详解)
-
Java中new关键字和newInstance方法的区别分享
-
Java中Integer.valueOf,parsetInt() String.valueOf的区别和结果代码解析