页面跳转的两种方式(转发和重定向)区别详解:

article/2025/11/5 16:03:40

转发和重定向的路径问题(重点)

1)使用相对路径在重定向和转发中没有区别
2)重定向和请求转发使用绝对路径时,根/路径代表了不同含义
重定向response.sendRedirect(“xxx”)是服务器向客户端发送一个请求头信息,由客户端再请求一次服务器。**/指的Tomcat的根目录,写绝对路径应该写成"/当前Web程序根名称/资源名" 。**如"/WebModule/login.jsp","/bbs/servlet/LoginServlet"
**转发是在服务器内部进行的,写绝对路径/开头指的是当前的Web应用程序。**绝对路径写法就是"/login.jsp"或"/servlet/LoginServlet"。

总结:以上要注意是区分是从服务器外的请求,还在是内部转发,从服务器外的请求,从Tomcat根写起(就是要包括当前Web的根);是服务器内部的转发,很简单了,因为在当前服务器内,/写起指的就是当前Web的根目录。

页面跳转的两种方式(转发和重定向)区别详解:

转载自一个很详细的博主

在使用servlet/jsp的时候,我们必须要知道实现页面跳转的两种方式的区别和联系:即转发和重定向的区别。

举个例子:HttpServletResponse.sendRedirect方法对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的 访问请求,这个过程好比有个绰号叫“浏览器”的人写信找张三借钱,张三回信说没有钱,让“浏览器”去找李四借,并将李四现在的通信地址告诉给了“浏览器”。于是,“浏览器”又按张三提供通信地址给李四写信借钱,李四收到信后就把钱汇给了“浏览器”。可见,“浏览器”一共发出了两封信和收到了两次回复, “浏览器”也知道他借到的钱出自李四之手。RequestDispatcher.forward方法在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。这个过程好比绰号叫“浏览器”的人写信找张三借钱,张三没有钱,于是张三找李四借了一些钱,甚至还可以加上自己的一些钱,然后再将这些钱汇给了“浏览器”。可见,“浏览器”只发 出了一封信和收到了一次回复,他只知道从张三那里借到了钱,并不知道有一部分钱出自李四之手。

两种跳转获得对象的方式

//获得转发对象getRequestDispatcher()
HttpServletRequest(httpServletRequest).getRequestDispatcher
ServletContext.getRequestDispatcher();//获得重定向对象sendRedirect()
HttpServletResponse(httpServletResponse).sendRedirect();

转发和跳转的小结

1. 转发时使用相对路径,重定向时即可使用相对路径也可使用绝对路径

2. 转发使用的是getRequestDispatcher()方法;重定向使用的是sendRedirect();

3. 转发:浏览器URL的地址栏不变。重定向:浏览器URL的地址栏改变;

4. 转发是服务器行为,重定向是客户端行为;

5. 转发是浏览器只做了一次访问请求。重定向是浏览器做了至少两次的访问请求;

转发和重定向的选择

  1、重定向的速度比转发慢,因为浏览器还得发出一个新的请求,如果在使用转发和重定向都无所谓的时候建议使用转发。2、因为转发只能访问当前WEB的应用程序,所以不同WEB应用程序之间的访问,特别是要访问到另外一个WEB站点上的资源的情况,这个时候就只能使用重定向了。

转发和重定向的应用场景

在上面我已经提到了,转发是要比重定向快,因为重定向需要经过客户端,而转发没有。有时候,采用重定向会更好,若需要重定向到另外一个外部网站,则无法使用转发。另外,重定向还有一个应用场景:避免在用户重新加载页面时两次调用相同的动作。

   例如,当提交产品表单的时候,执行保存的方法将会被调用,并执行相应的动作;这在一个真实的应用程序中,很有可能将表单中的所有产品信息加入到数据库中。但是如果在提交表单后,重新加载页面,执行保存的方法就很有可能再次被调用。同样的产品信息就将可能再次被添加,为了避免这种情况,提交表单后,你可以将用户重定向到一个不同的页面,这样的话,这个网页任意重新加载都没有副作用;

在这里插入图片描述


http://chatgpt.dhexx.cn/article/GraJyFqX.shtml

相关文章

go语言web开发系列之八:gin框架中用go-redis缓存数据

一,安装需要用到的库 1,安装go-redis liuhongdiku:~$ go get -u github.com/go-redis/redis 说明:刘宏缔的go森林是一个专注golang的博客, 网站:https://blog.imgtouch.com 原文: go语言web开发系列之八:gin框架中用go-redis缓…

go语言web开发系列之二十一:用go-qrcode库生成二维码

