Как программно визуализировать файлы JSP? - PullRequest
2 голосов
/ 14 марта 2011

В настоящее время я использую Velocity вместо JSP для его гибкости.По некоторым причинам мне нужно распространять свои веб-модули в jar архиве, а не war архиве`.

Я прочитал спецификацию сервлета, но не нашел способа программно вызвать движок jasper.

Моя идея состоит в том, чтобы разделить веб-приложение на несколько модулей:

  • один модуль war верхнего уровня, который содержит web.xml, и все сторонние зависимости jar.
  • другие jar модули содержат сервлеты http (jsp - это специальныйформа сервлета).

Внедрить шаблоны Velocity в ресурсы класса очень просто, поэтому мне интересно, могу ли я выполнить ту же работу с JSP?

EDIT

Проблема Velocity в том, что мы должны использовать некоторые библиотеки тегов, JSF и т. Д. Для создания многофункционального веб-интерфейса, который не может быть выполнен с помощью шаблонов Velocity.

1 Ответ

1 голос
/ 14 марта 2011

мы должны использовать некоторые библиотеки тегов, JSF и т. Д. Для создания многофункционального веб-интерфейса, который не может быть выполнен шаблонами Velocity.

Используйте Facelets вместо JSP. Он не только предлагает лучшие возможности создания шаблонов, чем JSP, но также позволяет обслуживать файлы Facelet прямо из classpath. Предполагая, что вы все еще используете 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, начните с этой превосходной документации для разработчиков .

...