V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
SeanLin
V2EX  ›  Java

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

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

    初学 Java Web ,可能问题有点小白,诚心求教。
    7 条回复    2016-06-24 09:21:14 +08:00
    zmj1316
        1
    zmj1316  
       2016-06-23 18:51:40 +08:00
    要是我说用 ajax 做会不会被打...
    kumakiti
        2
    kumakiti  
       2016-06-23 18:56:40 +08:00
    @zmj1316 反正我不会打你
    qiayue
        3
    qiayue  
       2016-06-23 18:57:53 +08:00
    上传完成后一般就是一个简单的提示页面,提示上传成功,然后 N 秒后自动跳转到某个地方
    当然也可以上传完成直接跳转到某个地方
    最好不要 forward ,因为这导致你一个 URL 做两个事情,一个事情有两个 URL 。
    你所谓的开销其实没必要考虑。
    imzshh
        4
    imzshh  
       2016-06-23 19:00:48 +08:00
    可以设置 form 的 target 属性,提交到一个隐藏的 iframe 里面去。当然这个是以前的做法,现在都用 h5 的 FormData 对象了。
    Ydalien
        5
    Ydalien  
       2016-06-23 19:08:35 +08:00
    重定向 ( Redirect):是路径的跳转,内容和 url 都改变。(不带 request )
    url 转发 ( Forward):是页面的跳转,页面内容发生改变, url 不变。
    Ouyangan
        6
    Ouyangan  
       2016-06-24 08:48:45 +08:00 via Android
    @Ydalien 对的
    caixiexin
        7
    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 不变,如果没有什么特殊需求的话,这几个实现方式都可以啊。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1008 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 21:42 · PVG 05:42 · LAX 13:42 · JFK 16:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.