Incrementar el tamaño máximo del POST de Tomcat

Un equipo de desarrollo quería usar el Manager App de Tomcat para desplegar de los war). Aunque al intentar subir war de más de 50MB les arrojaba el siguiente error Message: FAIL - Tried to use command /upload via a GET request but POST is required.

El log manager.log registró el siguiente error:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
SEVERE: HTMLManager: FAIL - Deploy Upload Failed, Exception: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (68626547) exceeds the configured maximum (52428800)
java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (68626547) exceeds the configured maximum (52428800)
at org.apache.catalina.connector.Request.parseParts(Request.java:2929)
at org.apache.catalina.connector.Request.parseParameters(Request.java:3252)
at org.apache.catalina.connector.Request.getParameter(Request.java:1158)
at org.apache.catalina.connector.RequestFacade.getParameter(RequestFacade.java:382)
at org.apache.catalina.filters.CsrfPreventionFilter.doFilter(CsrfPreventionFilter.java:108)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:614)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:958)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:452)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1087)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
Caused by: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (68626547) exceeds the configured maximum (52428800)
at org.apache.tomcat.util.http.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:815)
at org.apache.tomcat.util.http.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:259)
at org.apache.tomcat.util.http.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:283)
at org.apache.catalina.connector.Request.parseParts(Request.java:2859)
... 27 more

Solución

La solución pasa por incrementar el tamaño máximo del POST de Tomcat, en este ejemplo a 100MB (104857600 bytes) así como del Manager App editando los siguientes archivos:

  • Tomcat: Editar el archivo /conf/server.xml y añadir el atributo maxPostSize="104857600" al conector de Tomcat.
  • Manager App: Editar el archivo webapps/manager/WEB-INF/web.xml y modificar los parámetros

Editar el conector de Tomcat

1
2
3
4
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
maxPostSize="104857600"
redirectPort="8443" />

Editar el Manager App

1
2
3
4
5
6
<multipart-config>
<!-- 100MB max -->
<max-file-size>104857600</max-file-size>
<max-request-size>104857600</max-request-size>
<file-size-threshold>0</file-size-threshold>
</multipart-config>

Entradas de interés

Contenidos
  1. 1. Solución
    1. 1.1. Editar el conector de Tomcat
    2. 1.2. Editar el Manager App