2010-09-15 4 views
0

У меня есть два сервлета, определенных в файле web.xml, а именно default2 и myservlet. Сервлет по умолчанию2 используется для сопоставления статических файлов, таких как javascript и css. Myservlet используется для получения динамического содержимого.Tomcat 6.x web.xml по умолчанию и настраиваемая маршрутизация сервлетов

<servlet> 
    <servlet-name>default2</servlet-name> 
    <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet> 
    <servlet-name>myservlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value> 
      classpath:my-servlet.xml 
     </param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

отображение сервлета определяется следующим образом

<servlet-mapping> 
    <servlet-name>myservlet</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>default2</servlet-name> 
    <url-pattern>/resources/*</url-pattern> 
</servlet-mapping> 

Когда я пытаюсь получить доступ к файлам в каталоге/ресурсов, я получаю 404. Любые идеи, почему эта конфигурация не работает или изменить конфигурации для сделай так, чтоб это работало.

+1

Что говорит ошибка Tomcat? Кроме того, почему оба сервлета загружаются с таким же значением ' 1'? –

+0

Ошибка при загрузке в tomcat отсутствует. Когда мы получаем доступ к любым файлам в/resources, он дает ошибку, не найденную в файле. –

ответ

-1

Удалена неправильная часть ответа в соответствии с комментарием @BalusC.

Установите точку прерывания в сервлет и выполните сеанс отладки. Ищите путь, по которому ваш сервлет собирает эти файлы. Убедитесь, что они соответствуют местоположению.

+0

Неправильно, сервлетконтейнер будет соответствовать * самому определенному шаблону url сервлета. Вероятно, вы сбиваете с толку поведение фильтров. – BalusC

+0

Да, вы пишете. Я не думал. Сохранение точки останова в сервлете поможет определить, где приложение ищет файл. – Sean

+0

Предлагаю отредактировать ваш пост, пока вы получаете отрицательный результат. –

0

Должно работать нормально. Эти файлы в реальном также находятся в папке /resources?

+0

Да, эти файлы находятся в реальном местоположении. –

+0

Исключение говорит, что нет. Доступны ли они с помощью одного и того же URL-адреса при удалении обоих сервлетов? Если все еще нет, используется URL-адрес и/или фактическое местоположение (или у вас есть 'Filter', прослушивание'/* ', которое плохо написано и, таким образом, нарушает все). – BalusC

0

Ваш web.xml выглядит корректно (кроме меня можно изменить ваши константы <load-on-startup>). Убедитесь, что ваш /resources существует и является общедоступной папкой в ​​вашем пути к проекту, а не в папке/WEB-INF.

3

Сервлет по умолчанию Tomcat до 6.0.30 фактически служит статическому ресурсу, идентифицированному HttpServletRequest.getPathInfo(), так что /style.css будет возвращен при запросе /resources/style.css.

Поведение Tomcat изменилось с версии 6.0.30 и далее. Поэтому исходная конфигурация из вопроса работает в более новых версиях Tomcat. См. «50026: добавьте поддержку для сопоставления сервлета по умолчанию для URL-адресов, отличных от /. (Timw)» в changelog.

Сервлет по умолчанию Jetty использует полный путь.

0

Попробуйте изменить url-pattern для myservlet в /, и, возможно, добавление <mvc:default-servlet-handler /> (see here) в конфигурации Spring.

Смежные вопросы