Fight the Future

Java言語とJVM、そしてJavaエコシステム全般にまつわること

POSTサイズが2Mを超えるとき

TomcatでもJBossでもPOSTサイズが2Mを超えると、デフォルトの設定のままでは次のような例外が発生する。

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/appname] - POSTされたデータが大きすぎたので、パラメータが構文解析できませんでした。そのアプリケーションが巨大なPOSTを受け付けねばならない場合には、これを解決するためにコネクタのmaxPostSize属性を使用してください。
he.catalina.core.ContainerBase.[Catalina].[localhost].[/appname].[xxxServlet] - サーブレット xxxServlet のServlet.service()が
例外を投げました
java.lang.IllegalStateException: Post too large
	at org.apache.catalina.connector.Request.parseParameters(Request.java:2368)
	at org.apache.catalina.connector.Request.getParameterNames(Request.java:1047)
	at org.apache.catalina.connector.RequestFacade.getParameterNames(RequestFacade.java:369)

これはデフォルトでPOSTのサイズが2Mになっているからであり、設定を変更する必要がある。
server.xmlのConnector要素を変更する。

    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8009" maxPostSize="4194304"
               enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />

maxPostSize属性でバイト数を指定する。4194304は4M。
0以下を指定すると無制限となる。


なおこれはあくまでPOSTのサイズであり、ファイルアップロードのサイズとはまったくかかわりがない。
multipart/form-dataのサイズ制限にはならないので注意する。