java.lang.IllegalArgumentException: недопустимый <url-pattern> в отображении сервлета

<servlet>
    <servlet-name>myservlet</servlet-name>
    <servlet-class>workflow.WDispatcher</servlet-class>
    <load-on-startup>2</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>myservlet</servlet-name>
    <url-pattern>*NEXTEVENT*</url-pattern>
</servlet-mapping>

Выше приведен фрагмент из Tomcat's web.xml, Шаблон URL *NEXTEVENT* на стартовых бросках

java.lang.IllegalArgumentException: недопустимый в отображении сервлета

Будет очень признателен, если кто-то может намекнуть на ошибку.

2 ответа

Решение
<url-pattern>*NEXTEVENT*</url-pattern>

Шаблон URL недействителен. Он может заканчиваться звездочкой или начинаться с нее (для обозначения сопоставления расширений файлов).

Спецификация URL-шаблона:

  • Строка, начинающаяся с символа '/' и заканчивающаяся суффиксом '/*', используется для отображения пути.
  • Строка, начинающаяся с '*.' Префикс используется как отображение расширения.
  • Строка, содержащая только символ "/", обозначает сервлет "по умолчанию" приложения. В этом случае путь сервлета является URI запроса минус путь контекста, а информация о пути равна нулю.
  • Все остальные строки используются только для точных совпадений.

См. Раздел 12.2 спецификации Java Servlet версии 3.1 для более подробной информации.

Чтобы обойти это, можно добавить фильтр сервлетов для перезаписи URL, например переписать NEXTEVENT в / NEXTEVENT /(тот, что до NEXTEVENT) /(тот, что после NEXTEVENT) или что-то подобное.

Другие вопросы по тегам