Jetty错误:java.lang.IllegalStateException: Form too large 270468>200000的问题解决

说明:

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

原文地址:https://www.cnblogs.com/EasonJim/p/8254988.html