【问题标题】:Tomcat returns 400 without running a servletTomcat 在不运行 servlet 的情况下返回 400
【发布时间】:2013-04-09 15:11:43
【问题描述】:

我的设备有 UBlox(硬件组件)来发送 POST HTTP/1.0 请求。

我在 Tomcat 中收到的标题如下:

POST sc2-http-connector-3.0.0/report HTTP/1.0
Content-Type: application/octet-stream
Host: xx.xx.xx.xx:8080
Connection: TE, close
TE: trailers
Content-Length: 152

请求体实际上是二进制数据。 Tomcat 只是向客户端返回 400,甚至不运行只打印标题、正文等的 servlet。

public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    System.out.println("getMethod :: " + request.getMethod());
    System.out.println("getContentLength :: " + request.getContentLength());
    System.out.println("getContentType :: " + request.getContentType());
    System.out.println("getProtocol :: " + request.getProtocol());
    System.out.println("getRemoteAddr :: " + request.getRemoteAddr());
    System.out.println("getRemoteHost :: " + request.getRemoteHost());
    System.out.println("getRemotePort :: " + request.getRemotePort());
    System.out.println("getRemoteUser :: " + request.getRemoteUser());

    printHeaders(request);

    printByteStream(request.getInputStream());

    System.out.println("------------- parts, if any -------------");
    for (Part part : request.getParts()) {
        System.out.println("size :: " + part.getSize());
        System.out.println("contentType :: " + part.getContentType());
        System.out.println("name :: " + part.getName());
        printHeaders(part);
        printByteStream(part.getInputStream());
    }

    response.setStatus(HttpServletResponse.SC_OK);
}

标题似乎没有问题。我觉得应该是数据有问题。但是,为什么 Tomcat 返回 400 并且不将控制权传递给我的 servlet?我该如何调试?

【问题讨论】:

    标签: tomcat7 java-7 servlet-3.0 http-1.0


    【解决方案1】:

    POST 命令中的路径缺少前导斜杠。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-12
      • 1970-01-01
      • 2019-09-23
      • 2011-07-25
      • 1970-01-01
      • 2022-01-22
      • 2013-02-17
      • 1970-01-01
      相关资源
      最近更新 更多