目前,我使用Velocity而不是JSP,因为它具有灵活性。出于某些原因,我需要在jar
存档中分发我的网络模块,而不是war
存档`。
我已经阅读了servlet规范,但是我没有找到一种方法来编程调用jasper引擎。
我的想法是,将Web应用程序拆分为几个模块:
war
模块,其中包含web.xml
和所有第三方jar依赖项。jar
模块包含http servlet(jsp
是一种特殊形式的servlet)。在类资源中嵌入Velocity模板非常容易,所以我想知道我是否可以用JSP做同样的工作?
修改
Velocity的问题是,我们必须使用一些taglibs,JSF等来创建一个丰富的Web UI,这是Velocity模板无法完成的。
答案 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开始。