问题出现的背景:做excel导出时,使用post请求发现前台传递的数小于200kb可以导出去,如果大于200kb,则会在请求时报400错误,无法将将请求传递到后端。
原因:对于我们常用的WEB服务器,前端表单提交数据传给后端时参数的大小是有限制的
下面我将分别举例进行说明(默认单位是KB):Jetty、Tomcat
Jetty
- 报错:**Caused by: java.lang.IllegalStateException: Form is larger than max length 200000 idea jetty **
- 原因及解决方式
原因就是Jetty默认的对于前端传递参数的设置大小是200kb,超过了会报400错误,且无法调用后端接口
方法一:
方法二:
在WEB-INF目录下的jetty-web.xml文件中,加入如下设置
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
<!--Jetty6设置-->
<Configure id="WebAppContext" class="org.mortbay.jetty.webapp.WebAppContext">
<Set name="maxFormContentSize" type="int">-1</Set>
</Configure>
<!--Jetty7设置-->
<Configure id="WebAppContext" class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="maxFormContentSize" type="int">-1</Set>
</Configure>
<!--Jetty9设置-->
<Call name="setAttribute"> <Arg>org.eclipse.jetty.server.Request.maxFormContentSize</Arg>
<Arg>-1</Arg>
</Call>
(即对maxFormContentSize重新赋值,-1表示不限制,正数值表示所允许的最大bytes):
Tomcat
针对以上的问题,我则顺便查了下Tomcat,他的默认值是:maxPostSize=“2097152”(也就是2M的大小)
解决方式:
在tomcat
的TOMCAT_HOME/conf/server.xml中添加一行:
找到里面的Connector节点,在该节点中添加"maxPostSize"属性,将该属性值设置成你想要的最大值(单位:byte,-1表示不限制(谨慎使用,服务器压力会太大)
Tomcat常见参数设置
<Connector connectionTimeout=“20000” port=“8089” protocol=“HTTP/1.1” redirectPort=“8443”
maxPostSize=“10485760”/>
BES
BES: 默认限制为2097152bytes(2MB). 修改默认限制值的方法如下:
通过BES控制台进行设置:独立实例->WEB容器->自定义属性 里添加 maxPostSize 属性(单位:KB,0表示不限制)。
Weblogic
这个服务器一般生产中用的应该都比较多,但是此次我并没有找到该服务器对该值的相关设置,且将我原本报错的代码放在Weblogic上面也没出现问题,具体欢迎各位到老留言