java.lang.Исключение IllegalArgumentException:Недопустимый шаблон URL-адреса:[xhtml] [дубликат]
-
12-11-2019 - |
Вопрос
Я пытаюсь развернуть очень простое и мое первое приложение JSF (после действительно хороший учебник от BalusC) на локальном сервере glassfish.Я выполнил все шаги по созданию приложения.И когда я попытался развернуть приложение на сервере glassfish, оно просто завершилось неудачей со следующим сообщением об исключении:-
cannot Deploy Playground
Deployment Error for module: Playground: Exception while deploying the app :
java.lang.IllegalArgumentException: Invalid URL Pattern: [xhtml]
Не мог бы кто-нибудь объяснить, в чем ошибка и как я могу ее исправить?
Решение
Это недопустимый URL-шаблон.Вы можете организовать сопоставление как сопоставление префикса или сопоставление расширения (из Спецификация JSF 2.0):
Сопоставление префиксов:
<servlet-mapping>
<servlet-name> faces-servlet-name </servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
Отображение расширений:
<servlet-mapping>
<servlet-name> faces-servlet-name </servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
Другие советы
Ваш <url-pattern>
должен либо иметь соответствующее расширение (начинается с *
) или сопоставление префиксов (начинающихся с /
) включено, а не только xhtml
.
Вот как я сделал свой.
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
Правила для сопоставлений сервлетов описаны в Технические характеристики Servlet 3.0:
Спецификация отображений
В дескрипторе развертывания веб-приложения для определения сопоставлений используется следующий синтаксис:
- Строка, начинающаяся с
/
характер и заканчивающийся символом/*
суффикс используется для отображения пути.- Строка, начинающаяся с
*.
префикс используется в качестве расширения отображение.- Пустая строка ("") - это специальный шаблон URL, который точно соответствует корневому контексту приложения, т.е. запросам формы
http://host:port/<contextroot>/
.В этом случае информация о пути такова/
а путь к сервлету и путь к контексту - это пустая строка ("").- Строка, содержащая только
/
символ указывает на "стандартный" сервлет приложения.В этом случае путь к сервлету - это запрос URI минус контекстный путь, а информация о пути равна null.- Все остальные строки используются только для точных совпадений.
Когда вы столкнетесь с этой ошибкой, проверьте свой web.xml и любые аннотации к отображению (Веб-серверлет, Веб-фильтр, и т.д.)
Вы можете найти рекомендации по сопоставлению сервлетов JSF в Спецификация JSF 2.0.
При использовании сопоставления расширений рекомендуется, но не обязательно, следующее сопоставление:
<servlet-mapping> <servlet-name> faces-servlet-name </servlet-name> <url-pattern>*.faces</url-pattern> </servlet-mapping>