Весна (с нефритом) Ресурсы
Эта проблема
Мое приложение весенней загрузки недавно изменило маршрутизацию с хоста / конечной точки на хост / середину / конечную точку. После внесения изменений я столкнулся с проблемой, когда ресурсы не были найдены относительно новой структуры URL. Раньше я мог ссылаться на ресурсы, такие как таблицы стилей CSS, такие как link (rel = 'stylesheet', href = 'css / style.css'), но теперь программа регистрации выдает ошибку, в которой говорится, что не может найти ресурс в / middleman / css / style.css.
Из моего исследования я обнаружил, что мне нужно использовать реестр обработчиков ресурсов. Я создал один (как показано ниже), но он не работает. Я думаю, что проблема в том, что, хотя у меня теперь есть реестр ресурсов, я не ссылаюсь на ресурсы в реестре. Как правильно решить эту проблему и обеспечить загрузку всех ресурсов из одного места независимо от конечной точки? Я очень хорошо могу пропустить какой-то очевидный кусок СОП
Примечание. Это все извращенное представление моего проекта, чтобы дать представление о том, что происходит, без предоставления ненужной информации.
Структура проекта
src
main
java
com.mystuff.cool
configurations
ResourceConfiguration.java
controllers
RoutingController.java
application
Application.java
resources
static
css
footer.css
style.css
images
place1.png
location1.png
spot1.png
favicon.ico
javascripts
layout.js
templates
home.jade
Класс приложения
@ComponentScan(basePackages = {"my.packages"})
@EnableAutoConfiguration
@EnableSAMLSSO
@Configuration
public class Application
{
public static void main(String[] args)
{
SpringApplication.run(new Object[]{ Application.class, ServiceConfig.class, ResourceConfiguration.class}, args);
}
}
Конфигурация ресурса
@EnableWebMvc
@Configuration
public class ResourceConfiguration extends WebMvcConfigurerAdapter
{
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry)
{
registry.addResourceHandler("/css/**").addResourceLocations("/css/").setCachePeriod(31556926);
registry.addResourceHandler("/img/**").addResourceLocations("/img/").setCachePeriod(31556926);
registry.addResourceHandler("/js/**").addResourceLocations("/js/").setCachePeriod(31556926);
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer)
{
configurer.enable();
}
}
контроллер
@Controller
public class RoutingController
{
@RequestMapping("/house/home")
public String home(Model model)
{
model.addAttribute("title", "Home is where the heart is");
commonModelTribs(model);
return "home";
}
}
Домашняя страница
doctype html
html
title Place-spedia #{title}
link(rel='icon', href='images/favicon.ico')
link(rel='stylesheet', href='css/style.css')
script(src='javascripts/layout.js')
link(rel='stylesheet', href='css/footer.css')
body
div#footer-icons
a(href='place1')
img#place1(src="images/place1.png")
a(href='location1')
img#location1(src="images/location1.png")
a(href='spot1')
img#spot1(src='images/spot1.png')
1 ответ
Если вы используете весеннюю загрузку, вам не нужно беспокоиться о конфигурации ресурса, поскольку вы уже настраиваете каталог ресурсов через автоматическую настройку. Поведение по умолчанию для автоконфигурации - смотреть в resources/static
,
Ваша проблема связана с вашими значениями href, попробуйте вставить начальную косую черту:
link(rel='icon', href='/images/favicon.ico')
link(rel='stylesheet', href='/css/style.css')
script(src='javascripts/layout.js')
link(rel='stylesheet', href='/css/footer.css')
Spring направляет ваше приложение на новый относительный путь, поэтому /
в вашем href
атрибуты, вы говорите маршрутизатору смотреть абсолютно в static
каталог, а не относительно middle
каталог.