【问题标题】:How to avoid refresh in server side Java如何避免在服务器端 Java 中刷新
【发布时间】:2018-07-21 11:30:58
【问题描述】:

请考虑这种情况:用户应该向服务器发送一些文件,并且每个用户都有一个 id。每个用户必须发送一次文件,而不是两次。如果用户发送文件并且他想再次发送,文件上传页面将不会显示给他。但是有一个问题:上传过程需要时间,上传文件时,用户可以刷新页面,页面显示给他(因为文件还没有上传),然后他可以一次又一次地上传文件! 使用 jsp 的客户端代码,我无法更改它。现在我想防止在服务器端刷新页面。为此,我使用了一个中间页面:当用户想要查看文件上传页面时,他会转到这个中间页面(servlet),这个中间 servlet 会在用户的会话中放置一个标志并将他重定向到文件上传 servlet。文件上传 servlet 检查标志,如果存在,则向他显示页面,然后将删除标志。每当用户尝试刷新文件上传页面时,该标志不存在,他将被重定向到错误页面。 这是我的解决方案,但它有一个严重的问题:当用户从中间 servlet 重定向到文件上传 servlet 时,它的请求和响应将被破坏,我无法访问他的请求(用户通过他的请求向我发送一些信息,我需要文件上传 servlet 中的那些)。

1 - 有没有办法克隆请求对象? (这样我就可以进入会话并在重定向之后,我可以检索它)

2- 如果答案是否定的,我的问题是否有更好的解决方案?

任何建议将不胜感激。

编辑: 请注意,我不想将请求参数/属性保存到会话中。

【问题讨论】:

  • 我认为在上传 servlet(或服务)中包含验证会更有凝聚力。如果文件已保存,则会引发异常。注意:因为 Servlet 不是线程安全的,所以要同步执行验证的块。另一个技巧是使用特定的异常,然后在 web.xml 中将其定义到 Container 转发到特定的错误页面。
  • @HenriqueFernandesCipriano:这是正确的方法,但不幸的是,我使用引擎进行文件存储及其处理,引擎会延迟几秒钟来获取文件,然后,我可以执行这样的操作验证。感谢您的有用回复

标签: java servlets


【解决方案1】:

在您的代码中使用window.stop();

【讨论】:

  • 这是最糟糕的主意。
猜你喜欢
  • 2020-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-13
  • 1970-01-01
相关资源
最近更新 更多