Как остановить Spring MVC, блокирующий все остальные сервлеты? - PullRequest
9 голосов
/ 10 июня 2010

Я использую Spring 2.5 MVC и хочу добавить еще один сторонний сервлет. Проблема в том, что Spring MVC перехватывает все запросы, поэтому сервлет не получает никаких запросов. Вот фрагмент web.xml:

SpringMVC org.springframework.web.servlet.DispatcherServlet 2

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

<servlet>
    <description>This is the servlet needed for cache.type servlet, returns the packed resources</description>
    <display-name>PackServlet</display-name>
    <servlet-name>PackServlet</servlet-name>
   <servlet-class>net.sf.packtag.servlet.PackServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>PackServlet</servlet-name>
    <url-pattern>*.pack</url-pattern>
</servlet-mapping>

Отображение / * действительно необходимо для приложения, тэгу pack: (стороннему сервлету) действительно нужно отображение на основе расширения файла. Есть ли возможность сказать Spring, чтобы не обрабатывать запрос? Спасибо и всего наилучшего.

Ответы [ 2 ]

14 голосов
/ 10 июня 2010

На самом деле вам не нужна пружина, чтобы что-то делать, контейнер сервлетов может решить эту проблему за вас.

При сопоставлении с каким сервлетом отправляется запрос, это зависит от правил сопоставления, определенных в шаблоне url. Никакие 2 сервлета не могут иметь одинаковый шаблон, но они могут иметь перекрывающиеся шаблоны. Тогда применяются 4 правила:

1) точные совпадения имеют приоритет над совпадениями 2) шаблоны более длинных путей имеют приоритет над шаблонами более коротких 3) совпадения путей имеют приоритет над совпадениями типов файлов 4) / соответствует тому, что еще не найдено

<servlet-mapping>
  <servlet-name>PackServlet</servlet-name>
  <url-pattern>*.pack</url-pattern>
</servlet-mapping>
<servlet-mapping>
  <servlet-name>SpringMVC</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>

Если вы используете / * для SpringMVC, он может совпадать на самом длинном пути. Удаляя *, вы обязательно будете следовать спецификации сервлета для сервлета по умолчанию и подпадает под правило 4.

Здесь вы можете найти более подробную информацию .

1 голос
/ 10 июня 2010

Проверьте принятые ответы на эти вопросы.Это должно решить вашу проблему.

Можно ли настроить SpringMVC для обработки всех запросов, но исключить статические каталоги содержимого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...