ファイルをWEB-INFディレクトリに置いたWebアーカイブがあります。WebアーカイブのWEB-INFディレクトリからリソースをロードする方法
このファイルをJavaクラスにロードするにはどうすればよいですか?
私はクラスのディレクトリに配置し、そこから読み込むことができます知っている。 WEB-INFに入れるだけです。
ファイルをWEB-INFディレクトリに置いたWebアーカイブがあります。WebアーカイブのWEB-INFディレクトリからリソースをロードする方法
このファイルをJavaクラスにロードするにはどうすればよいですか?
私はクラスのディレクトリに配置し、そこから読み込むことができます知っている。 WEB-INFに入れるだけです。
ServletContextオブジェクトでgetResourceAsStream()
メソッドを使用します。
servletContext.getResourceAsStream("/WEB-INF/myfile");
ServletContextへの参照は、アプリケーションによって異なります。サーブレットまたはJSPから行いますか?
EDITED:サーブレットオブジェクトの内部にいる場合は、getServletContext()
を呼び出します。 JSPの場合は、事前定義変数application
を使用してください。
サーブレットを使用していない私はどのように動作しますか?
のは、私はプロジェクト/ WebContentをでのweb.xmlにアクセスしようとしていましょう/ WEB-INF/web.xmlのWEBの親コンテナを指していることにより、ソースフォルダを追加し、プロジェクトのプロパティSourceタブで
(私の場合はWebContentで)-INFフォルダ
今度は、クラスローダを使用してみましょう:
InputStream inStream = class.getClass().getClassLoader().getResourceAsStream("Web-INF/web.xml")
私がjava(ジャージー)サーバーで作成したsqlite dbファイルにアクセスしていた問題は、パスのみに起因していました。いくつかのドキュメントでは、jdbc connect urlは "jdbc:sqlite://path-to-file/sample.db"のように見えます。二重スラッシュはhttプロトコルスタイルのパスの一部であり、展開すると正しくマップされると思っていましたが、実際には絶対パスまたは相対パスです。だから、ファイルをWebContentフォルダ(tomcatプロジェクト)のルートに置いたとき、このようなuriは "jdbc:sqlite:sample.db"を処理しました。
私が苦労していたことの1つは、デバッガを進んでいるときに、「db:...アクセス権が拒否されました」というメッセージが表示されたことです。私はそれがファイルシステムの権限かSQLユーザー権限の問題だと思った。 SQLiteにMySQLのようなロール/パーミッションの概念がないことを知った後、私は最終的にファイルのパーミッションを変更してから、正しい解決策だと思ったのですが、それは単なる悪いメッセージでした。アクセス許可が拒否されました。ファイルが見つかりません)。
これは誰かを助けることを望みます。
クイックアップデート。これはEclipseで動作しましたが、実際にTomcatインスタンスにデプロイすると失敗しました。これは両方の場所で働いたものです: –
申し訳ありませんが、時間内に編集内容を追加しませんでした。これは、EclipseとTomcatインスタンスにデプロイされたときの両方で機能しました。 ServletContextコンテキスト。 DBConnection = DriverManager.getConnection( "jdbc:sqlite:" + context.getRealPath( "sample.db")); –
サーブレット内にいる場合は、直接getServletContext()を使用できます。 :) –
ああ、良い点。 – skaffman
request-> session-> servletContextからservletContextにアクセスすることもできます。あなたが持っているのはリクエストオブジェクトだけです。 –