Что я пытаюсь сделать, запросы карты к корню сервлета (корректная терминология?). Я в точке, где URL отображаются для исправления представления, но все статическое содержание - CSS, JavaScript, изображения - который является частью страницы, не могут быть найдены.
Таким образом в моем web.xml мой тег сервлета похож на это
springapp
/
Мой контроллер выглядит примерно так:
@RequestMapping("/shop")
public class TheShopController extends MyBaseController {
public static String VIEW = "Tile.Shop";
@Override
@RequestMapping(method = RequestMethod.GET)
protected ModelAndView processRequest(HttpServletRequest req, HttpServletResponse resp) {
ModelAndView mav = new ModelAndView(VIEW);
return mav;
}
}
MyBaseController очень прост. Это похоже на это:
public abstract class MyBaseController extends AbstractController {
protected Logger log = Logger.getLogger(getClass());
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest req, HttpServletResponse resp)
throws Exception {
ModelAndView mav = processRequest(req, resp);
return mav;
}
protected abstract ModelAndView processRequest(HttpServletRequest req, HttpServletResponse resp);
}
Я использую Мозаики, по моему мнению, слой. Моя конфигурация следующие:
/WEB-INF/tiles-defs.xml
Как я упомянул, представления найдены, но статические ресурсы, которые являются портом страницы, не могут быть найдены. Вот являются некоторые типичным выходить из системы помещенный:
24.01.2010 17:25:01 777 ОТЛАДОК [http-8080-7] сервлет. DispatcherServlet (DispatcherServlet.java:690) - DispatcherServlet с именем 'springapp' обработка ПОЛУЧАЮТ запрос на [/springapp/static/css/account.css] 24.01.2010, 17:25:01 778 ПРЕДУПРЕЖДАЕТ [http-8080-4] сервлет. DispatcherServlet (DispatcherServlet.java:962) - Никакое отображение, найденное для Запроса HTTP с URI [/springapp/static/css/shop.css] в DispatcherServlet с именем 'springapp' 24.01.2010 17:25:01 778 ОТЛАДОК [http-8080-6] сервлет. FrameworkServlet (FrameworkServlet.java:677) - Успешно завершенный запрос 24.01.2010 17:25:01 778 ПРЕДУПРЕЖДАЕТ [http-8080-5] сервлет. DispatcherServlet (DispatcherServlet.java:962) - Никакое отображение, найденное для Запроса HTTP с URI [/springapp/static/css/offers.css] в DispatcherServlet с именем 'springapp' 24.01.2010 17:25:01 778, НЕ ПРЕДУПРЕЖДАЕТ [http-8080-3] сервлет. DispatcherServlet (DispatcherServlet.java:962) - Никакое отображение, найденное для Запроса HTTP с URI [/springapp/static/css/scrollable-buttons.css] в DispatcherServlet с именем 'springapp'
Движение к http://localhost:8080/springapp/shop хорошо работает, но CSS и изображения отсутствуют.
Я думаю, что использование Мозаик так или иначе усложняет вещи, но меня "m отказывающийся избавиться от него. Я задаюсь вопросом, должен ли я скорректировать свои потребности конфигурации разрешения представления, которые настроят так или иначе? Объединение в цепочку сопоставителей представления, возможно? Я просто не, это испытало в выполнении этого.
Проблема в том, что запросы на статический контент переходят в диспетчерерсер, потому что он отображается в
. Это очень распространенная проблема в приложениях с «спокойными» URL-адресами (то есть без какого-либо префикса в диспетчке
сопоставление).
Есть несколько возможных способов решить эту проблему:
с пружины 3.x предпочтительный способ доступа к статическим ресурсам является использование
:
Web.xml
:
<servlet-mapping>
<servlet-name>springapp</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Spring Config:
<!-- Handles GET requests for /resources/** by efficiently serving static content
in the ${webappRoot}/resources dir -->
<mvc:resources mapping="/resources/**" location="/resources/" />
см. Также Упрощения MVC весной 3
1. Используйте фильтр Rewrite URL
См. Пример MVC-Basic
здесь
2. Установите префикс для сервлета по умолчанию
:
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/static/*</url-pattern>
</servlet-mapping>
, то есть запрос на /static/images/image.png
вернет файл с именем /Images/image.png
Тем не менее, этот способ несовместим на разных контейнерах сервлета (не работает в пристани), см. В разделе «Обходные пути» здесь
3. Установите статические расширения контента для сервлета по умолчанию
:
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.png</url-pattern>
<url-pattern>*.js</url-pattern>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
4. Не используйте Restful Urls, используйте URL с префиксом:
<servlet-mapping>
<servlet-name>springapp</servlet-name>
<url-pattern>/app</url-pattern>
</servlet-mapping>
5. Не используйте редкие URL-адреса, используйте URL-адреса с расширением:
<servlet-mapping>
<servlet-name>springapp</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
В качестве альтернативы предложенному номеру решения (2, сервлет по умолчанию, который ведет себя по-разному от контейнера сервлета к контейнеру сервлета), я бы рекомендовал взглянуть на Сервлет ресурсов ( org.springframework.js.resource.ResourceServlet
) из проекта Spring Webflow.
Подробнее см. Как обрабатывать статический контент в Spring MVC?