web-dev-qa-db-fra.com

Spring RESTful Service en tant que WAR au lieu de JAR dans Tomcat

Je suis en train de créer un service Web REST dans Java Spring. J'ai réussi à charger STS et l'exemple détaillé à:

"Ce guide vous guide tout au long du processus de création d'un service Web RESTful" bonjour "avec Spring." http://spring.io/guides/gs/rest-service/

Cependant, ce didacticiel ne va que jusqu'à présent. Je veux créer un fichier WAR au lieu d'un pot auto-exécutable contenant un servlet et déployer ce fichier WAR. J'ai ensuite trouvé ce didacticiel et tenté de simplement modifier le premier fichier build.gradle des didacticiels.

"Conversion d'une application JAR Spring Boot en WAR" http://spring.io/guides/gs/convert-jar-to-war/

Il semblait s'intégrer très bien dans un fichier .war .. le service fonctionne dans le gestionnaire de mon instance Tomcat .. mais j'obtiens des 404 une fois que j'essaie d'utiliser le service.

URL 404'd

http://localhost:8080/gs-rest-service-0.1.0/dbgreeting?name=MyName

Dois-je modifier le mappage?

DataBaseController.Java

@RequestMapping("/dbgreeting")
    public @ResponseBody DataBaseGreeter dbgreeting(
            @RequestParam(value="name", required=false, defaultValue="World") String name) {
        return new DataBaseGreeter(counter.incrementAndGet(),String.format(template, name));
    }

Maintenant, j'ai le fichier .war créé selon un mélange de choses .. et inquiet d'avoir peut-être raté quelque chose.

J'ai découvert depuis que XAMPP sur OSX ne contient pas de dossier/application Web, ce qui m'a forcé à charger la pile Tomcat de Bitnami à la place. Les gens basculent-ils généralement entre XAMPP et d'autres piles en fonction de cela? ou ai-je manqué quelque chose pour obtenir le dossier webapp créé dans XAMPP?

19
Erik

UNE GUERRE n'est qu'un JAR avec des propriétés spéciales. Il doit avoir un WEB-INF, sous lequel vous avez besoin d'un web.xml pour décrire votre déploiement, tous les fichiers de configuration XML dépendants du serveur d'applications, et généralement une bibliothèque, des classes et d'autres aléas.

Le moyen le plus simple serait d'utiliser Maven pour créer votre WAR. Je pense que vous devriez pouvoir simplement changer le type de projet dans le pom.xml de JAR à WAR. Le tutoriel que vous avez suivi semble utiliser Gradle, qui à son tour utilise Maven je crois, vous devriez donc en avoir un quelque part. Autre que cela, google pour des tutoriels sur la façon de construire un WAR. Je ne pense pas que Tomcat nécessite des descripteurs de déploiement spéciaux, vous ne devriez donc avoir besoin que du web .xml.

6
CodeChimp

(La réponse de l'OP est passée de la question à ici)

Garçon, je me sens vraiment stupide .. J'ai trouvé qu'il y avait plus dans le tutoriel après avoir changé les instructions de gradle .. y compris la configuration automatique très nécessaire qui remplace/remplace le besoin d'un web.xml

Solution

Initialiser le servlet

Auparavant, l'application contenait une méthode public static void main() que le plugin spring-boot-gradle était configuré pour exécuter lors de l'utilisation de Java -jar commande.

En convertissant cela en un fichier WAR sans fichier XML, vous avez besoin d'un signal différent pour le conteneur de servlet sur la façon de lancer l'application.

src/main/Java/hello/HelloWebXml.Java

package hello;

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.SpringBootServletInitializer;

public class HelloWebXml extends SpringBootServletInitializer {

  @Override
  protected void configure(SpringApplicationBuilder application) {
     application.sources(Application.class);
  }

}

Donnera crédit à la première réponse, mais vous aviez tous deux raison de dire que le web.xml (ou ce que Spring-Boot utilise pour le remplacer) était nécessaire.

3
Duncan Jones

Je m'attendrais à voir une sortie INFO lorsqu'une application de démarrage à ressort démarre donc certaines idées sont:

Essayez une instance régulière de Tomcat

  • Téléchargez et extrayez le distribution Zip .
  • Démarrez Tomcat avec bin/startup.sh
  • Copiez votre guerre dans le répertoire webapps
  • Vérifiez les journaux ... espérons voir des preuves du démarrage du printemps

Inspectez manuellement le fichier de guerre

  • Décompressez votre fichier de guerre
  • Attendez-vous à voir WEB-INF/web.xml
1
samlewis