重定向和请求转发区别和使用位置,萌新快速理解和运用!

文章目录

      • 请求转发和重定向图解:
      • 重定向:response.sendRedirect()
      • 请求转发:request.getRequestDispatcher().forward(req,resp)
      • 请求转发和重定向的区别:
      • 请求转发和重定向一般用在什么地方:

请求转发和重定向图解:

    对于重定向和请求转发总有很多难以分清的小同学,来我们看看这两幅图
重定向和请求转发区别和使用位置,萌新快速理解和运用!_第1张图片
重定向和请求转发区别和使用位置,萌新快速理解和运用!_第2张图片

重定向:response.sendRedirect()

    相当于用户从浏览器输入某个url地址或通过按钮去(servlet1)查找资源,但是在这个地址中没有用户需要的资源,这时候用户就告诉浏览器(response)让浏览器去访问另一个有这个资源的url地址(servlet2),这时候浏览器收到响应,然后再次向有这个资源的url地址(servlet2)发起请求,然后这个资源的地址(servlet2)将用户查找的东西响应给浏览器。
    就相当于张三找李四借书,李四没有,但是李四告诉张三在王五哪里有这本书,然后张三就去找王五借书,王五将书借给张三。【这里面王五不知道李四的存在】

请求转发:request.getRequestDispatcher().forward(req,resp)

    相当于用户从浏览器向第一个url(Servlet1)访问数据,但是这个Servlet1没有用户要的数据,但是它(Servlet1)直接调用另一个地址(Servlet2)访问这个数据,然后将数据响应(response)给浏览器,用户就接收到数据【这里面可以嵌套多个请求转发】
    就相当于张三找李四借书,李四没有,但是李四去找王五,告诉王五,张三需要借你的书,然后王五将书借给了张三。【王五知道李四存在】

请求转发和重定向的区别:

  • 重定向
  1. 两次请求,两次响应,前一次的请求对象不会保存
  2. 重定向不能携带数据
  3. 重定向地址栏url发生改变
  4. 不能够访问WEB-INF下的资源
  5. 重定向是一种客户端的行为,相当于用户直接使用url访问两次
  • 请求转发
  1. 一次请求,一次响应,请求对象request保留
  2. 转发会携带数据
  3. 转发地址栏url不会发生变化
  4. 可以访问WEB-INF下的资源
  5. 请求转发是一种服务器的行为,相当于服务器拿着请求去别的地方找数据然后将结果响应给浏览器用户

请求转发和重定向一般用在什么地方:

请求转发和重定向最大的区别就是:

	请求转发可以携带数据,并且可以访问WEB-INF下的资源文件。重定向不可以。【重点**】
	所以需要携带数据和访问WEB-INF下资源的用请求转发。(WEB-INF下的文件不能够直接被用户访问到,
	    用户直接通过url访问WEB-INF下的文件会报404错误)
	不想让用户看到地址栏url的变化用请求转发。
	其他情况下用重定向较好。

你可能感兴趣的:(每日学习,经验分享,java,intellij,idea,servlet)