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

时间:2011-08-09 07:18:01

标签: java jsp post 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>

上传文件的jsp帖子请求代码将位于&lt;%..%&gt;上方的同一页面中标签

如何使用if语句添加检查以检查是否单击了“提交”按钮,换句话说,是否发送了帖子请求。

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

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

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

注意:这是一个具有此属性=&gt;的表单ENCTYPE = “多部分/格式数据”

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

任何人都可以提供一些提示/解决方案吗?

1 个答案:

答案 0 :(得分:8)

使用multipart/form-data时,请求的编码方式与application/x-www-form-urlencoded和consorts所依赖的标准getParameter()编码不同。这就是为什么他们都返回null。在能够确定提交的值之前,您需要将multipart/form-data请求解析为合理的对象。为此,通常使用Apache Commons FileUpload或request.getParts()。有关详细信息,请查看this answer

或者,您也可以检查请求方法。正常请求(链接,书签等)始终是GET。提交上传文件的表单始终是POST。

if ("POST".equalsIgnoreCase(request.getMethod())) {
    // Form was submitted.
} else {
    // It was likely a GET request.
}

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