web-dev-qa-db-fra.com

comment spécifier la liste de fichiers de bienvenue dans WebApplicationInitializer.onStartup ()

Actuellement, j'ai une application Web où nous utilisons web.xml pour configurer l'application. Le web.xml a une liste de fichiers de bienvenue.

<web-app>  
   ...
   <welcome-file-list>  
     <welcome-file>home.html</welcome-file>  
   </welcome-file-list>  
</web-app>  

Nous prévoyons d'utiliser le framework Spring et d'utiliser la classe Java pour la configuration de l'application.

class MyApplication extends WebApplicationInitializer {
    public void onStartUp(ServletContext context){
        ...
    }
}

Comment spécifier la liste des fichiers de bienvenue dans cette classe Java?

16
user2032118

Lors du développement d'une application Spring MVC avec une pure Java, nous pouvons définir la page d'accueil en créant notre classe de configuration d'application en étendant la classe WebMvcConfigurerAdapter et en remplaçant la addViewControllers méthode où nous pouvons définir la page d'accueil par défaut comme décrit ci-dessous.

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "com.myapp.controllers" })
public class ApplicationConfig extends WebMvcConfigurerAdapter {

  @Bean
  public InternalResourceViewResolver getViewResolver() {
    InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
    viewResolver.setPrefix("/WEB-INF/view/");
    viewResolver.setSuffix(".jsp");
    return viewResolver;
  }

  @Override
  public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/").setViewName("home");
  }

}

Il renvoie home.jsp vue qui peut servir de page d'accueil. Pas besoin de créer une logique de contrôleur personnalisée pour retourner la vue de la page d'accueil.

La méthode JavaDoc pour addViewControllers dit -

Configurez des contrôleurs automatisés simples préconfigurés avec le code d'état de réponse et/ou une vue pour rendre le corps de réponse. Ceci est utile dans les cas où il n'y a pas besoin de logique de contrôleur personnalisée - par exemple afficher une page d'accueil, effectuer des redirections d'URL de site simples, renvoyer un état 404 avec du contenu HTML, un 204 sans contenu, etc.

2ème voie - Pour la page d'accueil d'un fichier HTML statique, nous pouvons utiliser le code ci-dessous dans notre classe de configuration. Il renverra index.html comme page d'accueil -

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("forward:/index.html");
    }

3ème manière - Le mappage de demande "/" ci-dessous renverra également la vue home qui peut être utilisée comme page d'accueil pour une application. Mais les moyens ci-dessus sont recommandés.

@Controller
public class UserController {
    @RequestMapping(value = { "/" })
    public String homePage() {
        return "home";
    }
}
19
Omkar

Tu ne peux pas

Comme spécifié dans Java Doc

public interface WebApplicationInitializer

Interface à implémenter dans les environnements Servlet 3.0+ afin de configurer le ServletContext par programmation - par opposition à (ou éventuellement en conjonction avec) l'approche traditionnelle basée sur web.xml.

mais vous avez encore besoin d'une configuration minimale dans web.xml, comme pour

<welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
</welcome-file-list>
7
Neeraj Jain
@EnableWebMvc
@Configuration
@ComponentScan("com.springapp.mvc")
public class MvcConfig extends WebMvcConfigurerAdapter {
...
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/*.html").addResourceLocations("/WEB-INF/pages/");
}

@Override
public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/").setViewName("forward:/index.html");
}
...
}

Cela pourrait aider.

5
Kartik Mavani