Можно ли использовать регулярное выражение для отображения сервлета Jetty? - PullRequest
7 голосов
/ 25 января 2011

У меня есть это одно отображение

<servlet-mapping>
<servlet-name>service</servlet-name>
<url-pattern>/service/*</url-pattern>
</servlet-mapping>

, но я также хочу / service / master для сопоставления с master сервлетом.

<servlet-mapping>
<servlet-name>master</servlet-name>
<url-pattern>/service/master</url-pattern>
</servlet-mapping>

Я полагаю, что здесь есть конфликт, так как вызов / service / * сразу вызовет сервисный сервлет.Есть ли способ для меня использовать какое-то исключение в отображении сервлета или может быть регулярное выражение, чтобы делать то, что я хочу сделать?

Ответы [ 2 ]

6 голосов
/ 25 января 2011

При отображениях сервлетов всегда используется самое конкретное соответствие, поэтому путь <context>/service/master всегда будет сопоставляться с master.

. Это первое правило отображений из спецификации Servlet 3.0 :

  1. Контейнер попытается найти точное совпадение пути запроса с путем сервлета.При успешном совпадении выбирается сервлет.
  2. Контейнер будет рекурсивно пытаться сопоставить самый длинный префикс пути.Это делается путем постепенного перехода вниз по дереву пути к каталогу с использованием символа «/» в качестве разделителя пути.Самое длинное совпадение определяет выбранный сервлет.
  3. Если последний сегмент в пути URL-адреса содержит расширение (например, .jsp), контейнер сервлета попытается сопоставить сервлет, который обрабатывает запросы на расширение.Расширение определяется как часть последнего сегмента после последнего '.'символ.
  4. Если ни одно из трех предыдущих правил не приводит к совпадению сервлета, контейнер попытается обработать содержимое, соответствующее запрашиваемому ресурсу.Если для приложения определен сервлет «по умолчанию», он будет использоваться.Многие контейнеры предоставляют неявный сервлет по умолчанию для обслуживания контента.
1 голос
/ 01 апреля 2012

Вы можете попробовать использовать Google Guice.com.google.inject.servlet.ServletModule.serveRegex (регулярное выражение строки, регулярное выражение строки ...) позволит использовать регулярное выражение в отображении.

см. здесь http://code.google.com/p/google-guice/wiki/ServletModule

...