Jetty7.6 java.lang.IllegalStateException: Form too large 563410>200000或Form too many keys异常

    xiaoxiao2021-04-12  50

    Jetty7.6 java.lang.IllegalStateException: Form too large 563410>200000或Form too many keys异常

    (2015-05-30 14:53:27) 转载▼ 标签:

    jetty

    分类:Web

    在做一个用Jetty作为服务器的Web项目时,Form提交数据太大的话报以下两个错误,百度了一下原来是Jetty报出的异常:

    1、java.lang.IllegalStateException: Form too large270468>200000      atorg.mortbay.jetty.Request.extractParameters(Request.java:1561)      atorg.mortbay.jetty.Request.getParameterMap(Request.java:870)      atorg.apache.struts2.dispatcher.Dispatcher.createContextMap(Dispatcher.java:528)      atorg.apache.struts2.dispatcher.ng.PrepareOperations.createActionContext(PrepareOperations.java:78)      atorg.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter.doFilter(StrutsPrepareFilter.java:74)      atorg.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212)      atorg.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:399)      atorg.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)      atorg.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)      atorg.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)      atorg.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450)      atorg.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)      atorg.mortbay.jetty.Server.handle(Server.java:326)      atorg.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)      atorg.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:945)      atorg.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756)      atorg.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)      atorg.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)      atorg.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)      atorg.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) 

     

    2、java.lang.IllegalStateException: Form too many keys  atorg.eclipse.jetty.util.UrlEncoded.decodeUtf8To(UrlEncoded.java:518)  atorg.eclipse.jetty.util.UrlEncoded.decodeTo(UrlEncoded.java:611)  atorg.eclipse.jetty.server.Request.extractParameters(Request.java:298)  atorg.eclipse.jetty.server.Request.getParameterMap(Request.java:719)  atorg.apache.struts2.dispatcher.Dispatcher.createContextMap(Dispatcher.java:592)  atorg.apache.struts2.dispatcher.ng.PrepareOperations.createActionContext(PrepareOperations.java:78)  atorg.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:78)  atorg.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1288)  atcom.zhongpin.pap.filter.AuthorityFilter.doFilter(AuthorityFilter.java:77)  atorg.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1288)  atorg.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:233)  atorg.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)  atorg.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1288)  atorg.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:443)  atorg.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)  atorg.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:532)  atorg.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:227)  atorg.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1044)  atorg.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:372)  atorg.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:189)  atorg.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:978)  atorg.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)  atorg.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255)  atorg.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154)  atorg.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)  atorg.eclipse.jetty.server.Server.handle(Server.java:369)  atorg.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:486)  atorg.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:944)  atorg.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1005)  atorg.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:865)  atorg.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240)  atorg.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)  atorg.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:667)  atorg.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)  atorg.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)  atorg.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)  at java.lang.Thread.run(Thread.java:619)

    看了Jetty的源码才发现,jetty限制了Form提交数据的大小,该源码类来自jettylib库下的jetty-server-7.6.16.v20140903.jar包下的

    org.eclipse.jetty.server.Request类,打开该类可以看到以下代码:

          分析以上代码可以看出,jetty限制了form提交数据的最大size和最大keys数,通过上面代码可以看出,jetty默认maxFormContentSize为200000,maxFormKeys为1000;而若我们提交的数据超过这两个值了,就是报上面那两个Java异常,那怎么办呢?难道让我们去修改他们的源码吗?答案isNo。

          Jetty提供了解决该问题的两种方式,任选其一即可:

         一是修改Jetty的jetty.xml文件

                在jetty.xml文件中添加以下配置:

                         maxFormContentSize默认是200000,maxFormKeys是1000,我们只需将这两个值改成我们所需的最大值即可,还有一种值就是把这两个值都设置为小于0的任何值,一般为-1,表示不限制Form提交数据的大小。

         二是在web项目中的WEB-INF文件夹下新建一个jetty-web.xml文件

               在jetty-web.xml 文件中添加以下内容:

     

                     和第一种配置一样将maxFormContentSize和maxFormKeys的值修改成自己想要的值即可。

    转载请注明原文地址: https://ju.6miu.com/read-667673.html

    最新回复(0)