說明:
1、200000單位為byte,並不是2MB,而是200KB,換算參考:https://calc.itzmx.com/
2、這個是表單提交后長度超過了200KB造成的,除了表單Form,還有URI等長度;這類解決問題都可以針對Jetty進行下手,配置相應的參數來記性解決。
3、如果請求經過了Nginx或者Apache這些,那么解決時要注意排查這些的影響。
錯誤:
java.lang.IllegalStateException: Form too large270468>200000 at org.mortbay.jetty.Request.extractParameters(Request.java:1561) at org.mortbay.jetty.Request.getParameterMap(Request.java:870) at org.apache.struts2.dispatcher.Dispatcher.createContextMap(Dispatcher.java:528) at org.apache.struts2.dispatcher.ng.PrepareOperations.createActionContext(PrepareOperations.java:78) at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter.doFilter(StrutsPrepareFilter.java:74) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:399) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:326) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:945) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410) at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
解決方法:
1、普通Web項目:
先從這個參數入手maxFormContentSize
Jetty7:org.eclipse.jetty.server.Request.maxFormContentSize=-1
Jetty6:org.mortbay.jetty.Request.maxFormContentSize=-1
-1表示不限制,2000000表示2MB的限制范圍。
①在Jetty目錄下找到jetty.xml中配置:
Jetty7: <Call class="java.lang.System" name="setProperty"> <Arg>org.eclipse.jetty.server.Request.maxFormContentSize</Arg> <Arg>-1</Arg> </Call>
Jetty6: <Call class="java.lang.System" name="setProperty"> <Arg>org.mortbay.jetty.Request.maxFormContentSize</Arg> <Arg>-1</Arg> </Call>
②在Web項目中的WEB-INF文件夾下新建一個jetty-web.xml文件
<?xml version="1.0"?> <!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd"> <Configure id="WebAppContext" class="org.mortbay.jetty.webapp.WebAppContext"> <Set name="maxFormContentSize" type="int">6000000</Set> </Configure>
2、針對Maven的Jetty插件運行的配置
Maven Jetty Plugin 6.x <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <jetty.version>6.1.25</jetty.version> <configuration> <!-- 增加systemProperties屬性 --> <systemProperties> <systemProperty> <name>org.mortbay.jetty.Request.maxFormContentSize</name> <!-- -1代表不作限制 --> <value>-1</value> </systemProperty> </systemProperties> </configuration> </plugin> 或者可以使用運行時給出參數的方式進行設置 jetty:run -Dorg.mortbay.jetty.Request.maxFormContentSize=-1 Maven Jetty Plugin 7.x情況下 <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <jetty.version>6.1.25</jetty.version> <configuration> <!-- 增加systemProperties屬性 --> <systemProperties> <systemProperty> <!-- 替換成org.eclipse.jetty.server.Request.maxFormContentSize --> <name>org.eclipse.jetty.server.Request.maxFormContentSize</name> <!-- -1代表不作限制 --> <value>-1</value> </systemProperty> </systemProperties> </configuration> </plugin> 運行時參數方式 jetty:run -Dorg.eclipse.jetty.server.Request.maxFormContentSize=-1
3、針對Spring Boot項目的配置
經過研究,無法指定這些參數,只需配置以下方式即可:
#POST表單長度限制(5MB)
server.max-http-post-size=5000000
對於Spring Boot還有很多這類相關的參數,可以通過具體需要來配置。
參考:
http://blog.csdn.net/madding/article/details/6759603
https://www.cnblogs.com/king1302217/p/4201071.html
http://blog.sina.com.cn/s/blog_dbc9a8040102vkcp.html
http://ray-yui.iteye.com/blog/1929184
https://stackoverflow.com/questions/36872540/spring-boot-rest-service-form-too-large
https://stackoverflow.com/questions/33232849/increase-http-post-maxpostsize-in-spring-boot