form 表单提交给 Servlet 处理返回后如何使 URL 不发生改变?

2016-06-23 17:01:11 +08:00
 SeanLin
做一个上传功能。
form 表单提交 action =“/UploadServlet",URL 发生改变,但在 /UploadServlet 里,最后用的是 request.getRequestDispatcher("/dashboard.jsp").forward(request, response);来返回到提交之前的页面。
想过用 response.sendRedirect()处理,可是这样的话会使得前后 request 发生改变,而且好像会增加一些开销。
所以不知道有没有什么方法可以处理?或者 request.getRequestDispatcher 的其它什么方法可以解决。

初学 Java Web ,可能问题有点小白,诚心求教。
6110 次点击
所在节点    Java
7 条回复
zmj1316
2016-06-23 18:51:40 +08:00
要是我说用 ajax 做会不会被打...
kumakiti
2016-06-23 18:56:40 +08:00
@zmj1316 反正我不会打你
qiayue
2016-06-23 18:57:53 +08:00
上传完成后一般就是一个简单的提示页面,提示上传成功,然后 N 秒后自动跳转到某个地方
当然也可以上传完成直接跳转到某个地方
最好不要 forward ,因为这导致你一个 URL 做两个事情,一个事情有两个 URL 。
你所谓的开销其实没必要考虑。
imzshh
2016-06-23 19:00:48 +08:00
可以设置 form 的 target 属性,提交到一个隐藏的 iframe 里面去。当然这个是以前的做法,现在都用 h5 的 FormData 对象了。
Ydalien
2016-06-23 19:08:35 +08:00
重定向 ( Redirect):是路径的跳转,内容和 url 都改变。(不带 request )
url 转发 ( Forward):是页面的跳转,页面内容发生改变, url 不变。
Ouyangan
2016-06-24 08:48:45 +08:00
@Ydalien 对的
caixiexin
2016-06-24 09:21:14 +08:00
Forward 是服务器帮你做了一次转发,客户端无感知。 java 的 request.getRequestDispatcher("/dashboard.jsp").forward(request, response) 只能实现站点内部的链接的转发(也就是你不能 forward 到 www.baidu.com 去 )
Redirect 是服务端返回客户端一个 http 302 ,让客户端重新去请求 http 302 里的那个链接,相当于理两次 http 请求。
就像前面说的 ajax 异步上传, Forward , Redirect 都能实现 url 不变,如果没有什么特殊需求的话,这几个实现方式都可以啊。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/287848

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX