Asynchrone Servlet mit Eingebetteten Jetty
Will ich bauen eine echte einfaches Beispiel für den Aufruf einer asynchronen servlet in einem eingebetteten Jetty-server. Wenn ich versuche zu starten, ein Runnable aus der AsyncContext der Anfrage, bekomme ich eine NullPointerException.
Dies ist der server-code:
public static void main(String[] args) throws Exception {
Server server = new Server(8080);
ServletHandler handler = new ServletHandler();
server.setHandler(handler);
ServletHolder holder = handler.addServletWithMapping(AsyncServlet.class, "/*");
holder.setAsyncSupported(true);
server.start();
server.join();
}
Dies ist die servlet-code:
public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException {
final AsyncContext ctxt = req.startAsync();
ctxt.start(() -> {
ctxt.complete();
});
}
- Und dies ist der Fehler mit stack-trace:
java.lang.NullPointerException
at org.eclipse.jetty.server.AsyncContextState$2.run(AsyncContextState.java:168)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:620)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:540)
at java.lang.Thread.run(Thread.java:745)
Vielleicht der server benötigt keine zusätzliche Konfiguration. Irgendwelche Vorschläge?
Ergänzung: Das gleiche servlet läuft ohne jede änderung in einem eingebetteten tomcat.
- Welche version von Jetty?
InformationsquelleAutor Gregor | 2014-12-28
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht verwenden
ServletHandler
direkt, das ist eine interne Klasse, dieServletContextHandler
erstellt /verwendet /verwaltet.Hier ist eine änderung Ihres Beispiel, das stellt die servlet-Kontext richtig.
Zugang
http://localhost:9090/async
, und Sie sehen die folgende Ausgabe