[JAVA] Ich habe nachgesehen, weil die Antwort beim Debuggen mit Tomcat 8 seltsam war

Als ich eine Webanwendung debuggte, die mit Ajax auf den Server zugreift, war die Antwort aus irgendeinem Grund seltsam. Weder der Antworttext noch der HTTP-Header werden zurückgegeben. Ich habe die Ursache untersucht und sie zusammengefasst.

Ausführungsumgebung

Test.java


@RestController
public class TestController {

    @RequestMapping(value = "/test.do", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public String test(HttpServletRequest request) throws Exception {
        return "{ \"success\" : true }";
    }
}

ajax.js


var req = new XMLHttpRequest();
req.open("POST", "test.do");
req.send();

Status

Ursache

Als ich tiefer und tiefer in die Schrittausführung ging, wurde in `` `NioChannel.class``` in tomcat-coyote.jar eine Ausnahme ausgelöst.

NioChannel.class


/**
 * This method should be used to check the interrupt status before
 * attempting a write.
 *
 * If a thread has been interrupted and the interrupt has not been cleared
 * then an attempt to write to the socket will fail. When this happens the
 * socket is removed from the poller without the socket being selected. This
 * results in a connection limit leak for NIO as the endpoint expects the
 * socket to be selected even in error conditions.
 */
protected void checkInterruptStatus() throws IOException {
    if (Thread.interrupted()) {
         throw new IOException(sm.getString("channel.nio.interrupted"));
    }
}

Diese Ausnahme wurde in der oberen Ebene abgefangen und als Antwort auf den Fehler neu geschrieben.

Nachwort

Ich habe jedes Mal eine Stapelverfolgung dieser Ausnahme auf der Konsole erhalten, aber ich habe sie ignoriert, weil sie 200 zurückgegeben hat. Wenn es wie ein Fehler aussieht, können Sie es nicht ignorieren. Aber ich denke, es ist eine schreckliche Falle.

Recommended Posts

Ich habe nachgesehen, weil die Antwort beim Debuggen mit Tomcat 8 seltsam war
Beim Formatieren mit SimpleDateFormat blieb ich beim Umgang mit Zeitzonen
Ich habe die Anzahl der Taxis mit Ruby überprüft
Bei der Erstellung der Top-Seite war ich mit dem Umgang mit Bildern beschäftigt (Super-Anfänger)
Als ich versuchte, mit JScrollBar automatisch zu scrollen, wurde der Ereignishandler nur einmal gezeichnet.
Was ich mit der Redmine REST API süchtig gemacht habe
Ich war verwirrt, weil es eine Aufteilung im Array gab
Die Geschichte, nach der ich beim Einrichten von STS süchtig war
Als ich mit MPAndroidChart ein Balkendiagramm erstellt habe, war die Beschriftung der x-Achse aus irgendeinem Grund falsch ausgerichtet
Was ich getan habe, als die DB nicht mit Docker-Compose gestartet wurde
Wovon ich süchtig war, als ich die Google-Authentifizierung mit Rails implementierte
UnsupportedClassVersionError wurde ausgegeben, als ich die mit Eclipse erstellte .war-Datei auf EC2 platzierte und ausführte.
Eine Geschichte, der ich mit der automatischen Starteinstellung von Tomcat 8 unter CentOS 8 zweimal verfallen war
Antwort, wenn der Tomcat-Server nicht gestartet werden kann
Memorandum: Wovon ich süchtig war, als ich auf die Accounting Freee API traf
Ich habe die Bibliothek "junit-quickcheck" überprüft, die eigenschaftsbasierte Tests mit JUnit durchführen kann.
[Java] Java soll in Ordnung sein, um Zeichenfolgen mit + zu verketten, also habe ich es überprüft
Eine Geschichte, der ich beim Testen der API mit MockMVC verfallen war
Aufgenommen, weil ich süchtig nach der Standardeingabe der Scannerklasse war
Ich war süchtig nach Scrollview, weil ich nicht auf die UIView mit variabler Größe tippen konnte
Ich war süchtig nach Unit-Tests mit dem Pufferoperator in RxJava