第二次提交multipart / conf后的NullPointerExpection - Tomcat

时间:2014-12-09 11:27:36

标签: java tomcat redirect form-submit

我在我的开发系统上遇到了一个奇怪的行为。在通过表单多/部分提交成功完成FileUpload之后,我转发到另一个Servlet来处理数据库插入,然后从那里重定向到启动文件上载的源页面。如果用户现在尝试通过多部分提交上传另一个文件,当我尝试从第一个Servlet中的请求中读取参数时,Tomcat会抛出NullPointerException。

首先,我分析了从客户端到服务器的POST,只是为了发现它们看起来完全一样。

晦涩难懂的是,如果我多次使用F5重新加载页面,我可以毫无问题地上传另一个文件。因此,作为一个快速解决方案,我尝试将一个随机数附加到URL并使用JAVASCRIPT强制重新加载一次(location.reload(true),但这根本不能解决问题。

我的设置是:

Tomcat 7.0.55

mySql数据库(最新版本)

Java 1.8.0_20

Eclipse Juno

编程代码

documents.jsp

<form id="up_additional" action="../CreateAgentCustomerContractAdditional" method="post" enctype="multipart/form-data"><table id="additional_upload_table">  

<tr>
 <td><input type="hidden" id="contract_id_select" name="contract_id_select"></input></td>
</tr>

<tr>    
 <td class="table_tag_forms">Dokumententyp</td>
 <td class="value_tag_forms"><input type="text" name="doc_type" /> </td>
</tr>

<tr>    
 <td class="table_tag_forms">Kommentar</td>
 <td class="value_tag_forms"><textarea name="add_comment"></textarea> </td>
</tr>

<tr>    
 <td class="table_tag_forms">Dokument</td>
 <td class="value_tag_forms"><input type="file" name="file" id="file" /> </td>
</tr>

<tr><td><input class="change" type="submit" /></td></tr>
</table> 
</form>    

CreateAgentCustomerContractAdditional

int contract_id = Integer.parseInt(request.getParameter("contract_id_select"));
    String comment = request.getParameter("add_comment");
    String doc_type = request.getParameter("doc_type");

.... ....

getServletContext().getRequestDispatcher("//InsertContractAdditional").forward(request, response);

InsertContractAdditional

response.sendRedirect( context_pathprefix + context/documents.jsp?#"+ran.nextDouble());

的Javascript

<script type="text/javascript">
 window.onload = function() {
  if(window.location.hash && window.location.hash != "#reloaded" ) {
   window.location.hash =  "reloaded";
   location.reload(true);
  }
};
</script>

我希望有人能给我一个提示!

亲切的问候!

P.S。:StackTrace

HTTP Status 500 - nulltype Exception report

message null

description The server encountered an internal error that prevented it from fulfilling this request.

exception

java.lang.NumberFormatException: null
java.lang.Integer.parseInt(Unknown Source)
java.lang.Integer.parseInt(Unknown Source)
servlet.CreateAgentCustomerContractAdditional.doPost(CreateAgentCustomerContractAdditional.java:62)
javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

附录

隐藏输入字段的值由用户的onClick事件设置。在两个POSTS中,当我在调试模式中查看元素时,该值将被填充!

$('.additional_documents').on('click', function(){ 
 $('#contract_id_select').val($(this).attr('id'));
         display_additional_documents($(this).attr('id'));
         $('#show_additional').show();
     });

THX FOR FOR THORT解决了我自己的问题

将应用程序移动到基于Linux的高效环境和真正的Tomcat Webserver之后,它就像一个魅力,看起来像是一个Eclipse Bug。不管怎样,谢谢!

3 个答案:

答案 0 :(得分:0)

当您调用location.reload(true)时,您正在发出GET请求,而不是POST请求。

答案 1 :(得分:0)

这条线对我来说很奇怪:

int contract_id = Integer.parseInt(request.getParameter("contract_id_select"));

在你的jsp页面中,你有:

<td><input type="hidden" id="contract_id_select" name="contract_id_select"></input></td>

我没有看到这个字段的任何价值。您正在尝试parseInt为空值。

答案 2 :(得分:0)

最好对参数&#39; contract_id_select&#39;进行空检查。

int contract_id = request.getParameter("contract_id_select")==null?-1:Integer.parseInt(request.getParameter("contract_id_select"));
相关问题