在 apache 中请求太大 tomcat 8.5
Request Too Large in apache tomcat 8.5
我在向后端提交 post 时遇到错误 'request too large'。当我在文件 server.xml
内的连接器中添加属性 maxPostSize="4194304" 时,问题就消失了。但是我不想更改server.xml
文件,我想更改WebContent/WEB-INF中的文件web.xml
。
我尝试在 web.xml
文件中使用以下内容:
<multipart-config>
<file-size-threshold>0</file-size-threshold>
<max-file-size>209715200</max-file-size>
<max-request-size>209715200</max-request-size>
</multipart-config>
但是并没有解决问题
有人可以告诉我如何通过修改 web.xml 文件来解决这个问题吗?
我正在使用 java servlet。
案例 1。当您在 web.xml
中使用 <servlet>
标记设置 Servlet 时
您可以在<servlet>
标签中写入配置代码。
例如:
<servlet>
<servlet-name>TestServlet</servlet-name>
<servlet-class>com.foo.bar.FileUpload</servlet-class>
<multipart-config>
<max-file-size>209715200</max-file-size>
<max-request-size>209715200</max-request-size>
<file-size-threshold>0</file-size-threshold>
</multipart-config>
</servlet>
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/test/files/*</url-pattern>
</servlet-mapping>
案例 2。当您使用 @WebServlet
Annotation
设置 Servlet 时
您可以在 Servlet 上使用 @MultipartConfig
注释 Class。
例如:
@MultipartConfig(
maxFileSize = 209715200,
maxRequestSize = 209715200,
fileSizeThreshold = 0
)
<multipart-config>
仅适用于作为 multipart/form-data
发布的表单,即您在 HTML:
中需要这样的表单
<form action="/your-uri" method="post" enctype="multipart/form-data">
...
</form>
如果您没有明确指定 enctype
属性,则使用 application/x-www-form-urlencoded
发布请求并应用连接器的 maxPostSize
。
编辑: 如果您不希望 Tomcat 解析 POST
请求(即您既不调用 HttpServletRequest#getParameter
也不HttpServletRequest#getPart
或类似),实际上对请求的大小没有限制。例如。你可以测试:
public class TestServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try (final InputStream is = req.getInputStream()) {
final long length = is.skip(Long.MAX_VALUE);
try (final PrintWriter writer = resp.getWriter()) {
writer.append("Number of bytes read: ");
writer.println(length);
}
}
}
}
然后使用curl --request POST --data-binary @<file_name> <servlet_URI>
将数据发送到servlet。
我在向后端提交 post 时遇到错误 'request too large'。当我在文件 server.xml
内的连接器中添加属性 maxPostSize="4194304" 时,问题就消失了。但是我不想更改server.xml
文件,我想更改WebContent/WEB-INF中的文件web.xml
。
我尝试在 web.xml
文件中使用以下内容:
<multipart-config>
<file-size-threshold>0</file-size-threshold>
<max-file-size>209715200</max-file-size>
<max-request-size>209715200</max-request-size>
</multipart-config>
但是并没有解决问题
有人可以告诉我如何通过修改 web.xml 文件来解决这个问题吗?
我正在使用 java servlet。
案例 1。当您在 web.xml
<servlet>
标记设置 Servlet 时
您可以在<servlet>
标签中写入配置代码。
例如:
<servlet>
<servlet-name>TestServlet</servlet-name>
<servlet-class>com.foo.bar.FileUpload</servlet-class>
<multipart-config>
<max-file-size>209715200</max-file-size>
<max-request-size>209715200</max-request-size>
<file-size-threshold>0</file-size-threshold>
</multipart-config>
</servlet>
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/test/files/*</url-pattern>
</servlet-mapping>
案例 2。当您使用 @WebServlet
Annotation
您可以在 Servlet 上使用 @MultipartConfig
注释 Class。
例如:
@MultipartConfig(
maxFileSize = 209715200,
maxRequestSize = 209715200,
fileSizeThreshold = 0
)
<multipart-config>
仅适用于作为 multipart/form-data
发布的表单,即您在 HTML:
<form action="/your-uri" method="post" enctype="multipart/form-data">
...
</form>
如果您没有明确指定 enctype
属性,则使用 application/x-www-form-urlencoded
发布请求并应用连接器的 maxPostSize
。
编辑: 如果您不希望 Tomcat 解析 POST
请求(即您既不调用 HttpServletRequest#getParameter
也不HttpServletRequest#getPart
或类似),实际上对请求的大小没有限制。例如。你可以测试:
public class TestServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try (final InputStream is = req.getInputStream()) {
final long length = is.skip(Long.MAX_VALUE);
try (final PrintWriter writer = resp.getWriter()) {
writer.append("Number of bytes read: ");
writer.println(length);
}
}
}
}
然后使用curl --request POST --data-binary @<file_name> <servlet_URI>
将数据发送到servlet。