请教,转发和重定向,到底什么时候用哪个?

上划线 2015-05-31 04:20:44
访问http://localhost:8080/提交表单以后,servlet进行转发,url就变成了http://localhost:8080/login.do,如果刷新页面,就会弹出这个窗口。请教了别人说这是正常的。

我的问题是,提交一个用户名、密码,如果错误就返回登陆界面并加上提示信息。如果用转发,可以直接用request、response。如果用重定向就只能用session吗?用哪个更好一些。
如果用转发每次刷新都会弹出这个窗口,我好像没见过哪个网站会弹出这个东西。
...全文
18619 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mr丶Blue 2017-11-04
  • 打赏
  • 举报
回复 1
引用 3 楼 uk8692 的回复:
做增、删、改的时候最好用重定向,因为如果不用重定向,每次刷新页面就相当于再请求一次,就可能会做额外的操作,导致数据不对。你可以看一下这个博客:http://blog.csdn.net/uk8692/article/details/12865571
正解!
Mr_liyucrazy 2017-10-13
  • 打赏
  • 举报
回复 1
重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程。 与之相反,重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求。因为,当你使用重定向时,浏览器中所显示的URL会变成新页面的URL, 而当使用转发时,该URL会保持不变。重定向的速度比转发慢,因为浏览器还得发出一个新的请求。同时,由于重定向方式产生了一个新的请求,所以经过一次重 定向后,request内的对象将无法使用。 怎么选择是重定向还是转发呢?通常情况下转发更快,而且能保持request内的对象,所以他是第一选择。但是由于在转发之后,浏览器中URL仍然指向开始页面,此时如果重载当前页面,开始页面将会被重新调用。如果你不想看到这样的情况,则选择转发。
SgtDaJim 2015-06-02
  • 打赏
  • 举报
回复
想要传递request就用forward.如果用了重定向,就不再是同一个request了。由于窗口没有关闭,所以session还是同一个,可以继续使用。
finemi 2015-06-01
  • 打赏
  • 举报
回复
这个问题很正常,你有个理解误区,不是说servlet转发后url才变成xxxx.do,而是当你点表单提交时,改变的地址。转发是不会改变地址的,只是服务器内部的类方法调用而已。 回到你的问题,当用户登录错误时,一般会回到登录页并提示信息,这个时候用转发问题不大且方便效率高,但是暴露了提交地址不太友好。 当登录成功后,一般来说会直接跳转到首页或之前浏览的网站,这个时候用重定向就可以了,因为你不要添加什么提示信息。 至于转发的地址问题,一般来说对于登录、注册,现在网站都是用的ajax提交,则不会存在这些问题了
上划线 2015-06-01
  • 打赏
  • 举报
回复
引用 4 楼 finemi的回复:
这个问题很正常,你有个理解误区,不是说servlet转发后url才变成xxxx.do,而是当你点表单提交时,改变的地址。转发是不会改变地址的,只是服务器内部的类方法调用而已。 回到你的问题,当用户登录错误时,一般会回到登录页并提示信息,这个时候用转发问题不大且方便效率高,但是暴露了提交地址不太友好。 当登录成功后,一般来说会直接跳转到首页或之前浏览的网站,这个时候用重定向就可以了,因为你不要添加什么提示信息。 至于转发的地址问题,一般来说对于登录、注册,现在网站都是用的ajax提交,则不会存在这些问题了
意思是没有ajax的情况下要想不暴露提交地址,就得用重定向?
finemi 2015-06-01
  • 打赏
  • 举报
回复
引用 6 楼 DuoYuDeShouZhi 的回复:
[quote=引用 4 楼 finemi的回复:]这个问题很正常,你有个理解误区,不是说servlet转发后url才变成xxxx.do,而是当你点表单提交时,改变的地址。转发是不会改变地址的,只是服务器内部的类方法调用而已。 回到你的问题,当用户登录错误时,一般会回到登录页并提示信息,这个时候用转发问题不大且方便效率高,但是暴露了提交地址不太友好。 当登录成功后,一般来说会直接跳转到首页或之前浏览的网站,这个时候用重定向就可以了,因为你不要添加什么提示信息。 至于转发的地址问题,一般来说对于登录、注册,现在网站都是用的ajax提交,则不会存在这些问题了
意思是没有ajax的情况下要想不暴露提交地址,就得用重定向?[/quote] 对 但是还有个方法,就是html5的无刷新改变地址栏的History API ,不过不推荐,可能老浏览器不兼容并且感觉是滥用 http://www.renfei.org/blog/html5-introduction-3-history-api.html
番茄鲨鱼面 2015-06-01
  • 打赏
  • 举报
回复
转发是带着转发前的请求的参数的。重定向是新的请求。 单就楼主的登陆来说,登陆成功之后重定向到新页面,就不会导致刷新再次提交了。
uk8692 2015-05-31
  • 打赏
  • 举报
回复
做增、删、改的时候最好用重定向,因为如果不用重定向,每次刷新页面就相当于再请求一次,就可能会做额外的操作,导致数据不对。你可以看一下这个博客:http://blog.csdn.net/uk8692/article/details/12865571
强子rojon 2015-05-31
  • 打赏
  • 举报
回复
给出一个场景:加入我们开发的网站上,首页上有登录模块,点击登录之后需要调转到用户的后台界面。其中网站首页会对应一个网址(url),用户后台会对应一个网址,用户提交表单会对应一个网址。在首页上提交表单之后后台处理时可以使用请求转发,可以使用从定向。当使用请求转发时,浏览器上显示的网址是首页的网址;而使用重定向时,浏览器上显示的网址是后台的网址。登录之后显示首页地址是不符合逻辑的,所以使用从定向。 同学问这个问题肯定是一个初学者,因此给出一些其他知识,大多数网站完成登录使用的不会是提交表单的操作,一般使用的都会是ajax异步提交。要学习jquery,js啊
Inhibitory 2015-05-31
  • 打赏
  • 举报
回复
典型的应用场景: 1. forward: 访问 Servlet 处理业务逻辑,然后 forward 到 jsp 显示处理结果,浏览器里 URL 不变 2. redirect: 提交表单,处理成功后 redirect 到另一个 jsp,防止表单重复提交,浏览器里 URL 变了

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