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