Изменение приветственной страницы по умолчанию для приложения 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);
}
}