刷新时如何避免重新提交jsp?

Mem*_*eak 20 jsp refresh submit

我正在写一个程序,但是我遇到了一个问题:当我刷新jsp页面时,系统会自动重新提交整个页面,我不知道如何避免它,有人可以帮助我吗?

Tod*_*wen 21

这是对问题的解释......

单击表单上的"提交"按钮会向Web服务器发送请求,其中包括在表单上输入的所有数据.不仅URL而且表单数据也是请求的一部分,浏览器会记住此请求.如果用户单击"刷新",浏览器将重复该请求,再次向Web服务器发送相同的URL 表单数据.

但是表单可以用两种不同的方式提交,GET或POST,具体取决于"form"标签的"method"属性.有一个约定,GET请求没有副作用; 它只提取数据但不对数据库进行任何更改.另一方面,如果请求更改数据,则应始终使用POST请求.正如我所说,这些只是约定,它们之间没有太大的技术差异,但一个非常重要的区别是浏览器会在用户尝试重复POST时警告用户 - 点击"刷新"会弹出一个对话框警告用户这可能导致重复操作,并确认他们确实要重新提交.刷新GET请求时,浏览器不会显示此确认.

您的表单是否使用了@mk所怀疑的GET方法?如果是这样,将其更改为POST是最简单的解决方案,因为这至少意味着如果用户尝试刷新则会收到警告.

但更好的解决方案是@cletus提出的POST + REDIRECT + GET惯用法.这将数据库更新(POST)和视图(GET)分成两个操作.单击浏览器上的刷新然后只重复GET,它没有副作用.

  • 您需要使用 response.sendRedirect(jspPath + "/" + nextPage) 而不是 forward() 方法。 (2认同)

cle*_*tus 13

你想要的成语是:

  1. POST + REDIRECT + GET ; 要么
  2. AJAX表单提交.

POST + REDIRECT + GET的工作原理如下:

  1. 表单提交使用POST方法;
  2. 当JSP或(希望)servlet收到POST时,它会做任何需要做的事情(保存或更新数据或其他);
  3. 然后,servlet或JSP使用Location:HTTP标头将用户重定向到可能是相同URL的内容.

这样做的好处是单击重新加载不会重新提交表单.此外,如果您单击浏览器后退按钮,则不会出现"再次提交?"的提示.对话框.

这是一个JSP示例.

AJAX提交意味着不是将表单提交回传统意义上的服务器,而是使用表单数据创建一个返回服务器的AJAX请求.该提交做了它需要的东西.单击重新加载只会重新加载页面.它不会重新发送AJAX请求.


小智 5

它使用以下脚本工作。

<script>
if ( window.history.replaceState ) {
  window.history.replaceState( null, null, window.location.href );
}
</script>
Run Code Online (Sandbox Code Playgroud)