sendRedirect()和forward()方法的区别
sendRedirect()和forward()方法的区别
之前好像曾经整理过,但忘了放在哪里了,好像压根就没整理过,博客里也没有,故今天重新整理一下。
我们知道页面之间的跳转有两种方式:重定向与转发。
跳转:顾名思义,就是页面跳转。
虽然二者都可以实现获取相应的url资源,但首先要注意的是,重定向由sendRedirect来实现,请求转发由forward来实现。
在跳转范围上forward方法只能重定向到同一个web应用程序中的一个资源,仅仅局限在同一个服务器内;而sendRedirect方法不仅可以在位于同一主机上的不同web应用程序之间进行重定向,而且可以将客户端重定向到其它服务器上的web应用程序资源。
先给出sendRedirect方法的工作原理图:

描述一下上图的过程:浏览器先向servlet1发送一次request请求,servlet1让servlet2为客户端服务,servlet1调用sendRedirect方法,将客户端的request请求重定向到servlet2(告诉浏览器servlet2的位置,让浏览器重新访问servlet2,这样就会发现地址栏会发生相应变化,这也是和forward的一个重要区别)。最后servlet2对请求做出响应。上图中产生了两次请求。
下面再给出forward方法的工作原理图:

描述一下上图的过程:浏览器先向servlet1发送请求,servlet1让servlet2为客户端服务,servlet1调用forward方法,将客户端的请求转发给servlet2处理(这里浏览器地址栏是不会变化的,因为没告诉浏览器),servlet2对请求做出响应。
对重定向和请求转发的使用分别举个实例,如下:
//重定向到index.jsp页面
response.sendRedirect("/ServletStudy/index.jsp");
//如果你不想写前面的项目名,可以写成下面这样
response.sendRedirect(request.getContextPath() + "/index.jsp");
//获取到requestDispatcher对象,跳转到index.jsp
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/index.jsp");
//调用requestDispatcher对象的forward实现转发,传入request和response方法
requestDispatcher.forward(request,response);
把上面这些话用一个表格表示,如下:
| 区别 | forward | sendRedirect |
|---|---|---|
| 是否可转向本web应用之外的页面或网站 | 否 | 是 |
| 实际发生位置 | 服务端 | 客户端 |
| 用法 | request.getRequestDispatcher("/资源名").forward(request,response)(注意:转发时"/"代表的是本应用程序的根目录,比如"/web应用名") |
response.sendRedirect("/web应用/资源名") (重定向时"/"代表的是webapps目录,这个目录在tomcat那个目录下) |
| 传送数据的类型 | 转发的request对象可以传递各种类型的数据,包括对象 | 重定向只能传递字符串,就是在路径后面加 |
| 跳转时间 | 转发时:执行到跳转语句后就会立即跳转 | 重定向:整个页面执行完成后才执行跳转,也就是说其后的代码有执行机会 |
| 在跳转前request对象setAttribute();的值是否会丢失 | 不会 | 会 |
| 转向速度 | 快 | 慢 |
| 地址栏 | 不变 | 变 |
| 应用场景 | 访问Servlet处理业务逻辑,然后forward到jsp显示处理结果 | 提交表单,处理成功后redirect到另一个jsp,防止表单重复提交 |
sendRedirect()和forward()方法的区别的更多相关文章
- java 中sendredirect()和forward()方法的区别
一.文章1 HttpServletResponse.sendRedirect与RequestDispatcher.forward方法都可以实现获取相应URL资源. sendRedirect实现请求重 ...
- (转发)RequestDispatcher的include()方法和forward()方法的区别
forward(): 该方法用于将请求从一个Servlet传递给服务器上的另外的Servlet.JSP页面或者是HTML文件. 在Servlet中,可以对请求做一个初步的处理,然后调用这个方法,将请求 ...
- 【javaWeb】sendRedirect和forward原理及区别总结
一.原理. 1. Forward 该图的交互过程如下: ① 浏览器访问Servlet1. ② Servlet1想让Servlet2对客户端的请求进行响应,于是调用forward()方法 ...
- sendRedirect()和forward()方法有什么区别?
forward是服务器内部的跳转,浏览器的地址栏不会发生变化,同时可以把request和response传递给后一个请求.sendRedirect()是浏览器方面的跳转,要发送两次请求,地址栏也会发生 ...
- HttpServlet RequestDispatcher sendredirect和forward
Servlet的框架是由两个Java包组成:javax.servlet和javax.servlet.http. 在javax.servlet包中定义了所有的Servlet类都必须实现或扩展的的通用接口 ...
- RequestDispatcher.forward() 方法和HttpServletResponse.sendRedirect()方法的区别
RequestDispatcher.forward() 方法和HttpServletResponse.sendRedirect()方法的区别 先贴一段代码 public void logon(Http ...
- esponse.sendRedirect方式的转向与RequestDispatcher的forward方法的比较
esponse.sendRedirect方式的转向与RequestDispatcher的forward方法的比较 JavaWeb开发中,采用MVC模式的时候,在控制器完成模型的调用之后会选择界面对用户 ...
- sendRedirect和forward区别
参考来源:http://www.educity.cn/develop/158970.html 12.6.4 sendRedirect()和forward()方法的区别 HttpServletResp ...
- sendredirect()和forward()的区别 (转)
sendRedirect() 和forward()的区别 HttpServletResponse.sendRedirect与RequestDispatcher.forward方法都可以实现获取相应UR ...
随机推荐
- Java学习的一般过程
伴随着科学技术的不断发展,世界开始走向信息化.网络化.大数据化.自然而然,计算机专业变得十分热门.尽管如此,计算机专业人才对社会来说仍然是供不应求,当然,这里指的是高层次技术人才.因此,对于我们这些占 ...
- iOS-PCH File的快速导入方法和使用
PCH的文件的用途: 在实际的项目开发中,如果很多地方都在使用某个类的头文件,很多地方都在使用同一个”宏”的时候:很多地方用到了NSLog()函数, 在app发布的时候,想清除掉时,此时就需 ...
- 源码分析(4)-ConcurrentHashMap(JDK1.8)
一.UML类图 ConcurrentHashMap键值不能为null:底层数据结构是数组+链表/红黑二叉树:采用CAS(比较并交换)和synchronized来保证并发安全. CAS文章:https: ...
- vscode 修改标签栏样式为换行全部展示
目前vscode的标签栏是滚动式的,选择查看都不是很方便,于是想要搞成andriod studio那种换行全部展示的标签栏. 因为vscode是electron写的,因此修改css就可以实现. 修改方 ...
- vue2.0 + element ui 实现表格穿梭框
element ui 官网里介绍了穿梭框(Transfer),但在实际使用过程中,会出现一些问题: 1.穿梭框里能放置的内容太少,不能满足复杂的业务需求. 2.当选项过多时,穿梭框很难实现分页,左右两 ...
- Android官方新推的DI库 Hilt
Android官方新推的DI库 Hilt Hilt是Google Android官方新推荐的依赖注入工具. 已加入到官方文档: Dependency injection with Hilt. 目前是a ...
- 2020阿里最新出品的泰山版Java开发手册,告别垃圾代码
说起华山,我就想起岳不群,不,令狐冲:说起泰山,我就想起司马迁,他的那句名言"人总有一死,或重于泰山,或轻于鸿毛",真的发人深省啊.这就意味着,阿里出品的泰山版 Java 开发手册 ...
- Water Testing【皮克定理,多边形面积,线段上点的数目】
Water Testing 传送门:链接 来源:UPC 9656 题目描述 You just bought a large piece of agricultural land, but you n ...
- SQL2008R2安装碰到问题的解决方法(iso文件用对应的工具)
SQL2008R2安装碰到问题的解决方法 安装谁不会啊,这么简单,是啊,可是匹配包时就不是那么顺利啊.就像以前的Ruby还专挑匹配版本的包一样,不像现在的Py自动为我们找,这是Mar 7贴在Q ...
- 消息队列——Kafka基本使用及原理分析
文章目录 一.什么是Kafka 二.Kafka的基本使用 1. 单机环境搭建及命令行的基本使用 2. 集群搭建 3. Java API的基本使用 三.Kafka原理浅析 1. topic和partit ...