请求转发:

request.getRequestDispatcher().forward();

重定向:

response.sendRedirect();

例如:

请求转发:

request.getRequestDispatcher("/student_list.jsp").forward(request,response);

重定向:

response.sendRedirect(request.getContextPath + "/student_list.jsp")

转发过程:客户端首先发送一个请求到服务器,服务器匹配Servlet,并指定执行。当这个Servlet执行完后,它要调用getRequestDispacther()方法,把请求转发给指定的student_list.jsp,整个流程都是在服务端完成的,而且是在同一个请求里面完成的,因此Servlet和jsp共享同一个request,在Servlet里面放的所有东西,在student_list.jsp中都能取出来。因此,student_list.jsp能把结果getAttribute()出来,getAttribute()出来后执行完把结果返回给客户端,整个过程是一个请求,一个响应。

重定向过程:客户端发送一个请求到服务器端,服务器匹配Servlet,这都和请求转发一样。Servlet处理完之后调用了sendRedirect()这个方法,这个方法是response方法。所以,当这个Servlet处理完后,看到response.sendRedirect()方法,立即向客户端返回个响应,响应行告诉客户端你必须再重新发送一个请求,去访问student_list.jsp,紧接着客户端收到这个请求后,立刻发出一个新的请求,去请求student_list.jsp,在这两个请求互不干扰、相互独立,在前面request里面setAttribute()的任何东西,在后面的request里面都获得不了。因此,在sendRedirect()里面是两个请求,两个响应。

Forward是在服务器端的跳转,就是客户端一个请求给服务器,服务器直接将请求相关参数的信息原封不动的传递到该服务器的其他jsp或Servlet去处理。而sendRedirect()是客户端的跳转,服务器会返回客户端一个响应报头和新的URL地址,原来的参数信息如果服务器没有特殊处理就不存在了,浏览器会访问新的URL所指向的Servlet或jsp,这可能不是原来服务器上的webService了。

总结:

1、转发是在服务器端完成的,重定向是在客户端发生的;

2、转发的速度快,重定向速度慢;

3、转发是同一次请求,重定向是两次请求;

4、转发地址栏没有变化,重定向地址栏有变化;

5、转发必须是在同一台服务器下完成,重定向可以在不同的服务器下完成。

补充:

原文链接:https://blog.csdn.net/fighting_sxw/article/details/79302512

一、请求转发和请求重定向的区别

请求转发和请求重定向又分别称为服务器跳转和客户端跳转

1.1、组件之间可否共享信息不同(本质区别)

当客户端向服务器发送请求时,服务器收到请求后,会将请求封装成一个HttpServletRequest对象request,并且所有的请求参数都封装在request对象中,这个对象时Jsp的内置对象可以直接在Jsp中使用。服务器收到请求后,还需要请求别的页面,这是就有两种方式:请求转发和请求重定向。

所谓请求转发,是服务器的行为,请求由服务器转发给另外一个页面处理,如何转发,何时转发,转发几次,客户端是不知道的。请求转发时,从发送第一次到最后一次请求的过程中,web容器只创建一次request和response对象,新的页面继续处理同一个请求。也可以理解为服务器将request对象在页面之间传递。

所谓请求重定向,是客户端的行为,每次请求重定向都是由客户端发起的,也就是说重定向一次,就刷新request对象的属性,之前的request对象的属性值就失效了。

1.2、浏览器地址栏显示不同(表面区别)

请求转发之后地址栏的信息并不会有任何的改变。

请求重定向之后地址栏是会改变的,变为跳转之后的页面地址。

二、Java实现

2.1 Java中的请求转发(服务器跳转)

执行到跳转语句时就会立刻进行跳转

Java代码:

1 request.getRequestDispatcher("success.jsp").forward(request,response);

在jsp页面中你也会看到通过下面的方式实现转发:

1

2.2 Java中的请求重定向(客户端跳转)

response.sendRedirect("apage.jsp");  不能传递request 范围的属性 ,但是可以通过地址重写的方式向跳转页传递参数,因为该方法执行完之后就相当于一次http request 的结束,这是服务器会向客户端发送302 状态码和新的url ,告诉客户端重新发送request 请求到新的url ,然后客户端照此执行,执行即新的请求响应流程开始,服务器再重新创建HttpServletRequest 对象和HttpServletResponse 对象,此时两个请求已经不在一个线程了,所以request 和response 对象都不是开始的那个了;

response.setHeader("refresh","2;URL=index.jsp")  2 秒后跳转到其他页面;

百度  超链接

表单提交

三、路径问题

转发和重定向的URLString前有加 / 为绝对路径 反之为相对路径

3.1绝对路径

1、重定向的 / 表示:http://服务器ip:端口/

1 response.sendRedirect("/Manager/index.jsp")

生成的地址:web服务器本身地址+参数生成完整的URL 即:http://localhost:8080/Manager/index.jsp

2、请求转发的 / 表示:http://服务器ip:端口/项目名

1 request.getRequestDispatcher("/index.jsp").forward(request, response);

生成的地址:http://localhost:8080/项目名/index.jsp

