サーブレットから Tomcat コンテキスト パスへのアクセス
質問
私のサーブレットでは、JavaScript の縮小を行うためにコンテキストのルートにアクセスしたいと考えています。
インストールプロセスの一部として縮小を実行することも可能ですが、実装コストを削減するためにサーブレットの起動時に実行したいと考えています。
ファイルをディスクにロードして書き込むことができるようにコンテキスト ディレクトリを取得する方法を知っている人はいますか?
解決
これにより、ファイルの抽出/編集に使用できる実際のパスが得られます。
コンテキスト リスナーでも同様のことを行っています。
public class MyServlet extends HttpServlet {
public void init(final ServletConfig config) {
final String context = config.getServletContext().getRealPath("/");
...
}
...
}
他のヒント
私のサーブレットでは、JavaScript の縮小を行うためにコンテキストのルートにアクセスしたいと考えています。
次の方法でも WebContent 内のファイルにアクセスできます。 ServletContext#getResource()
. 。たとえば、JS ファイルが次の場所にある場合、 WebContent/js/file.js
次に、次を使用できます Servlet
を得るために File
それのハンドル:
File file = new File(getServletContext().getResource("/js/file.js").getFile());
または InputStream
:
InputStream input = getServletContext().getResourceAsStream("/js/file.js");
とはいえ、どれくらいの頻度で JS ファイルを縮小する必要があるでしょうか?リクエストベースの縮小の必要性を見たことがありません。それは不必要に多くのオーバーヘッドを追加するだけです。おそらく、アプリケーションの起動時に 1 回だけ実行する必要があるでしょう。その場合は、 Servlet
これは悪い考えだからです。より良い使い方 ServletContextListener
そしてあなたのことをしてください contextInitialized()
.
結果をグーグルで調べましたが、どこにも見つかりませんでした。現在のファイルにアクセスするために Java Script を使用する必要がある JSP ページでは、 コンテキストパス 実はとても簡単です。
次の行を htmlヘッド の中に script
ブロック。
// set up a global java script variable to access the context path
var contextPath = "${request.contextPath}"
どういう意味ですか:
public class MyServlet extends HttpServlet {
public void init(final ServletConfig config) {
final String context = config.getServletContext();
...
}
...
}
それとももっと複雑なものでしょうか?