Spring Boot Deployed in Tomcat donne 404 mais fonctionne de manière autonome
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
- http: // localhost: 8080 / sophia / users
- 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).
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 DispatcherServlet
dans 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 /sophia
tant que server.context-path
dans le application.properties
et en mappant DispatcherServlet
vers /*
ou /
. Dans les deux cas, vous obtiendrez l'URL souhaitée (et attendue).