статический контент.разница в поведении tomcat6 и tomcat7 - PullRequest
3 голосов
/ 22 января 2011

Извините, если я спрашиваю что-то, о чем просили 1000 раз, но я искал это и ничего не нашел:)

У меня 2 установки tomcat.Tomcat 6 на Windows и Tomcat 7 на машине Linux.У меня есть проект, который использует Spring и имеет некоторый статический контент, который я хотел бы иметь возможность обслуживать, не отправляя запросы через Spring.

вот моя конфигурация сервлета:

<servlet-mapping>
  <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
 <servlet-name>default</servlet-name>
 <url-pattern>/static/*</url-pattern>
</servlet-mapping>

мои статические файлы находятся в «статической» папке рядом с папкой WEB-INF.

Теперь забавно то, что на tomcat7, когда я делаю запрос к http://myserver.com/myproject/static/css/main.css, он ищет файл в /webapps / myproject / static / css / main.css, но на tomcat6 он ищет его в /webapps/myproject/css/main.css и выдает ошибку, в которой говорится, что такого файла нет.

какую конфигурацию следует использоватьнастроить оба сервера для одинаковой работы?

Ответы [ 2 ]

2 голосов
/ 22 января 2011

Вы на самом деле злоупотребляете сервлетом Tomcat по умолчанию.Сервлет по умолчанию не определяется API сервлета и специфичен для контейнера сервлета.Известно, что в сервлете Tomcat по умолчанию есть ошибка, позволяющая раскрыть все содержимое /WEB-INF и /META-INF при таком злоупотреблении, тем самым открывая двери для конфиденциальной информации.Это сообщается как выпуск 50026 и исправлено в Tomcat 6.0.30 и далее.

Решение простое: вы не должны явно отображать сервлет по умолчанию в вашем web.xmlсовсем.Как указано в сообщении об ошибке, вы должны использовать этот подход .

0 голосов
/ 23 февраля 2012

Другой, более простой ответ, предоставленный casey на тот же вопрос, на который ссылается BalusC , заключается в указании списка файлов приветствия и сопоставлении последнего файла приветствия с шаблоном URL-адреса сервлета вашего приложения.В этой конфигурации сервлет по умолчанию обрабатывает статическое содержимое, в то время как любые несопоставленные URL-адреса попадают в приложение.

Полный ответ с кодом из casey

...