JSP中的重定向和请求转发以及它们的区别
我们先硬着头皮看一下重定向的定义:
重定向(Redirect):
客户端浏览器向Web应用服务器端发送一个请求,Web服务器端使用HttpServletResponse的sendRedirect()方法将结果(结果中头信息内HTTP状态码为302,Location响应报头域中保存响应回来的地址)返回给客户端浏览器;客户端浏览器收到服务器端结果后解析其头部信息,然后自动按照头部指定地址以GET方式再次向Web应用服务器端发请求,此时地址栏URL发生变化,服务器端接收到新的请求再将结果返回至客户端浏览器,客户端浏览器解释执行返回结果并将执行结果显示给用户,至此该过程结束。
或许有人看的头大,也有人可能明白了一点,都不要紧,我来解释一下,通俗点说,就是客户端浏览器向Web应用服务器端发送了两次请求,Web应用服务器也返回了两个执行结果给客户端浏览器,只是第一次发请求是手动的,而第二次是自动的。
其中的302是HTTP协议中的一个状态码,百度百科上是这样说的:
对于服务器,通常会给浏览器发送HTTP Location头部来重定向到新的新位置。
用通俗的话说就是,http约定好了,只要浏览器收到服务器给的302,那就是让我(浏览器),再一次提交请求,而这次的请求与上次(请求的是servlet)的不一样,这次请求的是response.sendRedirect("./target.jsp");
中的target.jsp页面(当然引号里面是你自己写的目标路径,我这个只是做演示用的,你完全可以写https://www.baidu.com
,那第二次请求访问的就是百度页面了)。
这次应该对重定向有大致了解了吧,那我们接着看请求转发的定义:
请求转发(Forward):
这里的“请求”是名词,请求转发指客户端浏览器向Web服务器端发送请求,服务器端收到请求后进行相应处理后再将该请求转发到另外的资源(即这一“转发”操作是在Web服务器端执行的),服务器端对该资源进行处理后反馈给客户端
从定义中我们可以看出请求转发与重定向不同,请求转发客户端浏览器只向Web服务器端发送一次请求,服务器端也只给客户端返回一次处理结果。(其实请求转发最后服务器端也给客户端发了一个状态码:200,表明这个请求已经成功)。
我们来看一个请求转发的代码:request.getRequestDispatcher("./target.jsp").forward(request, response);
,我们查一下Dispatcher
的意思是调度员,所以请求转发也可以这样理解:客户端浏览器向Web应用服务器发送一次请求(访问servlet),然后服务器端处理到request.getRequestDispatcher("./target.jsp").forward(request, response);
改行代码时,知道要跳转了,(这时不需要反馈给客户端)而是直接转发到另外的资源,处理后一并反馈给客户端,此时浏览器地址栏显示的是第一次访问的原地址。(而重定义过程结束后,地址栏中显示第二次访问的地址。)
我们再来说一下它们的区别:
重定向和请求转发的区别:
- 其实第一个区别我们在上面已经说过了, 但为了便于方便查找,以及保证文章结构清晰,我就再赘述一遍:重定向是浏览器客户端向Web应用服务器端发送两次请求,服务器端也向客户端返回两次处理结果,最后在浏览器地址栏中显示的是第二次访问的地址;而请求转发是浏览器向Web应用服务器端发送一次请求,服务器端也只向客户端返回一次处理结果,最后在浏览器地址栏中显示的是第一次访问的原地址。
- 第二个区别是页面的跳转,还记得上面介绍重定向时说过的
response.sendRedirect("./target.jsp");
吗?引号里也可以写https://www.baidu.com
,这样第二次访问的页面就是百度了。所以第二个区别就是重定向对页面的跳转没有限制,可以是本Web应用系统的资源,也可以是其他Web应用的资源;而请求转发处理页面跳转时,跳转的新地址必须是本Web应用系统的资源,不可以访问其他Web应用的资源。 - 第三个区别是重定向无法在新的页面获取
request.setAttribute("key", "value");
中保存的数据,若非要使用<%= request.getAttribute("key") %>
获取,则获取到的值为null
;而请求转发就可以在新的页面获取到request.setAttribute("key", "value");
中保存的数据。 - 最后一个区别可以说是请求转发的一个特性:Web项目中WEB-INF文件夹是最安全的目录,该目录内的资源只能通过请求转发获取,重定向的方式无法获取!
JSP中的重定向和请求转发以及它们的区别相关推荐
- HTTP中的重定向和请求转发的区别
一.调用方式 我们知道,在servlet中调用转发.重定向的语句如下: request.getRequestDispatcher("new.jsp").forward(reques ...
- 请求转发和重定向的区别_WEB之重定向和请求转发的区别
一次重定向的过程 我的代码里面已经写好了,redirectAndFoward.jsp页面上有一个表单,表单重定向到redirectAndFowardTarget.jsp,那么这一次的重定向过程为: 1 ...
- 相对地址与绝对地址的区别?请求重定向与请求转发的区别?jsp有哪九大内置对象?servlet如何获取session和application对象?
目录 1.说说相对地址与绝对地址的区别? 2.说说请求重定向与请求转发的区别? 3.jsp有哪九大内置对象?servlet如何获取session和application对象? 1.说说相对地址与绝对地 ...
- 分析:重定向和请求转发
分析:重定向和请求转发 重定向 HttpServletResponse对象的sendRedirect(java.lang.String location)方法称作重定向. 如果location地址前面 ...
- 重定向与请求转发的区别及什么时候使用
重定向与请求转发的区别 一 转发是服务器行为,重定向是客户端行为.为什么这样说呢,这就要看两个动作的工作流程: 转发过程:客户浏览器发送http请求-->web服务器接受此请求-->调用内 ...
- SpringMVC重定向与请求转发
SpringMVC重定向与请求转发 一,请求转发 ①请求转发地址栏不会发生改变 ②请求转发只发送一次请求.能携带原有的参数 ③请求转发只可以在同一个服务器中进行转发 ④实际上视图解析器的转发本质也是请 ...
- 重定向与请求转发的具体讲解
本篇供个人学习使用,有问题欢迎讨论 多个Servlet来处理同一次请求方案 一.前提 1.一个 servlet 只负责实现一个功能 2.浏览器在一次请求时,只能请求一个资源文件 3.如果浏览器的请求需 ...
- 3.相应重定向与请求转发的比较
响应重定向与请求转发类似,但有下面的区别: (1)RequestDispatcher对象是一个Web资源的包装器,可以用来把当前请求转发到该资源.这种转发是服务器端控制权的转向,客户端发来的请求将交由 ...
- java | (二十五)Servlet(1)req,resp,重定向,请求转发,数据共享
今天(2021.9.24)开始学习一些有难度的知识了,如题 先安装和配置好Tomcat,具体下载和idea的配置可以参考 目录 开发步骤 Servlet对象生命周期 httpServletRespon ...
最新文章
- Git学习教程(六)Git日志
- JS DOM 对象
- ubuntu下安装chromium及其pepperflash
- 竞赛准备篇---(一)抽签问题
- rust为什么显示不了国服_Rust编程语言初探
- 0网卡开启_中标麒麟Linux v7系统下设置双网卡bond或team绑定详细过程
- Linux /proc目录详解
- T-SQL(SQL Sever) 简单语句实例
- 救命!!连接Oracle问题,在线等!
- ppt使用记录之添加带圈的20以内的数字编号
- codeforces 123D. String(后缀数组+单调栈,好题)
- servlet中使用db4o
- FDDB评估工具使用
- 基于stc15f2k60s2芯片单片机编程(计算器,不完美)
- css代码 文字超出点点点
- window10安装kubectl工具及配置config信息
- AI绘画怎么生成?这些软件帮助你实现
- 【人工智能毕设之基于Python+flask+bilstm的评论情感分析系统-哔哩哔哩】 https://b23.tv/QU56eTl
- 使用linux 中的 tree 指定显示深度,显示文件目录结构
- android7 强制gpu渲染,安卓手机开启强制GPU渲染功能的方法