Lorsque j'envoie un fichier volumineux à l'aide d'une demande de publication, le système affiche une exception:
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)......
Lorsque je recherche de l'aide à ce sujet dans Google, ils m'apportent de l'aide, par exemple, webappcontext.setMaxFormContentSize(5000000);
J'utilise ce code mais le problème n'est pas résolu
J'utilise aussi le code jettyServer.setAttribute("org.mortbay.jetty.Request.maxFormContentSize", 5000000);
Mais aucun résultat
Note: -J'utilise Jetty-6.1.0
Essayez de définir les propriétés du système via jetty.xml
<Call class="Java.lang.System" name="setProperty">
<Arg>org.mortbay.jetty.Request.maxFormContentSize</Arg>
<Arg>500000</Arg>
</Call>
ok vous pouvez le configurer depuis votre application web
Ajoutez le fichier WEB-INF/jetty-web.xml dans votre application Web Et configurez le paramètre dans ce fichier:
<?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>
Depuis la version 7, les classes de Jetty ont été déplacées vers un package différent. Vous devez remplacer org.mortbay...
par org.Eclipse...
(Merci à David pour son commentaire).
import org.mortbay.jetty.Server;
//... other code here...//
int port = 8080;
Server server = new Server(port);
server.setAttribute("org.mortbay.jetty.Request.maxFormContentSize", -1);
Ce code fonctionne sur jetty 6.0.2 que j'utilise.
La taille de "-1" signifie que le formulaire n'a pas de limite. J'ai essayé d'envoyer un formulaire de grande taille 20 000 000 octets et je n'ai rencontré aucun problème.
Pour les versions Eclipse de Jetty (jetty 7), vous devez utiliser le code suivant:
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);
Malheureusement, je ne suis pas en mesure de modifier jetty.xml. J'ai donc simplement défini quelques options pour ajuster maxFormContentSize de la manière suivante:
JVM_OPTS="$JVM_OPTS -Dorg.Eclipse.jetty.server.Request.maxFormContentSize=5000000"
Cela existe dans le script Shell que nous utilisons pour lancer notre instance de Solr.
Plus de documentation sur la taille du formulaire: http://wiki.Eclipse.org/Jetty/Howto/Configure_Form_Size
Je suis également tombé sur ce problème (exécuter Jetty dans une autre application, je n'utilise donc pas jetty.xml).
J'ai utilisé la méthode setMaxFormContentSize
sur la classe ContextHandler
, qui a corrigé l'exception "formulaire trop grand". (Voir http://wiki.Eclipse.org/Jetty/Tutorial/Embedding_Jetty#Setting_a_ServletContext pour un exemple de création/utilisation d'un gestionnaire de contexte).
<!-- 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>
Travail pour jetty 8 dans le plugin maven
webappcontext.getServletContext().getContextHandler() .setMaxFormContentSize(10000000);
J'utilise jetty 9.2.3.v20140905, et j'ai corrigé le problème, utilisez ce qui suit:
<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>
Aucune des solutions ci-dessus n'a fonctionné pour moi,
Donc, pour que cela fonctionne, je définis la propriété système avant de créer le serveur, plutôt que de le définir comme attribut du serveur
System.setProperty("org.Eclipse.jetty.server.Request.maxFormContentSize", "500000000");
Server server = ServerFactory.createServer(Host, port, contextPath, war);
Selon l'âge de votre version de Jetty utilisée (dans mon cas, jetty-5.1.14 intégrée dans Eclipse Equinox), il se peut également que la propriété doive être - org.mortbay.http.HttpRequest.maxFormContentSize.
De: 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();
Vous devez donc faire quelque chose comme ceci dans votre application au démarrage pour définir la valeur:
System.setProperty("org.mortbay.http.HttpRequest.maxFormContentSize", "10000000");
Peut-être à cause de changements dans Jetty depuis la version 7, mais je n'ai eu que du succès, comme ça:
dans jetty-web.xml, ajoutez ce qui suit à l'objet Serveur (1000000 est un exemple de taille, obv)
<Call name="setAttribute">
<Arg>org.Eclipse.jetty.server.Request.maxFormContentSize</Arg>
<Arg>1000000</Arg>
</Call>
fichier complet peut ressembler à quelque chose comme le mien
<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>
(...)
Démarrer Jenkins en ajoutant un argument en ligne de commande
- Dorg.Eclipse.jetty.server.Request.maxFormContentSize = 500000
i.e Java -Dorg.Eclipse.jetty.server.Request.maxFormContentSize = 500000 -jar jenkins.war
Si vous utilisez Jetty en mode intégré, essayez ceci.
ServletContextHandler servletHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
servletHandler.setMaxFormContentSize(1024*1024*1024);//size you want to allow.
Si vous utilisez Eclipse/spring, ajoutez ce qui suit aux arguments vm - Dorg.mortbay.jetty.Request.maxFormContentSize = -1
J'ai rencontré un problème similaire sur ActiveMQ, donc j'ai dû modifier le fichier jetty.xml et ajouter
<property name="maxFormContentSize" value="-1" />
à la propriété de gestionnaire.
de:-
<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>