博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaWeb forward与sendRedirect区别
阅读量:4209 次
发布时间:2019-05-26

本文共 1412 字,大约阅读时间需要 4 分钟。

转载自 :

SendRedirect Forward
不同的request 不同的对象,但是可以取到上一个页面的内容
send后面的语句会继续执行,除非return Forward后面的语句不会继续发送给客户端
速度慢 速度快
需要到客户端的往返,可以跳转到任何页面 服务器内部转换
地址栏有变化 地址栏没有变化
可以传参数,直接写在URL后面 可以传参数
“/” 代表的是 <%response.sendRedirect();%> “/” 代表的是 this.getServletContext().getRequestDispatcher(“/servlet_jsp/ServletUseJSP.jsp”).forward(req,resp); 并且只能以 / 开头

HttpServletResponse.sendRedirect与RequestDispatcher.forward方法都可以实现获取相应URL资源。

sendRedirect实现请求重定向,forward实现的是请求转发。
在web服务器内部的处理机制也是不一样的。

  1. forward方法只能转发给同一个web站点的资源,而sendRedirect方法还可以定位到同一个web站点的其他应用,甚至可以通过传入绝对路径定位到别的web站点,这事forward的方法所不能比拟的优势。

  2. 如果传给RequestDispatcher 的参数以”/”开头,则访问的是当前web应用的根目录

    如果传给sendRedirect方法以”/”开头,访问的是整个web站点的根目录。

  3. forward重定向后,浏览器url地址不变,sendRedirect转发后,浏览器url地址变为目的url地址

  4. 使用forward重定向的过程,是浏览器先向目的Servlet发送一次Request请求,然后再服务器端由Servlet再将请求发送到目的url,再由服务器端Servlet返回Response到浏览器端。浏览器和服务器一次请求响应。

    使用sendRedirect转发的过程,浏览器先向目的Servlet发送一次请求,Servlet看到sendRedirect将目的url返回到浏览器,浏览器再去请求目的url,目的url再返回response到浏览器。浏览器和服务器两次请求响应。

  5. forward方法的调用者与被调用者之间共享Request和Response

    sendRedirect方法由于两次浏览器服务器请求,所以有两个Request和Response。
    如果使用request.setAttribute传递一些属性就需要用forward,如果想要跳转到别的应用的资源,就需要用sendRedirect。

  6. 无论是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)

你可能感兴趣的文章
【一天一道LeetCode】#46. Permutations
查看>>
【一天一道LeetCode】#47. Permutations II
查看>>
【一天一道LeetCode】#48. Rotate Image
查看>>
【一天一道LeetCode】#56. Merge Intervals
查看>>
【一天一道LeetCode】#57. Insert Interval
查看>>
【一天一道LeetCode】#58. Length of Last Word
查看>>
【一天一道LeetCode】#59. Spiral Matrix II
查看>>
【一天一道LeetCode】#30. Substring with Concatenation of All Words
查看>>
【一天一道LeetCode】#60. Permutation Sequence.
查看>>
【一天一道LeetCode】#113. Path Sum II
查看>>
【一天一道LeetCode】#114. Flatten Binary Tree to Linked List
查看>>
【unix网络编程第三版】阅读笔记(二):套接字编程简介
查看>>
【一天一道LeetCode】#115. Distinct Subsequences
查看>>
【一天一道LeetCode】#116. Populating Next Right Pointers in Each Node
查看>>
【一天一道LeetCode】#117. Populating Next Right Pointers in Each Node II
查看>>
【一天一道LeetCode】#118. Pascal's Triangle
查看>>
【一天一道LeetCode】#119. Pascal's Triangle II
查看>>
【unix网络编程第三版】ubuntu端口占用问题
查看>>
【一天一道LeetCode】#120. Triangle
查看>>
【unix网络编程第三版】阅读笔记(三):基本套接字编程
查看>>