2013-04-23 5 views
0

У меня есть веб-приложение Java/Maven с использованием инфраструктуры Spark, которую я пытаюсь развернуть на удаленном сервере Tomcat, используя плагин Cargo. Я никогда не делал этого с помощью Java, и мне сложно заниматься статическими файлами. Структура каталогов для моей разобранной войны:Веб-приложение Maven на удаленном сервере: отсутствующие html-файлы

приложения имя

- META-INF

- общественное

---- image.jpg

--- - HTML

------ Index.html

- WEB-INF

Когда я использую следующий код:

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

Я могу вынести штраф изображения. Я также могу получить доступ как к изображениям, так и к html-файлу, перейдя по адресу domain.com:8080/app-name/public/image.jpg и domain.com:8080/app-name/public/html/Index.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. Он отлично работает на localhost (и работает функция рендеринга). Я просто не могу найти файл Index.html на удаленном сервере.

Для знакомых с Spark, вы знаете, что на самом деле нет тонны примеров. Я как бы подхожу, когда я иду, и я надеялся, что покажу изображение, что я на правильном пути. У кого-нибудь есть предложения? Я подозреваю, что это, должно быть, проблема с classpath, но я сейчас немного озадачен этим. Я показал только наиболее релевантные фрагменты; Я могу разместить больше, если потребуется!

EDIT: Исключение:

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', полный путь? –

+0

@SotiriosDelimanolis FileNotFoundexception не включает имя файла, который не найден. –

+0

@ ThorbjørnRavnAndersen Он должен показать что-то вроде 'java.io.FileNotFoundException: \ my \ file.txt (система не может найти указанный путь)' –

ответ

1

Прежде всего, вы не можете полагаться на относительные пути. Вы не знаете, где JVM, в котором вы работаете, выбрали установку текущего рабочего каталога.

Кроме того, спецификация сервлета не позволяет вам напрямую обращаться к файлам, и вы не можете полагаться на взорванную войну. Естественное место для таких источников находится на пути класса и читается как ресурсы.

+0

Несколько вопросов, и спасибо за ваше время в ответе: 1. Почему я не всегда могу полагаться на взорванную войну? Когда это не будет? 2. Можете ли вы дать мне подсказку о том, что я должен делать вместо этого? Я видел много сообщений Class.getResource(). Это то, что я должен делать? – chrissy

+0

Потому что это зависит от каждого поставщика, как они хотят это делать. То, что вы должны делать, сильно зависит от того, что вам нужно делать, и почему вам нужно это делать. –

Смежные вопросы