2012-05-22 2 views
2

У меня есть приложение JSF 2.0, работающее под Glassfish 3.1.1, и мне нужно обслуживать статические веб-страницы, которые физически расположены отдельно от моего корня приложения, который создается, когда моя WAR файл развернут. Я нашел различные ссылки (как this one и this one) для определения альтернативного DOCROOT с помощью тега, такими какКак обслуживать статические веб-страницы из приложения JSF с использованием Glassfish

<property name="alternatedocroot_1" value="from=/myimages/* dir=/images"/> 

добавил к солнцу-web.xml (который я предполагаю означает GlassFish-web.xml в Glassfish 3.1 0,1). Однако я не могу заставить его работать. В моем случае, я думаю, что проблема в том, что GlassFish-web.xml просто не определяет достаточно контекста для альтернативного DOCROOT иметь какой-либо смысл:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd"> 
<glassfish-web-app error-url=""> 
    <class-loader delegate="true"/> 
    <jsp-config> 
    <property name="keepgenerated" value="true"> 
     <description>Keep a copy of the generated servlet class' java code.</description> 
    </property> 
    </jsp-config> 
    <property name="alternatedocroot_1" value="from=/myimages/* dir=/images"/> 
</glassfish-web-app> 

Мясо моего определения приложения, кажется, гораздо больше web.xml, чем glassfish-web.xml. Может быть, мне, возможно, нужно что-то там сказать, чтобы ссылаться на альтернативного докрова?

ответ

5

Это точная конфигурация требует /images/myimages папки относительно абсолютного корня одного и того же диска, как, где JVM на веб-сервер работает в. Файл foo.png в этой папке, то доступны по http://localhost:8080/contextname/myimages/foo.png.

Общей путаницей вокруг этого параметра является то, что атрибут from интерпретируется как единственный путь контекста в URL-адресе, а не как фактическая подпапка в местоположении dir. Но это не так.

Если вы используете Glassfish в среде Windows, тогда вам нужно указать букву диска в dir, а также так dir=C:/images.

+0

На самом деле, в Windows, похоже, поиск выполняется из корня домена, если вы не префиксное значение 'dir =' с 'C:'. Однако даже когда я предоставляю допустимый путь, я получаю сообщение об ошибке: «SEVERE: исключение при загрузке приложения: java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: java.lang.IllegalArgumentException : javax.servlet.ServletException: com.sun.enterprise.container.common.spi.util.InjectionException: ошибка при создании управляемого объекта для класса: class org.jboss.weld.servlet.WeldListener'. Поэтому я думаю, что это отвечает на мой вопрос конфигурации. –

+0

Справа. Windows - странный зверь. Я обновил ответ. Что касается новой проблемы, исчезает ли это исключение, когда вы удаляете альтернативный docroot? – BalusC

+0

Исключение не исчезло, когда я удалил альтернативный docroot, поэтому я вернул его, перезапустил Glassfish, и теперь все работает хорошо. Английское описание конфигурации может быть полезно для некоторых, а именно: для URI, которые соответствуют шаблону 'from' в атрибуте' value' атрибута alternatedocroot, фактический путь доступа к файлу равен значению пути 'dir' плюс часть URI, которая следует за именем context/app. –

Смежные вопросы