重定向是浏览器发来的,只知道发到某个服务器,但是不知道发到服务器的哪个project,所以需要自己用代码声明; 而请求转发是服务器某个project内部的转发,转来转去都是在某个project内部,所以不需要手动声明项目名。

3.2 相对路径

假设通过表单请求指定的Url资源 action="LoginServlet"

则表单生成的请求地址为:http://localhost:8080/项目名/LoginServlet

请求重定向: response.sendRedirect("Manager/index.jsp") 生成相对路径:http://localhost:8080/项目名/Manager/index.jsp

请求转发:相对路径情况下生成的完整URL与重定向方法相同。

java通过不同请求转发不同端口_java重定向与请求转发的区别相关推荐

  1. java 重定向端口_java – 重定向到另一个端口,保留所有其余的端口

    开箱即用的重写处理程序 我快速浏览了Jetty开箱即用的重写处理程序.从我可以从文档/示例中收集到的内容,它们似乎只在URL的路径部分进行实际重写(即端口之后的所有内容,而不是我们想要的内容)(如果我 ...

  2. Java后端带参跨域访问_java后端解决请求跨域

    跨域 跨域:指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制. 例如:a页面想获取b页面资源,如果a.b页面的协议.域名.端口.子域名不同 ...

  3. java如何开启远程调试服务端口_Java远程调试

    远程项目报错,但是通过日志等手段没法定位问题,只能提供远程调试的方式定位问题. 1. 步骤 1.1 启动调试端口 业务有自己的端口,而为了能够调试业务,需要另外开启一个端口用于调试. 在java虚拟机 ...

  4. java 抽象类与接口区别是什么_JAVA中抽象类与接口的区别,分别在什么情况下使用它们...

    在网上看到很多人问关于"抽象类与接口的区别",因此本人想通过自己多年对JAVA开发的经验来总结一下抽象类与接口的区别以及分别在什么情况下使用它们. 在Java语言中, abstra ...

  5. java的包装类型是什么用_Java基本类型和包装类型的区别

    包装类型可以为 null,而基本类型不可以 别小看这一点区别,它使得包装类型可以应用于 POJO 中,而基本类型则不行. POJO 是什么呢?这里稍微说明一下. POJO 的英文全称是 Plain O ...

  6. java接口和抽象类区别是什么_Java接口和抽象类有什么区别

    接口(interface)和抽象类(abstract class)是支持抽象类定义的两种机制. 接口是公开的,不能有私有的方法或变量,接口中的所有方法都没有方法体,通过关键字interface实现. ...

  7. 请求转发和重定向的区别_WEB之重定向和请求转发的区别

    一次重定向的过程 我的代码里面已经写好了,redirectAndFoward.jsp页面上有一个表单,表单重定向到redirectAndFowardTarget.jsp,那么这一次的重定向过程为: 1 ...

  8. java | (二十五)Servlet(1)req,resp,重定向,请求转发,数据共享

    今天(2021.9.24)开始学习一些有难度的知识了,如题 先安装和配置好Tomcat,具体下载和idea的配置可以参考 目录 开发步骤 Servlet对象生命周期 httpServletRespon ...

  9. java 请求响应_java http接口请求响应 request response

    接口类: 1 package org.sunshine.dcda.epg.wechat.controller.niao; 2 3 import javax.servlet.http.HttpServl ...

最新文章

  1. .NET base与this
  2. 计算机网络---物理层
  3. Python中的 List
  4. Logback的配置说明
  5. 计算机组成原理—Cache主存块中的替换算法
  6. java map 为空_java中如何判断map是否为空
  7. 30岁了还可以学java吗_30岁还能零基础学Java吗?
  8. c# Process监控进程 与 ManagementEventWatcher 监控进程
  9. sim7600ce 拨号上网测试_SIM7600CE TCP/IP连接与PPP拨号上网 4G上网
  10. SLF4J(六) - MDC/MDCAdapter是什么?
  11. 图像的几种变换简单介绍
  12. 全双工通信的 WebSocket
  13. 华为无线基于黑白名单认证上网
  14. JZOJ 3.10 1541——书架
  15. 无盘服务器chkdsk * f)修复命令,我有文件损坏了,运行CHKDSK后根本没用,怎么处理...
  16. Win8系统的运行哪里找?
  17. python hack-requests_python全自动无人值守爬取某网站妹子图集
  18. ndows 7(sp1,Windows 7 SP1 正式版(含中文)急速下载!
  19. C# Unity 访问桌面路径
  20. 《风火之旅》做金牌“推荐人”,得现金

热门文章

  1. 如何学好web前端开发,web前端自学
  2. RationalDMIS 2020箱体类零件建立坐标系的基本原则
  3. Redis应用——使用消息队列发布微博
  4. 《你究竟有多想成功》
  5. “不雅小视频”,小心是你演的...
  6. MacOS InteliJ IDEA配置Git
  7. AMD处理器安装CentOS 64的注意事项
  8. JDK12 环境配置简单详细教程
  9. 华为Mate40Pro+什么时候上市
  10. 常见软件的Scheme