表单提交数据丢失的问题

 

在流程审批过程中,提交审批时发现使用request.getParameter(“taskId”)获取数据时,发现取得任务ID为空。

在调试的过程中我发现表单的数据量特别大。

到网上查询了一下,说post  提交数据数据量有限制。

 

于是写了个表单测试了一下:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%
    String taskId=request.getParameter("taskId");
    String name=request.getParameter("name");
    System.out.println(taskId);
    
    System.out.println(name);
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>
<form name="frmSubmit" method="post">
<input type="text" name="taskId">
<textarea rows="30" cols="200" name="name"></textarea>
<input type="submit" value="submit">
</form>
</body>
</html>

测试结果是,如果数据超过2MB的时候数据时获取不到了。是两个表单都获取不到数据,然后修改tomcat 连接参数。

<Connector   maxPostSize="0" URIEncoding="utf-8" connectionTimeout="20000"  port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

将maxPostSize修改为0则不显示post数据大小。

发现还是没有解决之前的问题。

在调试的过程中发现,服务器打印了如下信息。

信息: More than the maximum number of request parameters (GET plus POST) for a single request ([10,000]) were detected. Any parameters beyond this limit have been ignored. To change this limit, set the maxParameterCount attribute on the Connector.

搜索了一下这个告警信息。

原来是服务器对提交的参数做了限制,tomcat 文档描述如下:

The maximum number of parameters (GET plus POST) which will be automatically parsed by the container. A value of less than 0 means no limit. If not specified, a default of 10000 is used. Note that FailedRequestFilter filter can be used to reject requests that hit the limit.

这个默认值为10000个,如果超过了10000个那么就丢弃。这也就解释了为什么我把taskId提前到form标签后,数据能够获取到。

知道了 原因:

我们修改tomcat配置如下:

<Connector maxParameterCount="-1"  maxPostSize="0" URIEncoding="utf-8" connectionTimeout="20000"  port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

不限制参数大小和提交数据大小,这样重新审批就没有问题了。

 

当然这个解决办法不是很好,因为他会极大的消耗服务器性能,因为提交的参数超过了10000个。

解决的办法是不提交那么的表单,这个我们这个表单系统中是可以的。

因为我们没有必要提交那么多的参数,我们的数据都拼装成了一个json进行提交,这样对服务器性能会 有极大的提升。

将我们的程序修改成使用ajaxpost的方式提交,只提交部分参数就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值