2

目前,我正在使用 Velocity 而不是 JSP,因为它具有灵活性。由于某些原因,我需要将我的 Web 模块分发到jar存档中,而不是存档中war

不过,我已经阅读了 servlet 规范,但我没有找到以编程方式调用 jasper 引擎的方法。

我的想法是,将 Web 应用程序拆分为几个模块:

  • 一个顶级war模块,其中包含web.xml和所有 3rd-party jar 依赖项。
  • 其他jar模块包含 http servlet(jsp是 servlet 的一种特殊形式)。

在类资源中嵌入 Velocity 模板非常容易,所以我想知道是否可以使用 JSP 完成相同的工作?

编辑

Velocity 的问题是,我们必须使用一些 taglibs、JSF 等来创建丰富的 Web UI,而这是 Velocity 模板无法做到的。

4

1 回答 1

1

我们必须使用一些标记库、JSF 等来创建丰富的 Web UI,这是 Velocity 模板无法做到的。

使用Facelets而不是 JSP。它不仅提供了比 JSP 更好的模板可能性,而且还可以直接从类路径提供 Facelet 文件。假设您仍在使用 JSF 1.x(因为 JSF 2.x默认使用Facelets 而不是 JSP,并且确实没有理由更喜欢 JSP 而不是 Facelets),那么您可以启用从 JAR 提供 Facelets,如下所示:

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 回答