У меня есть приложение 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. Может быть, мне, возможно, нужно что-то там сказать, чтобы ссылаться на альтернативного докрова?
На самом деле, в 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'. Поэтому я думаю, что это отвечает на мой вопрос конфигурации. –
Справа. Windows - странный зверь. Я обновил ответ. Что касается новой проблемы, исчезает ли это исключение, когда вы удаляете альтернативный docroot? – BalusC
Исключение не исчезло, когда я удалил альтернативный docroot, поэтому я вернул его, перезапустил Glassfish, и теперь все работает хорошо. Английское описание конфигурации может быть полезно для некоторых, а именно: для URI, которые соответствуют шаблону 'from' в атрибуте' value' атрибута alternatedocroot, фактический путь доступа к файлу равен значению пути 'dir' плюс часть URI, которая следует за именем context/app. –