DefaultServlet 的问题
Problems with DefaultServlet
我在我的应用程序中嵌入了码头服务器,并使用 WebAppContext return 静态文件(.html、.png 等)和存储 servlet。当我尝试从浏览器获取静态时,我收到由异常引起的 503 错误,但 servlet 工作正常。正如我从堆栈跟踪中了解到的那样,WebAppContext 试图将 DefaultServlet 用于 return 静态文件。我尝试将 DefaultServlet 设置为“/*”路径,但仍然出现该异常。在没有 DefaultServlet 的情况下,WebAppContext 是否有另一种 return 静态文件的方法?
我尝试使用 ResourceHandler 而不是 WebAppContext,它工作正常但忽略了 jetty 登录约束(也尝试使用 WebAppContext 打开并且没有约束并得到相同的错误)
异常:
2019-03-31 18:14:28.344:WARN:oejs.ServletHandler:qtp129498568-21: Error for /reg.html
java.lang.NoSuchMethodError: org.eclipse.jetty.http.HttpContent.getContentLength()J
at org.eclipse.jetty.servlet.DefaultServlet.sendData(DefaultServlet.java:865)
at org.eclipse.jetty.servlet.DefaultServlet.doGet(DefaultServlet.java:531)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:781)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:553)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1126)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1060)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:113)
at org.eclipse.jetty.server.Server.handle(Server.java:509)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:288)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:240)
at org.eclipse.jetty.io.AbstractConnection.run(AbstractConnection.java:539)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:620)
at org.eclipse.jetty.util.thread.QueuedThreadPool.run(QueuedThreadPool.java:540)
at java.base/java.lang.Thread.run(Thread.java:834)
代码:
Server server = new Server(8080);
String htmlResourcesPath = "web";
WebAppContext webAppContext = new WebAppContext();
webAppContext.setContextPath("/");
webAppContext.setResourceBase(htmlResourcesPath);
webAppContext.setParentLoaderPriority(true);
webAppContext.addServlet(RedirectServlet.class, "");
webAppContext.addServlet(RegisterServlet.class, "/reg");
webAppContext.addServlet(AuthServlet.class, "/auth");
server.setHandler(webAppContext);
java.lang.NoSuchMethodError: org.eclipse.jetty.http.HttpContent.getContentLength()J
您的 Jetty JAR 文件版本不匹配。
确保您的项目中所有 Jetty JAR 文件只有 1 个版本。
如果您正在使用 embedded-jetty
,那么您将不会使用 jetty-maven-plugin
,因此请选择其中之一,但不要同时选择两者。
感谢大家的帮助。只需说明:
我使用了 2 个码头版本:
<!--dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>9.3.0.M1</version>
</dependency-->
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-webapp</artifactId>
<version>9.3.0.M0</version>
</dependency>
我认为 jetty-webapp 是对 jetty-server 的补充,但它们是相互冲突的独立库
我在我的应用程序中嵌入了码头服务器,并使用 WebAppContext return 静态文件(.html、.png 等)和存储 servlet。当我尝试从浏览器获取静态时,我收到由异常引起的 503 错误,但 servlet 工作正常。正如我从堆栈跟踪中了解到的那样,WebAppContext 试图将 DefaultServlet 用于 return 静态文件。我尝试将 DefaultServlet 设置为“/*”路径,但仍然出现该异常。在没有 DefaultServlet 的情况下,WebAppContext 是否有另一种 return 静态文件的方法?
我尝试使用 ResourceHandler 而不是 WebAppContext,它工作正常但忽略了 jetty 登录约束(也尝试使用 WebAppContext 打开并且没有约束并得到相同的错误)
异常:
2019-03-31 18:14:28.344:WARN:oejs.ServletHandler:qtp129498568-21: Error for /reg.html
java.lang.NoSuchMethodError: org.eclipse.jetty.http.HttpContent.getContentLength()J
at org.eclipse.jetty.servlet.DefaultServlet.sendData(DefaultServlet.java:865)
at org.eclipse.jetty.servlet.DefaultServlet.doGet(DefaultServlet.java:531)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:781)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:553)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1126)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1060)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:113)
at org.eclipse.jetty.server.Server.handle(Server.java:509)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:288)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:240)
at org.eclipse.jetty.io.AbstractConnection.run(AbstractConnection.java:539)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:620)
at org.eclipse.jetty.util.thread.QueuedThreadPool.run(QueuedThreadPool.java:540)
at java.base/java.lang.Thread.run(Thread.java:834)
代码:
Server server = new Server(8080);
String htmlResourcesPath = "web";
WebAppContext webAppContext = new WebAppContext();
webAppContext.setContextPath("/");
webAppContext.setResourceBase(htmlResourcesPath);
webAppContext.setParentLoaderPriority(true);
webAppContext.addServlet(RedirectServlet.class, "");
webAppContext.addServlet(RegisterServlet.class, "/reg");
webAppContext.addServlet(AuthServlet.class, "/auth");
server.setHandler(webAppContext);
java.lang.NoSuchMethodError: org.eclipse.jetty.http.HttpContent.getContentLength()J
您的 Jetty JAR 文件版本不匹配。
确保您的项目中所有 Jetty JAR 文件只有 1 个版本。
如果您正在使用 embedded-jetty
,那么您将不会使用 jetty-maven-plugin
,因此请选择其中之一,但不要同时选择两者。
感谢大家的帮助。只需说明:
我使用了 2 个码头版本:
<!--dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>9.3.0.M1</version>
</dependency-->
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-webapp</artifactId>
<version>9.3.0.M0</version>
</dependency>
我认为 jetty-webapp 是对 jetty-server 的补充,但它们是相互冲突的独立库