Spring 5 статическое сопоставление ресурсов - PullRequest
0 голосов
/ 24 сентября 2019

Я перехожу на весну 5. Я перевожу все свои xml в конфигурацию java, но я застрял на статических ресурсах.

В моей старой конфигурации xml у меня есть ресурсы, определенные так:<mvc:resources mapping="/3rdparty/**" location="/3rdparty/" />

Я добавляю их в свой класс Java Config

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.mypackages.*")
public class WebConfig implements WebMvcConfigurer {


    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {

        registry.addResourceHandler("/3rdparty/**").addResourceLocations("/3rdparty/");


    }

     @Bean
       public ViewResolver viewResolver() {
          InternalResourceViewResolver bean = new InternalResourceViewResolver();

          bean.setPrefix("/");
          bean.setSuffix(".jsp");

          return bean;
       }



}

Теперь я получаю эти ошибки для своих ресурсов No mapping for GET /myapp/gui/3rdparty/bootstrap-3.3.6-dist/js/bootstrap.min.js

Все хорошо работает сКонфигурация xml. Любые идеи, как мне определить шаблон ..

Структура папок выглядит следующим образом

ROOT
 |_WEB-INF
 |_META-INF
 |_gui
   |_3rdparty

Я также перенес свой запуск в конфигурацию java

public class AppInitializer implements WebApplicationInitializer{

     @Override
        public void onStartup(ServletContext container) {

             AnnotationConfigWebApplicationContext context  = new AnnotationConfigWebApplicationContext();
             context.setConfigLocation("com.mypackages.config");

             container.addListener(new ContextLoaderListener(context));


            ServletRegistration.Dynamic dispatcher = container
              .addServlet("dispatcher", new DispatcherServlet(context));

            dispatcher.setLoadOnStartup(1);
            dispatcher.addMapping("/");
        }
}

Заранее спасибо за любую помощь

1 Ответ

0 голосов
/ 25 сентября 2019

Две вещи, которые я предлагаю изменить:

  1. Используйте AnnotationConfigWebApplicationContext#scan("com.mypackages.config") вместо #setConfigLocation(...) для сканирования классов, помеченных @Configuration.Или зарегистрируйте определенный класс напрямую: #register(WebConfig.class).
  2. Дважды проверьте аргумент в #addResourceLocations("/3rdparty/").Структура вашей папки указывает на то, что #addResourceLocations("/gui/3rdparty/") может работать.

В проектах Maven, упакованных как .war, все веб-ресурсы обычно находятся в отдельной папке webapp, см. Плагин Maven War дляссылка .В вашем случае:

|-- pom.xml
|-- src
    |-- main
        |-- java
        |   |-- com
        |       |-- mypackages
        |           |-- config
        |               |-- WebConfig.java
        |               |-- AppInitializer.java
        |-- resources
        |-- webapp
            |-- gui
                |-- 3rdparty
                    |-- bootstrap.min.js

С WebConfig.java

@ComponentScan(basePackages = "com.stackoverflow.*")
@Configuration 
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

     @Override 
     public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/gui/3rdparty/**").addResourceLocations("/gui/3rdparty/");
     }
}

И AppInitializer.java:

public class AppInitializer implements WebApplicationInitializer {

    @Override 
    public void onStartup(ServletContext container) throws ServletException {
        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
        context.register(WebConfig.class);

        container.addListener(new ContextLoaderListener(context));
        ServletRegistration.Dynamic dispatcher = container.addServlet("dispatcher", new DispatcherServlet(context));

        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("/");
}

}

Ресурс начальной загрузкибудет доступен на http://<host>:<port>/gui/3rdparty/bootstrap.min.js

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