簡體   English   中英

表格太大異常

[英]Form too Large Exception

當我使用 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)......

當我在谷歌搜索幫助時,他們會提供一些幫助,例如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 或更高版本

自第 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);

此代碼適用於我正在使用的 jetty 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 實例的 shell 腳本中。

有關表單大小的更多文檔: http : //wiki.eclipse.org/Jetty/Howto/Configure_Form_Size

我也遇到了這個問題(運行嵌入在另一個應用程序中的 Jetty,所以我沒有使用 jetty.xml)。

我在ContextHandler類上使用了setMaxFormContentSize方法,該方法修復了“表單太大”異常。 (有關創建/使用上下文處理程序的示例,請參閱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 版本的年齡(在我的情況下,嵌入在 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");

以上解決方案都不適合我,

因此,為了完成這項工作,我在創建服務器之前設置了系統屬性,而不是將其設置為服務器屬性

 System.setProperty("org.eclipse.jetty.server.Request.maxFormContentSize", "500000000");

 Server server = ServerFactory.createServer(host, port, contextPath, war);

我使用碼頭 9.2.3.v20140905,我使用以下方法解決了問題:

  • 配置 pom.xml

 <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>

  • 配置jetty.xml

 <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>

可能是因為自第 7 版以來 Jetty 發生了變化,但我只有這樣的成功:

在 jetty-web.xml 中,將以下內容添加到 Server 對象(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>
(...)

參考http://wiki.eclipse.org/Jetty/Howto/Configure_Form_Size

如果您從 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>

通過添加命令行參數啟動 jenkins
-Dorg.eclipse.jetty.server.Request.maxFormContentSize=500000

即 java -Dorg.eclipse.jetty.server.Request.maxFormContentSize=500000 -jar jenkins.war

如果您在嵌入式模式下使用碼頭,請嘗試此操作。

    ServletContextHandler servletHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
    servletHandler.setMaxFormContentSize(1024*1024*1024);//size you want to allow.

我使用 Spring boot 並在 application.properties 中設置server.jetty.max-http-post-size: maxSize來修復它。

server.jetty.max-http-post-size: 500000

ActiveMQ:

這里的問題在於 Jetty,ActiveMQ 基於它。 您可以在此處找到更多詳細信息,文檔

溶液是apache-activemq-5.9.0/bin/win64/wrapper.conf文件中,添加以下行B后(見下文)。

  • wrapper.java.additional.16=-Dorg.eclipse.jetty.server.Request.maxFormContentSize=1000000
  • b : wrapper.java.additional.15=-Djava.security.auth.login.config=%ACTIVEMQ_CONF%/login.config

如果您在 32 位計算機上運行,​​請在apache-activemq-5.9.0/bin/win32/wrapper.conf添加相同的行。

快樂編碼..

jetty/webapps設置 -> 配置.xml (例如jetty-web.xml )文件

"-1"表示無限內容

<Set name="maxFormContentSize" type="int">600000</Set>

<Set name="maxFormContentSize" type="int">-1</Set>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM