我用SparkJava框架开发了一个Web应用程序。当我从Eclipse运行该应用程序时,它运行良好。当我将其打包到jar文件中时,运行jar文件并在浏览器中打开Web应用程序,我会收到500内部错误。
控制台返回FileNotFoundException。 hbs文件位于src / main / resources / templates中。
org.eclipse.jetty.io.RuntimeIOException: java.io.FileNotFoundException: /templates/index.hbs
at spark.template.handlebars.HandlebarsTemplateEngine.render(HandlebarsTemplateEngine.java:78) ~[jar:rsrc:spark-template-handlebars-2.7.1.jar!/:?]
at App.lambda$0(App.java:42) ~[rsrc:./:?]
at spark.SparkBase$1.handle(SparkBase.java:264) ~[jar:rsrc:spark-core-2.1.jar!/:?]
at spark.webserver.MatcherFilter.doFilter(MatcherFilter.java:154) [jar:rsrc:spark-core-2.1.jar!/:?]
at spark.webserver.JettyHandler.doHandle(JettyHandler.java:60) [jar:rsrc:spark-core-2.1.jar!/:?]
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:179) [jar:rsrc:jetty-server-9.0.2.v20130417.jar!/:?]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:136) [jar:rsrc:jetty-server-9.0.2.v20130417.jar!/:?]
at org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:52) [jar:rsrc:jetty-server-9.0.2.v20130417.jar!/:?]
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) [jar:rsrc:jetty-server-9.0.2.v20130417.jar!/:?]
at org.eclipse.jetty.server.Server.handle(Server.java:451) [jar:rsrc:jetty-server-9.0.2.v20130417.jar!/:?]
at org.eclipse.jetty.server.HttpChannel.run(HttpChannel.java:252) [jar:rsrc:jetty-server-9.0.2.v20130417.jar!/:?]
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:266) [jar:rsrc:jetty-server-9.0.2.v20130417.jar!/:?]
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.run(AbstractConnection.java:240) [jar:rsrc:jetty-io-9.0.2.v20130417.jar!/:?]
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:596) [jar:rsrc:jetty-util-9.0.2.v20130417.jar!/:?]
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:527) [jar:rsrc:jetty-util-9.0.2.v20130417.jar!/:?]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_181]
Caused by: java.io.FileNotFoundException: /templates/index.hbs
at com.github.jknack.handlebars.io.URLTemplateLoader.sourceAt(URLTemplateLoader.java:70) ~[jar:rsrc:handlebars-4.0.6.jar!/:?]
at com.github.jknack.handlebars.Handlebars.compile(Handlebars.java:357) ~[jar:rsrc:handlebars-4.0.6.jar!/:?]
at com.github.jknack.handlebars.Handlebars.compile(Handlebars.java:343) ~[jar:rsrc:handlebars-4.0.6.jar!/:?]
at spark.template.handlebars.HandlebarsTemplateEngine.render(HandlebarsTemplateEngine.java:75) ~[jar:rsrc:spark-template-handlebars-2.7.1.jar!/:?]
我不明白的是,为什么当我在Eclipse中运行它但不能将其包装到罐子中时,它为什么能工作?
知道可能是什么问题吗?
答案 0 :(得分:1)
URLTemplateLoader.sourceAt()抛出此错误,因为getResource()返回null,这是代码:
protected URL getResource(final String location) throws IOException {
File file = new File(location);
return file.exists() ? file.toURI().toURL() : null;
}
您将相对路径传递给File构造函数,并且从工作目录中解决了该问题。
路径名,无论是抽象的还是字符串形式的,都可以是绝对的或相对的。绝对路径名是完整的,因为不需要其他信息即可找到它表示的文件。相反,相对路径名必须根据从其他路径名获取的信息来解释。默认情况下,java.io包中的类始终针对当前用户目录解析相对路径名。该目录由系统属性user.dir命名,通常是在其中调用Java虚拟机的目录。
答案 1 :(得分:0)