如何在同一个jsp页面中查看jsp表单请求提交?(ENCTYPE = "多部分/格式数据")

shi*_*bly 4 java post jsp file-upload request

<%
..... 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>
Run Code Online (Sandbox Code Playgroud)

上传文件的jsp post请求代码将位于<%..%>标记中的同一页面中.

如何使用if语句添加检查以检查是否单击了"提交"按钮,换句话说,是否发送了发布请求.

我按照这个,http://www.java2s.com/Code/Java/JSP/SubmittingCheckBoxes.htm, 但它没有帮助,这是调用不同的页面中不同的jsp文件("formAction.jsp").

if(request.getParameter("newFileName") != null) {
Run Code Online (Sandbox Code Playgroud)

此语句始终为null值.我不知道为什么.

注意:它是具有此属性的表单=> enctype ="multipart/form-data"

如果我没有添加任何if语句,那么文件将首次上载,但下次如果我单击重新加载按钮或刷新页面,浏览器会提示我重新发送数据或重新上载以前的文件.我希望你能理解这个问题.如果有任何疑惑,请了解问题,请发表评论.

谁能提供一些提示/解决方案?

Bal*_*usC 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.
}
Run Code Online (Sandbox Code Playgroud)

但这在JSP中没有任何意义.在JSP文件中编写原始Java代码是导致维护问题的原因.而是将表单提交给一个完整的servlet,然后实现该doPost()方法.在servlet中,您可以自由编写Java代码,而无需考虑所有HTML.