Tomcat にデプロイされた非常に単純な Java Web アプリケーションがあります。
このアプリケーションには、次のようなコードがあります。
package com.mywebapp.hello;
import javax.servlet.http.*;
import java.io.*;
public class PdfTwoServlet extends HttpServlet {
public void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException {
httpServletResponse.setContentType("application/pdf");
InputStream is = PdfTwoServlet.class.getResourceAsStream("/two.pdf");
コードをコンパイルして tomcat にデプロイすると、ディレクトリ構造は次のようになります。
これは、たとえば C:\Tomcat\webapps\myApplication の下にあります。
そう
PdfTwoServlet.class.getResourceAsStream("/two.pdf");
正常に動作し、classes フォルダーの下にあるファイル two.pdf を見つけますが、これがどのように機能するのかわかりません。
ここでプログラムによって JSF アプリケーションのプロパティ ファイルにアクセスすると、 BalusC は次のように述べています。
Class#getResourceAsStream() は、開始点として使用しているクラスの場所に相対的なパスを取ることができます。/foo/filename.properties を使用すると、実際にはクラスパス ルートから foo/filename.properties がロードされます。
2 つの質問があります。
1) クラスパスのルートが WEB-INF\classes フォルダーであるのはなぜですか? どこで決まる?(私が理解している限り、私が言ったようにコードがうまく機能しているからでしょう。)
これによると:http://docs.oracle.com/javase/tutorial/essential/environment/paths.html、ローカルマシンにクラスパスが設定されていません。それで、Tomcatを起動すると、クラスパスが設定されるのでしょうか? しかし、デプロイされている Web アプリはほとんどなく、クラスパスもほとんどありませんか?
2) PdfTwoServlet.class.getResourceAsStreamの代わりに、これを機能させるより良い方法はありますか? getClassPath().getResourceAsStrem のようなものですか?
編集:経験豊富で英語が上手な人がこの質問のタイトルを編集できるかもしれません。それで十分かどうかはわかりません。