问题描述:上周有客户反应前台页面数据导出到Excl文件出错了,我看了一下,数据量在一千八百多以上就会页面出错,以下却可以正常导出。刚开始第一反应是配置中做了限制,因为大量数据传输会特别影响页面展示效果,有时候会造成页面卡死的情况。剩下就是开始顺藤摸瓜翻代码,结果翻到导出页面跳转的Controller里面时,竟然发现原来整个项目的文件导出是将所有前台显示的数据再传回后台进行Excl排版,然后返回文件链接,哇哦,终于找见问题根源了,真是前人挖坑后人栽头。。。。。。直接传唯一值查不就行了,传那么多有的没的。本来想着改一下的,但临近月中,客户方要考核上月绩效,时间有点紧所以就没动,等闲了再改,毕竟每天要蹦出好几个需求出来,心累啊。
解决办法:post请求在tomcat下面默认参数大小是2M,如果数据大于限制值,则后台接收到的值为null。这也算是一个保护机制吧,数据量大了----->服务器反应慢----->性能下降----->影响用户体验----->招来投诉0.0。当然,我们可以根据自己需求来进行合理的修改。在tomcat/conf/server.xml文件里面,修改参数限制大小。
<Connector URIEncoding="UTF-8"
port="8080"
protocol="HTTP/1.1"
redirectPort="8443"
compressableMimeType="text/html,text/xml"
compression="on"
connectionTimeout="2000"
maxPostSize="20971520"
maxThreads="3000"
/>
如果完全取消参数大小限制,可以将maxPostSize设置为-1(为什么不是0?具体不详说,版本问题,只要记住负数最可靠就行了)。
PS:HTTP协议下的请求本身没有对参数做限制,限制是浏览器或者服务器设置的,各个因厂家不同设置也不一样。
可能有些人会遇到修改了配置文件,还是接收不到参数的尴尬境地,回头一看,项目启动了,配置文件恢复原样了。
方法一:打开eclipse或者sts的Window--Preference--Server--Launching,将红框内的选项去掉,点击保存。
方法二:在eclipse或者sts项目列表中找到Servers,在下面找到server.xml并修改maxPostSize的值。
改完之后,启动项目,正常运转。然后选择六千,七千的数据量导出,没有报错,正常导出,但真的很慢!!!十二三秒!!!mmp。慢慢等着这十几秒,真是浑身不得劲,争取月底前改了。
有问题,请留言,才疏学浅,欢迎指正。