一,安装用到的库 1,go-qrcode库的地址 GitHub - skip2/go-qrcode: :sparkles: QR Code encoder (Go) 2,安装go-qrcode库 liuhongdiku:~$ go get -u github.com/skip2/go-qrcode/... 3,resize库的地址(在二维码中间放icon时太大时需要缩放…

go语言web开发出错

2019独角兽企业重金招聘Python工程师标准>>> err listen tcp :8080: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted. 原因:开了两个服务器,造成监听端口冲突 转载于:https://my.osc…

go语言有哪些web框架

前言 由于工作需要,这些年来也接触了不少的开发框架,Golang的开发框架比较多,不过基本都是Web”框架”为主。这里稍微打了个引号,因为大部分”框架”从设计和功能定位上来讲,充其量都只能算是一个组件,需要…

go语言服务器代码,Go语言开发简单web服务器

欢迎,来自IP地址为:182.103.254.107 的朋友 Go语言由于其方便的并发通信机制以及强大的网络支持,常常被用于服务器软件的开发。本文将示例使用Go语言来开发简单的Web服务器。 HTTP协议是应用层协议,协议模型位于TCP之上&#xff0…

Go语言WEB开发[html/template包]

Go语言Web开发 Go语言提供了html/template包来支持模板渲染。Go提供的html/template包对HTML模板提供了丰富的模板语言,主要用于Web应用程序。 模板中的变量 模板中的变量通过{{.}} 来访问。 {{.}} 称为管道和root。 在模板文件内,{{.}}代表当前变量&…

Go语言web开发

一. HTTP Http:无状态协议,是互联网中使用Http实现计算机和计算机之间的请求和响应 Http使用纯文本方式发送和接收协议数据,不需要借助专门工具进行分析就可以知道协议中数据 Http报文(message)组成部分 请求行(request-line)请求头(head)请求体(body)响应头响应体 HTTP 1.1 实…

Go进阶:Go语言最热门的开源Web开发框架总结

注意:后续技术分享,第一时间更新,以及更多更及时的技术资讯和学习技术资料,将在公众号CTO Plus发布,请关注公众号:CTO Plus Go语言是近年来备受关注的一种编程语言,它以其高效、安全、简洁的特…

Go语言五大主流web框架

以下 star数截止2023年7月份 1.Gin(69.7K) 项目简介:Gin 是一个用 Go (Golang) 编写的 HTTP Web 框架。 它具有类似 Martini 的 API,但性能比 Martini 快 40 倍。 仓库地址:https://github.com/gin-gonic/ginhttps:…

Go语言web开发入门

创建两个文件main.go 和hello.txt main.go package mainimport ("fmt""io/ioutil""net/http" )func sayHello(w http.ResponseWriter, r *http.Request) {b, _ : ioutil.ReadFile("D:/桌面/goprojects/gin框架快速入门/gin框架与Go语言模…

GO 语言 Web 开发实战一

xdm,咱今天分享一个 golang web 实战的 demo go 的 http 包,以前都有或多或多的提到一些,也有一些笔记在我们的历史文章中,今天来一个简单的实战 HTTP 编程 Get 先来一个 小例子,简单的写一个 Get 请求 拿句柄 设置…

goweb开发实战笔记(一)

目录 🧡Gin简介 🧡Gin特性 🧡Gin环境搭建 🧡HTTP请求和参数解析 创建Engine Handle方法处理 Engine分类处理 表单实体绑定 ShouldBindQuery ShouldBind JSON 多数据格式返回请求结果 []byte切片 string JSON HTML…

golang学习之go web 开发

文章目录 一、hello world二、请求处理1、url参数处理2、form参数处理3、header参数处理 三、响应处理1、ResponseWriter 四、cookie五、session实现1、session id2、session的存储3、session过期4、实现代码1、session 操作代码2、web服务3、登录页面4、session数据展示页面 一…

FlexSlider图片轮播切换jQuery插件

下载地址 flexSlider是一款强大的图片轮播插件。参数说明animation: "slide", // String: ["fade"|"slide"],动画效果easing: "swing", // String: 滚动动画计时函数direction: "horizonta…

jQuery FlexSlider插件一些使用上的小tips

最近做的一个需求,用到了jQuery FlexSlider这个插件,本以为一个算是已经比较成熟的插件,用起来应该没什么难度,然而真正用起来才发现,其实还是有些坑的,不过好在这个插件源代码写的比较好,比较好…

jquery.flexslider-min.js实现banner轮播图效果

查看演示 立即下载 插件描述&#xff1a; jquery图片轮播插件仿支付宝2013版全屏图片幻灯片淡出淡进切换效果 实现方法 引用jquery和flexslider.js到你的页面 <script type"text/javascript" src"js/jquery-1.7.2.min.js"></script> <sc…

Vue+Element-ui实例_使用flexslider插件设计横向时间线

下面是做了一个类似时间线(history事件线)的页面&#xff0c;主要是记录一下log&#xff0c;或者history的操作记录。 主要难点&#xff1a; &#xff08;1&#xff09;一般的插件时间线例如(elementUI中的el-timeline)就是纵向的时间线&#xff0c;如果数据过多的话&#xf…

flexSlider 图片轮播插件的使用(附参数设置)

前提&#xff1a;下载插件&#xff08;官网下载地址&#xff1a;http://flexslider.woothemes.com/ 请用IE打开&#xff0c;chrome可能打不开&#xff1b;其他下载地址&#xff1a;点击打开链接&#xff09;&#xff0c;并引入flexslider.css和jquery.flexslider-min.js文件(缺…

flex

水平垂直居中也算是 CSS 领域最为常见的一个问题了&#xff0c;不同场景下的方法也各不相同&#xff0c;各有优劣。嗯&#xff0c;下面这种应该算是最便捷的了&#xff1a; <div class"g-container"><div class"g-box"></div> </div…

轮播插件——flexslider

轮播插件——flexslider, 首先&#xff0c;当我们需要轮播插件的时候呢&#xff0c;去浏览器中找自己需要的轮播插件&#xff0c;比如&#xff0c;搜索关键词“JQuery轮播插件”&#xff0c;就会出来很多网站&#xff0c;选一个点进去&#xff0c;预览效果&#xff0c;然后下载…