如何以编程方式呈现JSP文件?

时间:2011-03-14 06:00:36

标签: jsp web-applications modularization

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

我已经阅读了servlet规范,但是我没有找到一种方法来编程调用jasper引擎。

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

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

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

修改

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

1 个答案:

答案 0 :(得分:1)

  

我们必须使用一些taglibs,JSF等来创建一个丰富的Web UI,这是Velocity模板无法完成的。

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

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的更多信息,请从优秀的developer documentation开始。