0

Cargo プラグインを使用してリモート Tomcat サーバーにデプロイしようとしている Spark フレームワークを使用する Java/Maven Web アプリを持っています。Java を使用してこれを行ったことがなく、静的ファイルを扱うのに苦労しています。私の爆発した戦争のディレクトリ構造は次のとおりです。

アプリ名

-- メタ-INF

- 公衆

---- 画像.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 で行き詰まります。localhost で正常に動作します (レンダリング機能も動作します)。リモート サーバーで 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)
4

1 に答える 1

1

まず、相対パスに頼ることはできません。現在の作業ディレクトリを設定することを選択したために、実行している JVM がどこにあるのかわかりません。

また、サーブレットの仕様上、直接ファイルにアクセスすることはできず、戦争が炸裂することに頼ることはできません。この種のソースの自然な場所はクラスパス上にあり、リソースとして読み取られます。

于 2013-04-23T20:24:37.030 に答える