web-dev-qa-db-fra.com

Modification de la page d'accueil par défaut pour l'application Spring-Boot déployée en mode guerre

J'essayais de trouver un moyen de changer la page d'accueil par défaut pour une application Spring-Boot déployée comme une guerre en production, mais je ne trouve pas le moyen de le faire sans fichier web.xml.

Selon la documentation, nous pouvons le faire en utilisant EmbeddedServletContainerFactory avec ce code:

@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;
}

Bien que nous créons un fichier war et que nous le déployons sur Tomcat sans utiliser le Tomcat intégré, cela ne fait rien.

Une idée? Si nous avons vraiment besoin d'ajouter un fichier web.xml, comment pouvons-nous le faire et continuer à utiliser Spring Boot? Devrions-nous spécifier le bean Application (avec la méthode main) comme contexte d'application pour DispatcherServlet? La documentation n'est pas très claire à ce sujet.

Les anciens conteneurs de servlets ne prennent pas en charge le processus d’amorçage ServletContextInitializer utilisé dans Servlet 3.0. Vous pouvez toujours utiliser Spring et Spring Boot dans ces conteneurs, mais vous allez devoir ajouter un fichier web.xml à votre application et le configurer pour charger un ApplicationContext via un DispatcherServlet.

Merci d'avance!

Pedro

16
pVilaca

Ce n'est pas trop difficile à faire ... il vous suffit de transférer le mappage par défaut ... 

@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 );
    }
}
24
Eddie B

Après le tutoriel de Michael , j'ai pu mapper / à mon fichier index.gsp.

@Controller
class Routes {

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

Je le fais comme suit.

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);
    }
}
0
99Sono

Eh bien, quelques années se sont écoulées depuis la dernière réponse - et le code évolue ..

Cela ne fonctionnera pas sur Spring 5/Java 8+, vous devez implémenter l'interface et remplacer la méthode par défaut.

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

@Configuration
public class DefaultViewConfig implements WebMvcConfigurer {
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("/homepage.html");
        registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
    }
}
0
Yossi