验证失败后,servlet中止多部分表单数据提交

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了验证失败后,servlet中止多部分表单数据提交相关的知识,希望对你有一定的参考价值。

我有一个jsp页面,允许用户将多部分表单数据提交给servlet。此多部分表单具有“订单ID”字段和另一个用于上载1GB视频的字段。现在在服务器上,我对订单ID执行验证以检查订单ID是否有效,如果订单ID无效,我只需从doPost方法返回。现在问题是,当我从doPost返回时,这个多部分表单数据继续发送多部分视频文件,除非它将整个文件上传到servlet。我只想在订单ID验证失败时立即中止此Multipart表单提交,而不等待将整个视频文件上传到servlet。我尝试使用abort方法,但eclipse没有显示任何建议。

答案

您可以尝试两种解决方案:

  1. 在进一步处理文件之前验证方法第一行的OrderId,如果无效则返回该处。您还可以使用@MultipartConfig(fileSizeThreshold = 1024 * 1024, maxFileSize = 1024 * 1024 * 5, maxRequestSize = 1024 * 1024 * 5 * 5)添加文件大小验证。我试过了,这很有用!
  2. 添加验证OrderId onBlur事件的Web服务。这将检查orderId是否有效。它将减少最初提交的表单。这可以通过在页面上使用AJAX来完成。

如果这些没有帮助,请分享您的代码段,以便我可以进一步分析它。

另一答案

您可以尝试这样的事情,其中​​您首先激活AJAX以验证OrderID,如果您的servlet返回'true',则继续上传您的视频。否则你会忽略下一个操作。

var xhttp1 = new XMLHttpRequest();
xhttp1.open("POST", "YOUR_SERVLET", false);
xhttp1.onreadystatechange = function () {
    if (xhttp1.readyState == 4) {
        if (xhttp1.status == 200) {
            if (xhttp1.responseText == 'true') {

                // SEND YOUR 1 GB FILE
                var xhttp2 = new XMLHttpRequest();
                xhttp2.open("POST", "YOUR_SERVLET", false);
                xhttp2.onreadystatechange = function () {
                    if (xhttp2.readyState == 4) {
                        if (xhttp2.status == 200) {
                            if (xhttp2.responseText == 'true') {
                                // YOUR VIDEO UPLOADED SUCCESSFULLY
                            }
                        }
                    }
                };
                xhttp2.setRequestHeader("Content-type", "multipart/form-data");
                xhttp2.send(formData);


            } else {
                // ORDER ID INVALID
            }
        }
    }
};
xhttp1.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhttp1.send("OrderId=1");

以上是关于验证失败后,servlet中止多部分表单数据提交的主要内容,如果未能解决你的问题,请参考以下文章

layui弹出表单提交后,界面model验证部分起作用

Django-ajax:CSRF 验证失败。请求中止

django CSRF 验证失败。请求中止

Zend 框架 - 定制表单验证

用form表单想servlet提交数据时,get和post之间的区别是啥?

Java 表单验证