- Jakarta Servlet 5 のライフサイクル中における例外について
- 例外の種類はぱっと見
ServletException
とUnavailableException
の2つがあるServletException
を継承しているのがUnavailableException
ServletException ▲ │ │ │ │ UnavailableException
- まずはサーブレットを初期化するタイミングでこれらの例外が発生する場合
- 実際に動かしてみる
- サーバーはJetty
$ java -jar $JETTY_HOME/start.jar --version Jetty Server Classpath: ----------------------- Version Information on 22 entries in the classpath. Note: order presented here is how they would appear on the classpath. changes to the --module=name command line options will be reflected here. 0: (dir) | ${jetty.base}/resources 1: 2.0.0-alpha1 | ${jetty.home}/lib/logging/slf4j-api-2.0.0-alpha1.jar 2: 11.0.6 | ${jetty.home}/lib/logging/jetty-slf4j-impl-11.0.6.jar 3: 5.0.2 | ${jetty.home}/lib/jetty-jakarta-servlet-api-5.0.2.jar 4: 11.0.6 | ${jetty.home}/lib/jetty-http-11.0.6.jar 5: 11.0.6 | ${jetty.home}/lib/jetty-server-11.0.6.jar 6: 11.0.6 | ${jetty.home}/lib/jetty-xml-11.0.6.jar 7: 11.0.6 | ${jetty.home}/lib/jetty-util-11.0.6.jar 8: 11.0.6 | ${jetty.home}/lib/jetty-io-11.0.6.jar 9: 11.0.6 | ${jetty.home}/lib/jetty-jndi-11.0.6.jar 10: 11.0.6 | ${jetty.home}/lib/jetty-security-11.0.6.jar 11: 11.0.6 | ${jetty.home}/lib/jetty-servlet-11.0.6.jar 12: 11.0.6 | ${jetty.home}/lib/jetty-webapp-11.0.6.jar 13: 11.0.6 | ${jetty.home}/lib/jetty-plus-11.0.6.jar 14: 2.0.0 | ${jetty.home}/lib/jakarta.transaction-api-2.0.0.jar 15: 11.0.6 | ${jetty.home}/lib/jetty-annotations-11.0.6.jar 16: 9.1 | ${jetty.home}/lib/annotations/asm-9.1.jar 17: 9.1 | ${jetty.home}/lib/annotations/asm-analysis-9.1.jar 18: 9.1 | ${jetty.home}/lib/annotations/asm-commons-9.1.jar 19: 9.1 | ${jetty.home}/lib/annotations/asm-tree-9.1.jar 20: 2.0.0 | ${jetty.home}/lib/annotations/jakarta.annotation-api-2.0.0.jar 21: 11.0.6 | ${jetty.home}/lib/jetty-deploy-11.0.6.jar
- プロジェクト構成
. ├── pom.xml └── src └── main └── java └── org └── example └── servlet └── DemoServlet.java 6 directories, 2 files
- pom
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>servlet</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <name>Servlet Maven Webapp</name> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>5.0.0</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.2.2</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> </build> </project>
- DemoServlet.java
ServletException
をスローする
package org.example.servlet; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; @WebServlet(urlPatterns = "/") public class DemoServlet extends HttpServlet { @Override public void init() throws ServletException { log("Servlet init"); throw new ServletException("demo exception"); } @Override public void destroy() { log("Servlet destroy"); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { log("Servlet handle get request"); PrintWriter writer = resp.getWriter(); writer.write("hello from Jakarta Servlet 5"); } }
- 起動すると以下のログが出力される
- リクエストを投げても 404 が返ってくるようになる
- ログを見る限り
destroy
メソッドも呼び出されていない
2021-09-26 13:25:31.678:INFO :oejshC.servlet_1_0_SNAPSHOT:qtp1175259735-26: org.example.servlet.DemoServlet: Servlet init 2021-09-26 13:25:31.678:WARN :oejshC.servlet_1_0_SNAPSHOT:qtp1175259735-26: unavailable jakarta.servlet.ServletException: demo exception at org.example.servlet.DemoServlet.init(DemoServlet.java:18) at jakarta.servlet.GenericServlet.init(GenericServlet.java:178) at org.eclipse.jetty.servlet.ServletHolder$Wrapper.init(ServletHolder.java:1305) at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:633) at org.eclipse.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:486) at org.eclipse.jetty.servlet.ServletHolder.prepare(ServletHolder.java:731) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:503) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:131) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:580) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:223) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1571) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:221) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1370) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:176) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:463) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1544) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:174) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1292) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:129) at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:192) at org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:51) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122) at org.eclipse.jetty.server.Server.handle(Server.java:562) at org.eclipse.jetty.server.HttpChannel.lambda$handle$0(HttpChannel.java:406) at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:663) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:398) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:282) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:319) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:100) at org.eclipse.jetty.io.SocketChannelEndPoint$1.run(SocketChannelEndPoint.java:101) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:894) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1038) at java.base/java.lang.Thread.run(Thread.java:831) 2021-09-26 13:25:31.679:WARN :oejs.HttpChannel:qtp1175259735-26: /servlet-1.0-SNAPSHOT/ jakarta.servlet.ServletException: demo exception at org.example.servlet.DemoServlet.init(DemoServlet.java:18) at jakarta.servlet.GenericServlet.init(GenericServlet.java:178) at org.eclipse.jetty.servlet.ServletHolder$Wrapper.init(ServletHolder.java:1305) at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:633) at org.eclipse.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:486) at org.eclipse.jetty.servlet.ServletHolder.prepare(ServletHolder.java:731) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:503) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:131) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:580) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:223) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1571) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:221) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1370) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:176) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:463) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1544) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:174) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1292) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:129) at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:192) at org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:51) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122) at org.eclipse.jetty.server.Server.handle(Server.java:562) at org.eclipse.jetty.server.HttpChannel.lambda$handle$0(HttpChannel.java:406) at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:663) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:398) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:282) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:319) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:100) at org.eclipse.jetty.io.SocketChannelEndPoint$1.run(SocketChannelEndPoint.java:101) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:894) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1038) at java.base/java.lang.Thread.run(Thread.java:831)
- 次に
UnavailableException
をスローしてみる
package org.example.servlet; import jakarta.servlet.ServletException; import jakarta.servlet.UnavailableException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; @WebServlet(urlPatterns = "/") public class DemoServlet extends HttpServlet { @Override public void init() throws ServletException { log("Servlet init"); throw new UnavailableException("demo exception"); } @Override public void destroy() { log("Servlet destroy"); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { log("Servlet handle get request"); PrintWriter writer = resp.getWriter(); writer.write("hello from Jakarta Servlet 5"); } }
- デプロイすると以下のログが出てくる
ServletException
と異なり、スタックトレースが出てきていない- この違いは以外だった。ログだけ見ると、サーブレットの起動に成功しているように見える。
- アクセスすると404が出力される
2021-09-26 13:29:16.228:INFO :oejshC.servlet_1_0_SNAPSHOT:qtp1175259735-25: org.example.servlet.DemoServlet: Servlet init
- 次に秒数を指定して
UnavailableException
をスローしてみる
package org.example.servlet; import jakarta.servlet.ServletException; import jakarta.servlet.UnavailableException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; @WebServlet(urlPatterns = "/") public class DemoServlet extends HttpServlet { @Override public void init() throws ServletException { log("Servlet init"); throw new UnavailableException("demo exception", 10); } @Override public void destroy() { log("Servlet destroy"); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { log("Servlet handle get request"); PrintWriter writer = resp.getWriter(); writer.write("hello from Jakarta Servlet 5"); } }
- 起動するとログはこう
- 起動して10秒間は 503 が返されるが、10秒くらいたった後だと 200 が返されリクエストが処理されるようになる
- 一行目と二行目のログの時間をみてもらえれば約10秒間差があるのがわかる
- スタックトレースはログに出てこない
021-09-26 13:33:19.598:INFO :oejshC.servlet_1_0_SNAPSHOT:qtp293907205-25: org.example.servlet.DemoServlet: Servlet init 2021-09-26 13:33:30.067:INFO :oejshC.servlet_1_0_SNAPSHOT:qtp293907205-25: org.example.servlet.DemoServlet: Servlet handle get request
- 最後に
RuntimeException
をスローしてみる
package org.example.servlet; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; @WebServlet(urlPatterns = "/") public class DemoServlet extends HttpServlet { @Override public void init() { log("Servlet init"); throw new RuntimeException("demo exception"); } @Override public void destroy() { log("Servlet destroy"); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { log("Servlet handle get request"); PrintWriter writer = resp.getWriter(); writer.write("hello from Jakarta Servlet 5"); } }
- ログはこう
- リクエストを投げると 404 が返ってくる
- これまでと同様
destroy
メソッドは呼ばれない
2021-09-26 13:38:34.255:INFO :oejshC.servlet_1_0_SNAPSHOT:qtp293907205-25: org.example.servlet.DemoServlet: Servlet init 2021-09-26 13:38:34.255:WARN :oejshC.servlet_1_0_SNAPSHOT:qtp293907205-25: unavailable java.lang.RuntimeException: demo exception at org.example.servlet.DemoServlet.init(DemoServlet.java:17) at jakarta.servlet.GenericServlet.init(GenericServlet.java:178) at org.eclipse.jetty.servlet.ServletHolder$Wrapper.init(ServletHolder.java:1305) at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:633) at org.eclipse.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:486) at org.eclipse.jetty.servlet.ServletHolder.prepare(ServletHolder.java:731) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:503) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:131) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:580) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:223) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1571) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:221) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1370) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:176) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:463) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1544) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:174) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1292) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:129) at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:192) at org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:51) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122) at org.eclipse.jetty.server.Server.handle(Server.java:562) at org.eclipse.jetty.server.HttpChannel.lambda$handle$0(HttpChannel.java:406) at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:663) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:398) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:282) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:319) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:100) at org.eclipse.jetty.io.SocketChannelEndPoint$1.run(SocketChannelEndPoint.java:101) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:894) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1038) at java.base/java.lang.Thread.run(Thread.java:831) 2021-09-26 13:38:34.257:WARN :oejs.HttpChannel:qtp293907205-25: /servlet-1.0-SNAPSHOT/ jakarta.servlet.ServletException: org.example.servlet.DemoServlet==org.example.servlet.DemoServlet@3134ca0b{jsp=null,order=-1,inst=true,async=false,src=ANNOTATION:org.example.servlet.DemoServlet,STARTED} at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:651) at org.eclipse.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:486) at org.eclipse.jetty.servlet.ServletHolder.prepare(ServletHolder.java:731) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:503) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:131) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:580) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:223) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1571) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:221) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1370) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:176) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:463) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1544) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:174) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1292) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:129) at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:192) at org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:51) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122) at org.eclipse.jetty.server.Server.handle(Server.java:562) at org.eclipse.jetty.server.HttpChannel.lambda$handle$0(HttpChannel.java:406) at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:663) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:398) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:282) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:319) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:100) at org.eclipse.jetty.io.SocketChannelEndPoint$1.run(SocketChannelEndPoint.java:101) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:894) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1038) at java.base/java.lang.Thread.run(Thread.java:831) Caused by: java.lang.RuntimeException: demo exception at org.example.servlet.DemoServlet.init(DemoServlet.java:17) at jakarta.servlet.GenericServlet.init(GenericServlet.java:178) at org.eclipse.jetty.servlet.ServletHolder$Wrapper.init(ServletHolder.java:1305) at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:633) at org.eclipse.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:486) at org.eclipse.jetty.servlet.ServletHolder.prepare(ServletHolder.java:731) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:503) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:131) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:580) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:223) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1571) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:221) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1370) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:176) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:463) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1544) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:174) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1292) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:129) at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:192) at org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:51) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122) at org.eclipse.jetty.server.Server.handle(Server.java:562) at org.eclipse.jetty.server.HttpChannel.lambda$handle$0(HttpChannel.java:406) at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:663) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:398) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:282) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:319) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:100) at org.eclipse.jetty.io.SocketChannelEndPoint$1.run(SocketChannelEndPoint.java:101) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:894) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1038) at java.base/java.lang.Thread.run(Thread.java:831)
アスキーアートはこのツールを使ってみた https://asciiflow.com/