2013-04-23 99 views
0

我有一个使用Spark框架的Java/Maven web应用程序,我试图使用Cargo插件将其部署到远程Tomcat服务器。我从来没有用Java做过这件事,而且我在处理静态文件方面遇到困难。我展开战争的目录结构:远程服务器上的Maven web应用程序:缺少html文件

应用程序名称

- META-INF

- 公共

---- image.jpg的

--- - html

------ Index.html

- WEB-INF

当我使用下面的代码:

return "<html><body><img src='/app-name/public/image.jpg' /></body></html>"; 

我能够呈现图像细腻。我也可以通过访问domain.com:8080/app-name/public/image.jpg和domain.com:8080/app-name/public/html/Index.html 访问图像和html文件。但是,当我试图呈现HTML使用... ...

// location of the file on the server... 
file = "/app-name/public/html" + file; 
// location of the file on localhost 
//file = "public/html/" + file; 
BufferedReader buffer = new BufferedReader(new FileReader(file)); 

我卡住了FileNotFoundException。它在本地主机上正常工作(并且渲染功能也起作用)。我无法在远程服务器上找到Index.html文件。

对于那些熟悉Spark的人来说,你知道那里并不是很多的例子。我很喜欢这样做,我希望通过展示我处于正确轨道的形象。任何人有任何建议?不知怎的,我怀疑它一定是一个类路径问题,但我现在对此有点困惑。我只显示了最相关的片段;如果需要,我可以发布更多!

编辑:唯一的例外是:

所有的
java.io.FileNotFoundException: /app-name/public/html/Index.html (No such file or directory) 
    at java.io.FileInputStream.open(Native Method) 
    at java.io.FileInputStream.<init>(FileInputStream.java:138) 
    at java.io.FileInputStream.<init>(FileInputStream.java:97) 
    at java.io.FileReader.<init>(FileReader.java:58) 
    at com.render.Render.parseFile(Render.java:35) 
    at com.render.Render.render(Render.java:23) 
    at com.main.Main$1.handle(Main.java:41) 
    at spark.webserver.MatcherFilter.doFilter(MatcherFilter.java:136) 
    at spark.servlet.SparkFilter.doFilter(SparkFilter.java:98) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
    at java.lang.Thread.run(Thread.java:722) 
+0

什么是完整的'FileNotFoundException'说,完整路径? – 2013-04-23 20:16:14

+0

@SotiriosDelimanolis FileNotFoundexception不包含未找到文件的名称。 – 2013-04-23 20:25:16

+0

@ThorbjørnRavnAndersen它应该显示类似于'java.io.FileNotFoundException:\ my \ file.txt(系统找不到指定的路径)' – 2013-04-23 20:27:25

回答

1

首先,你不能依靠相对路径。你不知道你正在执行的JVM在哪里,选择了设置当前工作目录。

此外,servlet规范不允许您直接访问文件,也不能依赖爆炸的战争。这些源的自然位置在Classpath上,并作为资源阅读。

+0

有几个问题,并感谢您回答的时间:1.为什么我不能总是依靠战争爆炸?什么时候不会? 2.你能给我一个我应该做什么的暗示吗?我已经看到很多Class.getResource()帖子。这是我应该做的事吗? – chrissy 2013-04-23 20:57:36

+0

因为这取决于每个供应商他们想如何做。你应该做什么,很大程度上取决于你实际需要什么,以及为什么你需要这样做。 – 2013-04-23 21:10:30

相关问题