Postリクエストを使用して大きなファイルを送信すると、システムが例外を表示します。
_Java.lang.IllegalStateException: Form too large1105723>200000
at org.mortbay.jetty.Request.extractParameters(Request.Java:1404)
at org.mortbay.jetty.Request.getParameter(Request.Java:749)......
_
Googleでこれについてヘルプを検索すると、webappcontext.setMaxFormContentSize(5000000);
などのヘルプが表示されます
このコードを使用していますが、問題は解決していません
また、私はコードjettyServer.setAttribute("org.mortbay.jetty.Request.maxFormContentSize", 5000000);
を使用しています
しかし、結果はありません
注:-Jetty-6.1.0を使用しています
jetty.xml
でシステムプロパティを設定してみてください
<Call class="Java.lang.System" name="setProperty">
<Arg>org.mortbay.jetty.Request.maxFormContentSize</Arg>
<Arg>500000</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">600000</Set>
</Configure>
バージョン7以降、Jettyのクラスは別のパッケージに移動しました。 org.mortbay...
をorg.Eclipse...
に置き換える必要があります(Davidのコメントに感謝します)。
import org.mortbay.jetty.Server;
//... other code here...//
int port = 8080;
Server server = new Server(port);
server.setAttribute("org.mortbay.jetty.Request.maxFormContentSize", -1);
このコードは、私が使用している突堤6.0.2で動作します。
「-1」のサイズは、フォームに制限がないことを意味します。20,000,000バイトの大きなフォームを投稿しようとしたところ、問題はありませんでした。
Jetty(jetty 7)のEclipseリリースの場合、次のコードを使用する必要があります:
import org.Eclipse.jetty.server.Server;
//... other code here...//
int port = 8080;
Server server = new Server(port);
server.setAttribute("org.Eclipse.jetty.server.Request.maxFormContentSize", -1);
残念ながら、jetty.xmlを変更することはできません。代わりに、いくつかのオプションを設定してmaxFormContentSizeを調整します。
JVM_OPTS="$JVM_OPTS -Dorg.Eclipse.jetty.server.Request.maxFormContentSize=5000000"
これは、Solrのインスタンスを起動するために使用するシェルスクリプトに存在します。
フォームサイズに関するその他のドキュメント: http://wiki.Eclipse.org/Jetty/Howto/Configure_Form_Size
私もこの問題に遭遇しました(別のアプリケーションに組み込まれたJettyを実行しているため、jetty.xmlを使用していません)。
「フォームが大きすぎる」例外を修正したsetMaxFormContentSize
クラスでContextHandler
メソッドを使用しました。 (コンテキストハンドラーの作成/使用の例については http://wiki.Eclipse.org/Jetty/Tutorial/Embedding_Jetty#Setting_a_ServletContext を参照してください)。
<!-- Development Jetty -->
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>8.1.8.v20121106</version>
<configuration>
<scanIntervalSeconds>1</scanIntervalSeconds>
<webApp>
<contextPath>/${project.build.finalName}</contextPath>
</webApp>
<systemProperties>
<systemProperty>
<name>org.Eclipse.jetty.server.Request.maxFormContentSize</name>
<value>10485760</value>
</systemProperty>
</systemProperties>
</configuration>
</plugin>
Mavenプラグインでjetty 8のために働く
webappcontext.getServletContext().getContextHandler() .setMaxFormContentSize(10000000);
Jetty 9.2.3.v20140905を使用していますが、次のようにして問題を修正しました。
<plugin>
<groupId>org.Eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.2.3.v20140905</version>
<configuration>
<jettyXml>
src/main/resources/jetty/jetty.xml
</jettyXml>
</configuration>
</plugin>
<Configure id="Server" class="org.Eclipse.jetty.server.Server">
<Call name="setAttribute">
<Arg>org.Eclipse.jetty.server.Request.maxFormContentSize</Arg>
<Arg>-1</Arg>
</Call>
</Configure>
上記の解決策のどれも私にとってうまくいきませんでした、
したがって、これを機能させるために、サーバー属性として設定するのではなく、サーバーを作成する前にシステムプロパティを設定します。
System.setProperty("org.Eclipse.jetty.server.Request.maxFormContentSize", "500000000");
Server server = ServerFactory.createServer(Host, port, contextPath, war);
使用しているJettyバージョンの古さに応じて(私の場合はEclipse Equinoxに埋め込まれたjetty-5.1.14)、プロパティがorgである必要がある場合もあります) .mortbay.http.HttpRequest.maxFormContentSize
差出人:org.mortbay.http.HttpRequest
/**
* Max size of the form content. Limits the size of the data a client can Push at the server.
* Set via the org.mortbay.http.HttpRequest.maxContentSize system property.
*/
public static int __maxFormContentSize = Integer.getInteger(
"org.mortbay.http.HttpRequest.maxFormContentSize", 200000).intValue();
したがって、値を設定するには、起動時にアプリケーションで次のようなことを行う必要があります。
System.setProperty("org.mortbay.http.HttpRequest.maxFormContentSize", "10000000");
Springブートを使用し、application.propertiesにserver.jetty.max-http-post-size: maxSize
を設定して修正します。
server.jetty.max-http-post-size: 500000
おそらくバージョン7以降のJettyの変更が原因ですが、私はそのような成功しかありませんでした:
jetty-web.xmlで、以下をサーバーオブジェクトに追加します(1000000はサイズの例、obv)。
<Call name="setAttribute">
<Arg>org.Eclipse.jetty.server.Request.maxFormContentSize</Arg>
<Arg>1000000</Arg>
</Call>
完全なファイルは私のように見えるかもしれません
<Configure id="Server" class="org.Eclipse.jetty.server.Server">
<Call name="setAttribute">
<Arg>org.Eclipse.jetty.server.Request.maxFormContentSize</Arg>
<Arg>1000000</Arg>
</Call>
<Ref id="DeploymentManager">
<Call id="webappprovider" name="addAppProvider">
<Arg>
(...)
コマンドライン引数を追加してジェンキンスを起動する
-Dorg.Eclipse.jetty.server.Request.maxFormContentSize = 500000
つまり、Java -Dorg.Eclipse.jetty.server.Request.maxFormContentSize = 500000 -jar jenkins.war
ここでの問題は、ActiveMQのベースとなっているJettyにあります。詳細はこちら ドキュメント
ソリューションはApache-activemq-5.9.0/bin/win64/wrapper.conf
ファイルにあり、次の行を追加しますabの後(下記参照)。
wrapper.Java.additional.16=-Dorg.Eclipse.jetty.server.Request.maxFormContentSize=1000000
wrapper.Java.additional.15=-Djava.security.auth.login.config=%ACTIVEMQ_CONF%/login.config
32ビットコンピュータで実行している場合は、Apache-activemq-5.9.0/bin/win32/wrapper.conf
に同じ行を追加してください。
ハッピーコーディング...
組み込みモードで突堤を使用する場合は、これを試してください。
ServletContextHandler servletHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
servletHandler.setMaxFormContentSize(1024*1024*1024);//size you want to allow.
Eclipse/Springから実行している場合は、以下をvm引数に追加します-Dorg.mortbay.jetty.Request.maxFormContentSize = -1
ActiveMQで同様の問題が発生したため、jetty.xmlを編集して追加する必要がありました
<property name="maxFormContentSize" value="-1" />
ハンドラのプロパティに。
から:-
<property name="handler">
<bean id="sec" class="org.Eclipse.jetty.server.handler.HandlerCollection">
<property name="handlers">
<list>
<bean class="org.Eclipse.jetty.webapp.WebAppContext">
<property name="contextPath" value="/admin" />
<property name="resourceBase" value="${activemq.home}/webapps/admin" />
<property name="logUrlOnStart" value="true" />
</bean>
に
<property name="handler">
<bean id="sec" class="org.Eclipse.jetty.server.handler.HandlerCollection">
<property name="handlers">
<list>
<bean class="org.Eclipse.jetty.webapp.WebAppContext">
<property name="contextPath" value="/admin" />
<property name="resourceBase" value="${activemq.home}/webapps/admin" />
<property name="logUrlOnStart" value="true" />
<property name="maxFormContentSize" value="-1" />
</bean>