使用页面转发跳转页面的弊端及解决方式

页面跳转是开发一个web应用经常会发生的事情。比如登录,登录成功后页面跳转到一个新的页面,失败后则返回原页面。但在跳转时使用的跳转方式不同,带来的效果也会有所不同,而在某些页面使用不合适的跳转方式往往会带来一些弊端。如在登录时使用页面转发的方式来进行页面的跳转。
在使用 getRequestDispatcher 即页面转发跳转页面时,只要页面存在用于提交的表单数据在提交完成后无论是刷新都会遇到表单重复提交的情况。如登录时需要提交验证的账号和密码,在验证完成后无论在是登录成功还是登录失败在跳转到新的页面时,如果在该页面刷新都会提示表单重复提交。即如下的情况
在这里插入图片描述

出现这样的情况是由页面转发的特点造成的,页面转发具有以下的特点:

  1. 地址栏不发生变化,显示的是上一个页面的地址 2. 请求次数只有1次 3. 根目录:http://localhost:8080/项目地址/,包含了项目的访问地址 4. 请求域中数据不会丢失。从上可知页面转发的请求次数只有一次且请求域的数据不会丢失,也就是说如果使用页面转发来进行页面跳转即使是跳转到新页面后他的请求都还存在且因为请求域中还存在用于提交的表单的数据,如果这时进行页面的刷新,因为地址栏没有发生变化,所以服务器会认为你想继续提交该表单的内容,但由于上一次的提交还存在所以浏览器会出现重复请求的提示。而且在登录时如果账号密码错误了,在转发会原页面时在浏览器刷新原页面,每刷新一次表单都会带着上一次的数据去请求服务器。会造成一直出现账号信息错误的提示。
    在这里插入图片描述

解决问题的办法有很多,目前只知道两种,一种是使用 sendRedirect即页面的重定向来进行页面的跳转,但是使用这种方法会造成请求域中的数据丢失且因为是由浏览器进行的跳转在跳转页面前如果加上提示只能使用浏览器自带的提示框,但是使用浏览器自带的提示框会先跳到一个空白的页面(这空白的页面是Servlet处理数据的页面既是表单提交的路径的页面因为没有设置样式所以为空白)再出现提示,出现这样的情况是因为页面转发的请求次数是两次,第一次先跳到表单提交的路径的页面,在数据验证完成后在请求一次进行页面的跳转。跳转情况如下:
在这里插入图片描述

先跳包空白页面出现提示,待提示确认后在跳回原页面。
在这里插入图片描述

使用重定向虽然可以解决表单的重复提交,但页面会进行两次的跳转体验感不好,所以需要用到另一种方法。
另一种方法是使用ajax请求(即异步提交,ajax为Jquery中异步提交方法的一种)的方式提交表单的数据。使用异步提交可以只把需要传递的参数传递到Servlet页面让它在服务器进行验证等的操作完成验证后在返回结果给浏览器,然后浏览器根据返回的数据执行相应的回调。如下图

在这里插入图片描述
在这里插入图片描述

(由于设置Servlet返回的数据类型为Json,所以在使用前需要先导入Json的六个包)
在这里插入图片描述

使用这种方法可以是页面正常返回提示到登录页面且返回提示时不会像重定向一样会跳到空白页面再返回提示而且返回的提示的样式也可以自由选择,也不会像页面转发一样即使数据验证不通过返回原页面在原页面刷新时也不会出现表单重复提交的提示所以在提交表单时可以就推荐使用异步提交的方式提交表单。

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值