Изменение приветственной страницы по умолчанию для приложения spring -boot, развернутого как война

Я пытался найти способ изменить приветственную страницу по умолчанию для приложения spring -boot, которое развертывается как война в производстве, но я не могу найти способ сделать это без web.xml файл.

В соответствии с документацией мы можем сделать это с помощью EmbeddedServletContainerFactory с помощью этого кода:

@Bean
public EmbeddedServletContainerFactory servletContainer() {

    TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();

    TomcatContextCustomizer contextCustomizer = new TomcatContextCustomizer() {
        @Override
        public void customize(Context context) {
            context.addWelcomeFile("/<new welcome file>");
        }
    };
    factory.addContextCustomizers(contextCustomizer);

    return factory;
}

Хотя, когда мы создаем военный файл и развертываем его в tomcat и не используем Embedded Tomcat, это ничего не делает.

Любая идея? Если нам действительно нужно добавить файл web.xml, как мы можем это сделать и по-прежнему использовать spring загрузку? Должно ли мы указывать приложение bean (с основным методом) в качестве контекста приложения для DispatcherServlet? Документация не очень понятна.

Контейнеры Older Servlet не поддерживают процесс начальной загрузки ServletContextInitializer, используемый в Servlet 3.0. Вы можете использовать spring и spring Boot в этих контейнерах, но вам нужно будет добавить web.xml в ваше приложение и настроить его для загрузки ApplicationContext через DispatcherServlet.

Спасибо заранее!

Педро

Ответ 1

Это не слишком сложно сделать... вам просто нужно перенаправить отображение по умолчанию...

@Configuration
public class DefaultView extends WebMvcConfigurerAdapter{

    @Override
    public void addViewControllers( ViewControllerRegistry registry ) {
        registry.addViewController( "/" ).setViewName( "forward:/yourpage.html" );
        registry.setOrder( Ordered.HIGHEST_PRECEDENCE );
        super.addViewControllers( registry );
    }
}

Ответ 2

Следуя учебнику Michael, я смог просто сопоставить / с моим index.gsp файлом.

@Controller
class Routes {

    @RequestMapping([
        "/",
        "/bikes",
        "/milages",
        "/gallery",
        "/tracks",
        "/tracks/{id:\\w+}",
        "/location",
        "/about"
    ])
    public String index() {
        return "forward:/index.gsp";
    }
}

Ответ 3

Я делаю это следующим образом.

package org.gwtproject.tutorial.configuration;

import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

/**
 * Configure the welcome page 
 * 
 */
@Configuration
public class SpringBootWelcomePageConfiguration extends WebMvcConfigurerAdapter implements WebMvcConfigurer {

    /**
     * redirect a user to the welcome page when he visits tha app without a
     * destination url.
     */
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("forward:/ForExampleAGwtEntrypoint.html");
        registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
        super.addViewControllers(registry);
    }
}