如何在同一JSP页面中检查JSP表单请求提交(enctype ="multipart/form-data")?

4
<%
..... code to check request is submitted or not ...
%>
<form method="post" action="" name="uploadform" enctype="multipart/form-data">
  <table >  
    <tr>    
      <td>Select up to 3 files to upload</td>
    </tr>    
    <tr>    
      <td>   
        <input type="hidden" name="newFileName" value="newUploadedFileName1">
        <input type="file" name="uploadfile" >
        </td>    
    </tr>    
    <tr>    
     <td align="center">   
      <input type="submit" name="Submit" value="Upload">
      <input type="reset" name="Reset" value="Cancel">
     </td>
    </tr>
</table>
</form>

jsp文件上传文件的post请求代码将在同一页中的<% .. %>标记上方。

如何使用if语句添加一个检查,以检查提交按钮是否已被单击,换句话说,是否已发送了一个post请求。

我遵循了这个http://www.java2s.com/Code/Java/JSP/SubmittingCheckBoxes.htm,但它没有帮助,因为它调用了一个不在同一页中的不同jsp文件("formAction.jsp")。

if(request.getParameter("newFileName") != null) {

这个语句总是返回null值。我不知道为什么。

注意:这是一个带有属性enctype="multipart/form-data"的表单。

如果我不添加任何if语句,那么文件第一次上传时没有问题,但是下一次如果我点击重新加载按钮或刷新页面,浏览器会提示我重新发送数据或重新上传以前的文件。我希望你已经了解了问题。如果有任何混淆,请评论。

有人能给一些提示/解决方案吗?

1个回答

8
当使用 multipart/form-data 时,请求被发送到不同的编码而不是标准的 application/x-www-form-urlencoded 编码,而 getParameter() 和类似方法依赖于标准编码,因此它们都返回 null。您需要将 multipart/form-data 请求解析为可读对象,以确定提交的值。通常使用 Apache Commons FileUpload 或 request.getParts() 进行解析。如需更多详细信息,请查看 此答案
另外,您也可以检查请求方法。正常请求(链接、书签等)始终是 GET。上传文件的表单提交始终是 POST。
if ("POST".equalsIgnoreCase(request.getMethod())) {
    // Form was submitted.
} else {
    // It was likely a GET request.
}

然而,在JSP页面中写入原始的Java代码是一个维护难题的风险,这样做毫无意义。最好将表单提交给一个完整的servlet,并仅实现doPost()方法。在servlet中,您可以自由地编写Java代码,而不必考虑所有的HTML标记。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接