Jetty提出データ時報java.lang.Illagal StateException:Form too larg 270408>200000問題解決


Jetty提出データ時報java.lang.Illagal Station:Form too
large 270408>200000問題解決
回転:http://blog.csdn.net/shixing_11/articale/detail/6996236
今日はEclipseのJettyプラグインを使ってサーバーにリッチテキスト編集中のデータを提出した場合、以下の異常を報告します。
[java] view plaincopyprint?
01.java.lang.IllegalStateException: Form too large270468>200000  
02.    at org.mortbay.jetty.Request.extractParameters(Request.java:1561)  
03.    at org.mortbay.jetty.Request.getParameterMap(Request.java:870)  
04.    at org.apache.struts2.dispatcher.Dispatcher.createContextMap(Dispatcher.java:528)  
05.    at org.apache.struts2.dispatcher.ng.PrepareOperations.createActionContext(PrepareOperations.java:78)  
06.    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter.doFilter(StrutsPrepareFilter.java:74)  
07.    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212)  
08.    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:399)  
09.    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)  
10.    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)  
11.    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)  
12.    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450)  
13.    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)  
14.    at org.mortbay.jetty.Server.handle(Server.java:326)  
15.    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)  
16.    at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:945)  
17.    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756)  
18.    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)  
19.    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)  
20.    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)  
21.    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)  
明らかに単一の要求データが大きすぎて、Form too large 200000(2000 Byteは約2 M)ですが、異常はどこで投げ出されましたか?研究したところ、Jettyプラグインが報告したのは以下の通りです。
"eclipse"pluginsディレクトリの下で、org.mortbay.jey.server_を見つけました。6.1.23 v 20012071420.jarバッグをJD-GUIに投げ込み、エラーメッセージに基づいてorg.mory.ject.Request.extract Parameeters()の方法で以下の情報を見つけました。
矢印の示す部分を注意してみてください。異常はここから投げられたはずですが、maxFormContentSize値はそこから来ました。this._によると。context.get Contect Handler.getMax FormContentSize()このヒントは、org.mortbay.jetty.handerContronthtHandler.class類を見つけました。このクラスには次のような文があり、興奮、デフォルト値はここにあります。
このデフォルト値は設定されていますが、どうやって修正しますか?context.getContectHandler()コードを追跡し続けます。この値はWEBの入り口から入手したweb.xmlですが、この値はどのように伝えられますか?ネット上の検索と実践を通じて、WEB-INFディレクトリの下でjey-web.xmlファイルを新たに作成できます。中には下記の内容を書いて、Jemazete 6に対応します。
[java] view plaincopyprint?
01.<?xml version="1.0"?>  
02.  <!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN"  
03.  "http://jetty.mortbay.org/configure.dtd">  
04.  <Configure id="WebAppContext" class="org.mortbay.jetty.webapp.WebAppContext">  
05.          <Set name="maxFormContentSize" type="int">600000</Set>  
06.  </Configure>  
webアプリケーションを再起動し、再度データを提出し、正常に提出できることを確認しました。これで問題は円満に解決されます。
他のサーバーに似たような状況がありますか?答えはもちろん肯定的です。Tomcatのように、検索で次のような内容が見つかりました。
Q:In Tomcat,I got a「Post data too big」error.
A:Apache Tomcat by default sets a limit on the maximsize of HTTP POST requests it accepts.
    In Tomcat 5,this limit is set to 2097152(2 Mb).When you try to uplad files or post forms that are
    larger than 2 MB、this error can occur.
   The solution is to reconfigre Tomcat to accept larger POST requests,eigther by increase ing
    the limit,or by disabling it.This can be done by ediit Tomcat's server.xml.
    In the<Connector>element、add an atribute“maxPostSize”and set a larger value(in bytes)to
    increase the limit.Setting it to 0 will disable the size check.
つまり、tomcatはデフォルト設定でHTTP POST要求を受信できるサイズは最大2 Mで、POST要求の伝達データが2 Mより大きいとこのエラーが発生します。解決方法はtomcatの配置ファイルを修正することです。HOME$/conf/server.xmlの中にあるタグを見つけて、このラベルに「maxPostSize」属性を追加して、この属性値をあなたが望む最大値に設定します。単位はバイトです。この値を0に設定すると、tomcatはPOSTのサイズをチェックしません。
私のテスト環境は以下の通りです。
  Jettyバージョン:Run Jetty Run Feature 1.2.2.1
  Jetty対応のjarパッケージバージョン:org.mortbay.jetty.server_6.1.23 v 20012071420.jar
Jetty 7については、パッケージのパスを変更するだけで、完全なプロファイルは以下の通りです。
[java] view plaincopyprint?
01.<?xml version="1.0"?>  
02.  <!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN"  
03.  "http://jetty.mortbay.org/configure.dtd">  
04.  <Configure id="WebAppContext" class="org.eclipse.jetty.webapp.WebAppContext">  
05.          <Set name="maxFormContentSize" type="int">600000</Set>  
06.  </Configure>  
オーストリアよ、大成功!