5 votes

le fichier d'accueil dans le web.xml avec spring ne fonctionne pas ?

J'ai configuré mon servlet spring-mvc pour correspondre à * .page demandes. J'ai configuré le liste de fichiers de bienvenue dans web.xml pour être index.page

Cela fonctionne lorsque je vais à la racine de mon serveur web :

http://me.com est redirigé vers http://me.com/index.page correctement.

Cependant, il ne redirige pas lorsque j'utilise des sous-répertoires :

http://me.com/dashboard fait no sont redirigés vers http://me.com/dashboard/index.page

Y a-t-il un moyen de faire fonctionner cette cartographie ?

Mon fichier web.xml (extrait) :

<welcome-file-list>
    <welcome-file>index.page</welcome-file>
</welcome-file-list>

<servlet-mapping>
    <servlet-name>spring-mvc</servlet-name>
    <url-pattern>*.page</url-pattern>
</servlet-mapping>

Mon webdefault.xml (de jetty) :

    <init-param>
        <param-name>dirAllowed</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>welcomeServlets</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>redirectWelcome</param-name>
        <param-value>false</param-value>
    </init-param>

13voto

BalusC Points 498232

En <welcome-file> doit représenter un fichier existant physiquement dans un dossier arbitraire que vous souhaitez servir chaque fois que l'utilisateur final demande un dossier (tel que le dossier racine). / mais il peut aussi s'agir de n'importe quel autre dossier, tel que /foo/ ). Il suffit de comprendre que le servletcontainer testera son existence physique avant d'effectuer un transfert. S'il n'existe pas, une erreur HTTP 404 page not found sera renvoyée.

Dans votre cas particulier, vous ne disposez pas d'un physique index.page dans votre dossier racine. Vous avez en fait a index.jsp dans votre dossier racine. Le site index.page est simplement une URL virtuelle. Donc le servletcontainer ne sera pas capable de trouver l'URL physique. index.page et donc une erreur de 404.

Vous pouvez contourner ce problème en trompant le servletcontainer en plaçant un objet physiquement existant index.page à côté du fichier index.jsp dans le même dossier. Ce fichier peut simplement rester complètement vide. Le servletcontainer trouvera le fichier et le transmettra ensuite à index.page qui invoquera ensuite le servlet du contrôleur qui, à son tour, servira réellement le fichier index.jsp comme vue. Cela fonctionnera très bien.

3voto

Bozho Points 273663

Il ne fonctionnera que pour des répertoires physiques réels, et non pour des mappages de servlets arbitraires simulant la structure du répertoire.

Spring MVC permet des mappages d'URL très complexes, il est donc préférable de gérer ce scénario avec @RequestMapping

2voto

Moesio Points 788

Pour éviter de transférer le fichier d'accueil lui-même, il est préférable d'ajouter un mappage pour celui-ci.

  <servlet-mapping>
     <servlet-name>spring-mvc</servlet-name>
     <url-pattern>index.html</url-pattern>
  </servlet-mapping>

Dans le cas d'une configuration java, vous pouvez remplacer deux méthodes dans la classe qui prolonge WebMvcConfigurerAdapter.

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

@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
    configurer.enable();
}

Si vous voulez servir index.html de manière explicite, transformez-le en ressource en surchargeant une méthode dans la même classe comme ci-dessous :

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/index.html").addResourceLocations("/WEB-INF/views/index.html");
}

Bien sûr. addResourceLocations doit suivre le dossier choisi pour contenir vos vues.

Véase ces échantillons

0voto

Ryan Fernandes Points 3938

C'est quelque chose que vous devez probablement définir dans votre serveur web, et donc, peut-être spécifique au serveur.

Pour le serveur HTTP Apache, vous pouvez y parvenir en définissant la directive DirectoryIndex comme suit : DirectoryIndex index.page

Apparemment, quelqu'un a déjà posé cette question, et a accepté une réponse à l'adresse suivante fichier web.xml par défaut dans le répertoire (pour jetty, ou tomcat) ? - Voyez si cela fonctionne pour vous.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X