1

Webアプリのタグを介して含めたいHTMLファイルがいくつかあります。

一部のファイルには、疑似動的コードがあります。これは、実行時にMySQLテーブル内のそれぞれのデータビットに解決されるように特別にフォーマットされたテキストです。

たとえば、HTMLファイルには次のような行が含まれている場合があります。

Welcome, [username].

これを(ログインしたユーザーのデータを介して)解決したい:

Welcome, user@domain.com.

これはJSPファイルで行うのは簡単ですが、要件により、ファイルは基本的なHTMLは知っているが、JSPは知らない人が作成することが求められます。ただし、このような単純なテキストタグは、私が説明するのに十分簡単なはずです。

文字列に対してそのような解決を行うようにコードを設定していますが、ファイル間でそれを行う方法を誰かが考えることができますか?実際にディスク上のファイルを変更する必要はありません。コンテンツをロードして変更し、含まれているJSPファイルに出力するだけです。

私はapacheを介してファイルを文字列にロードしようと遊んでいますreadFileToStringが、ハードコーディングせずにWebアプリケーションのコンテンツディレクトリ内の特定のフォルダーからファイルをロードする方法を理解できず、将来、別のシステムにデプロイします。

4

1 に答える 1

1

しかし、Webアプリのコンテンツディレクトリ内の特定のフォルダーからファイルをロードする方法を理解するには、ファイルをハードコーディングせずに、将来別のシステムにデプロイした場合にファイルが破損することを心配する必要があります。

これらのファイルがWebコンテンツにある場合は、を使用ServletContext#getRealPath()して相対Webパスを絶対ディスクファイルシステムパスに変換します。これは、WARがappserverで展開されている場合に機能します(ほとんどの場合、デフォルトで展開され、Weblogicのみがデフォルトで展開されませんが、これは構成可能なIIRCです)。ServletContextサーブレット内では、継承されたメソッドでを取得できますgetServletContext()

String relativeWebappURL = "/html/file.html";
String absoluteFilePath = getServletContext().getRealPath(relativeWebappURL);
File file = new File(absoluteFilePath);
// ...

または、Webアプリケーションのクラスパスに入れて、次を利用することもできますClassLoader#getResource()

String relativeClasspathURL = "/html/file.html";
URL absoluteClasspathURL = Thread.currentThread().getContextClassLoader().getResource(relativeClasspathURL);
File file = new File(absoluteClasspathURL.toURI());
// ...

全体像については、 FreemarkerVelocityのような既存のテンプレートフレームワークを検討して、すべての作業を容易にしたことがあるかどうか疑問に思います。

于 2010-04-28T23:16:57.620 に答える