网页服务器跳转页面跳转,页面的跳转:请求转发和重定向

本文详细解析了网页服务器的请求转发与重定向的原理和区别。请求转发在服务器内部完成,数据共享使用request对象,效率较高,地址栏不变化;重定向涉及两次请求,数据共享需借助session,效率较低,地址栏显示新URL。根据需求,如避免表单重复提交,常选择重定向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、重定向和请求转发的概念

以C/S模式为例:

请求转发:

request.getRequestDispatcher(URL).forward(request, response);

1.客户端发送请求数据给服务器

2.服务器接收请求数据并调用第一个servlet处理逻辑

3.第一个servlet处理数据结束后将数据传递给下一个servlet

4.第二个servlet处理完数据后调用forward()方法将处理结果返回给客户端。

请求转发的特点:客户端发送一次请求,请求数据流转多个servlet(一次请求,多个servlet联动),地址栏中只会出现第一次跳转的地址。

请求转发从发送请求中就已经准备好进行数据流转了即流转数据存在于HTTP请求报头中。

重定向:

response.sendRedirect(URL);

1.客户端发送请求数据给服务器

2.服务器接收请求数据并调用servlet处理逻辑

3.服务器调用sendRedirect()方法将处理结果放进HTTP响应报头中返回给客户端

4.客户端收到响应结果后再次发送请求数据给服务器,重复上述过程。

重定向的特点:客户端会多次发送请求给服务器。

重定向在向客户端返回处理结果时才决定让客户端再一次发送一次请求。

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

共同点:两种方式都可以实现浏览器页面的跳转

不同点:

1、数据共享问题

请求转发的数据处理是在一次请求中,使用request对象可以实现数据共享。

重定向是两次向客户端发送请求,想要让两次请求数据共享必须使用session对象。

2、效率问题

请求转发的效率高于重定向。这是因为请求转发是在服务器中跳转页面,而重定向需要重新再发送请求给服务器调用新的servlet来完成跳转页面。

3、页面跳转意图所在之处问题

两者都是在servlet处理数据结束后开始跳转页面的。请求转发和重定向两者的根本区别是由于RequestDispatcher().forward()方法和sendRedirect()方法的不同导致的,前者属于HttpServletRequest的方法,属于请求中的方法;后者属于HttpServletResponse的方法,属于响应的方法,所以请求转发在发送请求时就要求联动servlet,而重定向是在准备返回处理结果时要求再一次重发请求。

三、请求转发和重定向的使用时机

首先要明确,请求转发在每次刷新时会重新向服务器发送请求,每刷新一次,就重新发送一次请求。

1、对于表单数据,在表单数据需要修改时往往不能重复提交,此时需要重定向(刷新会导致数据源提交出现问题)。

2、判断请求数据能否在一次请求中被处理或者判断请求数据要放到request对象中还是session中,根据数据的生存期来判断以何种方式进行页面跳转。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值