Spring Boot Deployed in Tomcat donne 404 mais fonctionne de manière autonome


xelamitchell:

Je teste Spring Boot avec Tomcat intégré depuis environ un mois maintenant pour créer une API REST. Tout fonctionnait bien. Nous voulons maintenant déployer l'API dans un environnement de développement distinct qui a quelques autres applications (non Spring) s'exécutant sur un conteneur Tomcat.

J'ai apporté les modifications spécifiées dans Conversion d'une application JAR Spring Boot en WAR à l'aide de Maven et Spring Boot Docs .

Le déploiement se passe bien (les journaux sont corrects, aucune erreur) et en regardant la gestion de Tomcat, je vois mon application déployée. Cependant, lorsque j'essaie d'accéder à http: // localhost: 8080 / sophia / users en curl, j'obtiens 404.

Toute aide est très appréciée.

METTRE À JOUR:

Voici mes journaux:

Netbeans:

NetBeans: Déploiement sur Apache Tomcat 8.0.17 mode de profil: faux mode de débogage: faux force redéploiement: vrai

Déploiement sur place à /home/bugz/workspace/pdcore/sophiaserver/target/sophia-server-1.0.0-SNAPSHOT

Le déploiement est en cours ...

deploy? config = fichier% 3A% 2Ftmp% 2Fcontext1845402702541504208.xml & path = / sophia

OK - Application déployée sur le chemin du contexte / sophia

Le démarrage est en cours ...

start? path = / sophia

OK - Application démarrée sur le chemin du contexte / sophia

Matou:

INFO 10: 47: 52: 703 org.springframework.boot.context.embedded.ServletRegistrationBean - Mappage du servlet: 'dispatcherServlet' vers [/ sophia / *]

INFO 10: 47: 54: 042 org.springframework.boot.SpringApplication - Application démarrée en 8,285 secondes (JVM en cours d'exécution pour 12087.301)

22-Jan-2015 10: 47: 54.060 INFO [http-nio-8080-exec-99] org.apache.catalina.startup.HostConfig.deployDescriptor Déploiement du descripteur de configuration / home / bugz / workspace / server / apache-tomcat- 8.0.17 / conf / Catalina / localhost / sophia.xml a terminé en 12 091 ms

Et dans sophia.xml pour l'hôte local Catalina:

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" docBase="/home/bugz/workspace/pdcore/sophiaserver/target/sophia-server-1.0.0-SNAPSHOT" path="/sophia"/>

J'ai essayé d'accéder

  1. http: // localhost: 8080 / sophia / users
  2. http: // localhost: 8080 / sophia-server-1.0.0-SNAPSHOT / users (nom de WAR)

Le premier renvoie un 404 mais avec les informations CORS de mon bean de filtre CORS. Le second retourne 404 sans informations CORS (ce qui indique que l'application a démarré et est configurée mais je ne semble pas avoir accès aux contrôleurs).

Marcus alors:

Lors de l'exécution d'une application, le chemin à appeler se compose de deux parties.

Le premier est l'URL de base sur laquelle l'application est déployée, dans votre cas, c'est le cas /sophia.

Le second est le mappage de servlet du DispatcherServletdans votre cas /sohpia/*.

Le troisième est le mappage du contrôleur à l'intérieur du DispatcherServlet, dans votre exemple /users.

Toutes ces choses combinées créent l'URL /sophia/sophia/users.

La différence entre le déploiement en tant que WAR est que vous avez inclus une URL distincte sur laquelle vous déployer, lorsque vous l'exécutez en tant que fichier Jar, par défaut, il est déployé sur /(la racine).

Vous pouvez le corriger en mettant en /sophiatant que server.context-pathdans le application.propertieset en mappant DispatcherServletvers /*ou /. Dans les deux cas, vous obtiendrez l'URL souhaitée (et attendue).

Articles connexes


Le déploiement de Tomcat de Spring Boot donne 404

AbramD J'essaie de déployer un contrôleur Spring Boot Rest sur Tomcat 8. Lorsque je l'exécute directement à partir d'Eclipse, cela fonctionne très bien. Mais lors du déploiement sur Tomcat 8, j'obtiens une erreur 404. J'ai suivi ces instructions ( https://www.

Spring Boot - page 404 personnalisée avec Tomcat autonome

derrière J'exécute une application de démarrage Spring dans une instance Tomcat autonome et j'essaie de remplacer les pages d'erreur. D'après ce que je comprends, Spring fournit un filtre ErrorPageFilter qui me permet de simplement configurer les pages d'erreu