Internet explorer 带有多部分/表单数据表单的IE页面过期问题
如果我在表单标签中指定Internet explorer 带有多部分/表单数据表单的IE页面过期问题,internet-explorer,jsp,file-upload,back-button,multipartform-data,Internet Explorer,Jsp,File Upload,Back Button,Multipartform Data,如果我在表单标签中指定enctype=“multipart/form data”,IE上就会出现“页面过期”问题 通过简化,我有3个JSP页面page1.JSP,page2.JSP和page3.JSP page1.jsp(其中包含带有enctype=“multipart/form data”)的表单)提交到page2.jsp,而page2.jsp提交到page3.jsp 如果我: 提交到page2.jsp 再次从page2.jsp提交到page3.jsp 从page3.jsp返回到page2.j
enctype=“multipart/form data”
,IE上就会出现“页面过期”问题
通过简化,我有3个JSP页面page1.JSP
,page2.JSP
和page3.JSP
page1.jsp
(其中包含带有enctype=“multipart/form data”
)的表单)提交到page2.jsp
,而page2.jsp
提交到page3.jsp
如果我:
// page1.jsp
<%@ page language="java" contentType="text/html;charset=UTF-8"%>
<html>
<head>
</head>
<body>
<form method="post" enctype="multipart/form-data" action="page2.jsp">
File to upload: <input type=file name=upfile>
<input type=submit value="Go to page2">
</form>
//page1.jsp
要上载的文件:
//page2.jsp
//页面3.jsp
您应该使用
<%
response.sendRedirect("page3.jsp");
return;
%>
上传处理完成后,在JSP的第2页上
当您从第3页返回第2页时,您会收到“页面过期”消息,您不应该这样做,也不允许这样做。如果page2是处理文件上载的代码,则必须从那里执行重定向,这将阻止使用“后退”按钮返回到第2页
你为什么要这样做?因为在服务器上执行更新操作(数据库更新、文件上载处理)的页面应始终重定向到另一个页面,以防止返回按钮重复提交或刷新重复提交问题。(执行重定向意味着,“上一步”按钮将返回到第1页而不是第2页。历史记录中将跳过第2页。)
通过使上载处理页面过期,浏览器本身为您提供了一定程度的保护,以防止双重文件上载,但您不应该依赖于此,因为浏览器不会对正常表单提交执行此操作,仅对文件上载(即多部分/表单数据)执行此操作 基本上你得到的是正确的。当您返回到第2页时,数据将被重新提交,因为这不会发生,页面显示为过期。您可以使用其他浏览器(如Firefox或Google Chrome)检查此行为,它会询问您是否要重新提交数据
如果您想在第3页之后进入第2页,则需要从第3页重定向到第2页,而不是使用历史记录操作返回。只需使用后重定向获取范例:
<%
if("POST".equals(request.getMethod())
{
// process submitted params/files
response.sendRedirect(request.getRequestURI()); // redirect to the same page
}
%>
<html>
blah blah blah
</html>
废话废话
或者您可以简单地使用ajax。首先,文件上传在第1页。这里,我在简化:在第1页,我有一个带有一些字段(和文件上传)的表单,在第2页,我有另一个带有一些字段(没有文件上传)的表单,在第3页,我有一个用户数据输入的摘要,当用户提交第3页表单时,执行插入并重定向到另一页,以防止表单重新提交,您需要在处理上载的页面上执行服务器端重定向,因此您需要3个以上的页面,然后,您需要4个(或更多)“首先,文件上载在第1页”您的意思是表单在第1页,但其处理在第2页,对吗?这就是问题所在。处理上载后,Page2需要执行服务器端重定向。是。当用户在第1页提交表单时,servlet将文件加载到临时目录中,并显示第2页。然后用户在第2页提交表单,调用第二个servlet并显示第3页。问题出现在从第3页到第2页(仅在IE上),Firefox和Chrome不会出现这种情况。此外,如果没有第1页上的文件上传,IE上也不会出现这种情况。
<%
if("POST".equals(request.getMethod())
{
// process submitted params/files
response.sendRedirect(request.getRequestURI()); // redirect to the same page
}
%>
<html>
blah blah blah
</html>