2

現在、柔軟性のために、JSP の代わりに Velocity を使用しています。何らかの理由で、Web モジュールをjarアーカイブではなくアーカイブで配布する必要がありwarます。

ただし、サーブレットの仕様を読みましたが、jasper エンジンをプログラムで呼び出す方法が見つかりませんでした。

私の考えは、Webアプリケーションをいくつかのモジュールに分割することです:

  • 、およびすべてのサードパーティの jar 依存関係を含む1 つの最上位warモジュール。web.xml
  • 他のjarモジュールには http サーブレットが含まれています (jspは特殊な形式のサーブレットです)。

Velocity テンプレートをクラス リソースに埋め込むのは非常に簡単ですが、JSP でも同じことができるのでしょうか?

編集

Velocity の問題は、いくつかの taglibs、JSF などを使用してリッチな Web UI を作成する必要があることです。これは Velocity テンプレートでは実行できません。

4

1 に答える 1

1

リッチなWebUIを作成するには、いくつかのtaglibsやJSFなどを使用する必要がありますが、これはVelocityテンプレートでは実行できません。

JSPの代わりにFaceletsを使用します。JSPよりも優れたテンプレートの可能性を提供するだけでなく、クラスパスから直接Faceletファイルを提供することも可能です。まだJSF1.xを使用していると仮定すると(JSF 2.xはデフォルトでJSPではなくFaceletsを使用し、FaceletsよりもJSPを優先する理由がないため)、次のようにJARからFaceletを提供できるようにします。

import com.sun.facelets.impl.DefaultResourceResolver;

public class CustomResourceResolver extends DefaultResourceResolver {

    @Override
    public URL resolveUrl(String resource) {
        URL url = super.resolveUrl(resource);

        if (url == null) {
            if (resource.startsWith("/")) {
                resource = resource.substring(1);
            }

            url = Thread.currentThread().getContextClassLoader().getResource(resource);
        }

        return url;
    }

}

次のように登録しますweb.xml

<context-param>
    <param-name>facelets.RESOURCE_RESOLVER</param-name>
    <param-value>com.example.CustomResourceResolver</param-value>
</context-param>

Faceletsの詳細については、この優れた開発者向けドキュメントから始めてください。

于 2011-03-14T12:06:55.810 に答える