2015-09-16 1 views
2

J'essaie de faire Spring MVC tutoriel:404 erreur sur le contrôleur principal lors de l'utilisation de démarrage au printemps

Il vous fait créer un contrôleur principal pour lancer un SpringApplication. Lorsque j'exécute SpringApplication, je peux voir qu'un serveur Tomcat démarre, une classe de contrôleur est instanciée comme il se doit. Cependant, le mappage semble échouer: @RequestMapping ("/ greeting") Lorsque j'essaie de parcourir http://localhost:8080/TestSpringOpenEMM2/greeting ou http://localhost:8080/TestSpringOpenEMM2/greeting, j'obtiens toujours une erreur 404. (TestSpringOpenEMM2 est le nom de mon projet).

J'utilise eclipse IDE.

Voici mes fichiers:

package application; 

import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 


@SpringBootApplication 
public class Application { 

    public static void main(String[] args) { 

     System.out.println("App starting"); 
     SpringApplication.run(Application.class, args); 
     System.out.println("App started"); 
    } 
} 

contrôleur:

import javax.servlet.annotation.WebServlet; 

import org.springframework.stereotype.Controller; 
import org.springframework.ui.Model; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestParam; 


@Controller 
public class GreetingController { 



static{ 
    System.out.println("Static init GreetingController"); 



} 




    @RequestMapping("/greeting") 
    public String greeting(@RequestParam(value="name", required=false, defaultValue="World") String name, Model model) { 
     System.out.println("starting servlet (greeting)"); 

     model.addAttribute("name", name); 
     return "greeting"; 
    } 

    public GreetingController(){ 
     super(); 

     System.out.println("new GreetingController"); 
} 
} 

pom:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>TestSpringOpenEMM2</groupId> 
    <artifactId>TestSpringOpenEMM2</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>war</packaging> 
    <build> 
    <sourceDirectory>src</sourceDirectory> 
    <plugins> 
     <plugin> 
     <artifactId>maven-war-plugin</artifactId> 
     <version>2.6</version> 
     <configuration> 
      <warSourceDirectory>WebContent</warSourceDirectory> 
      <failOnMissingWebXml>false</failOnMissingWebXml> 
     </configuration> 
     </plugin> 
     <plugin> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>3.3</version> 
     <configuration> 
      <source>1.7</source> 
      <target>1.7</target> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
    <dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot</artifactId> 
     <version>1.2.5.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-autoconfigure</artifactId> 
     <version>1.2.5.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
     <version>4.1.7.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.tomcat.embed</groupId> 
     <artifactId>tomcat-embed-logging-juli</artifactId> 
     <version>8.0.23</version> 
    </dependency> 
    </dependencies> 
</project> 
+0

Avez-vous essayé d'ajouter également une annotation @RequestMapping à votre contrôleur? – Paddyd

+0

assurez-vous que vous avez la bonne structure de répertoire et l'orthographe/capitalisation. Selon un lien que j'ai trouvé, il dit "Pour terminer notre application, nous devons créer un seul fichier Java.Maven compilera les sources de src/main/java par défaut, donc vous devez créer cette structure de dossier, puis ajouter un fichier nommé src /main/java/Example.java: " – jeffkempf

+0

et le lien est http://docs.spring.io/spring-boot/docs/current/reference/html/getting-started-first-application.html – jeffkempf

Répondre

1

Le spring-boot-starter-parent est un excellent moyen d'utiliser Spring Boot, utilisez donc un pom.xml comme ceci:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>TestSpringOpenEMM2</groupId> 
    <artifactId>TestSpringOpenEMM2</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.2.5.RELEASE</version> 
    </parent> 
    <dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 
    </dependencies> 
</project> 

Par botte ressort par défaut en utilisant un conteneur tomcat intégré, il vous suffit d'exécuter la méthode main. En savoir plus sur ce sujet sur Spring Boot's Doc

+0

thx pour la suggestion, comment un parent d'origine aiderait-il à résoudre le problème brièvement? –

+0

Eh bien, ça a marché. J'ai suivi le lien posté au-delà: docs.spring.io/spring-boot/docs/current/reference/html/ Thx pour la suggestion –

+0

Votre bienvenue. Les projets de printemps ont généralement de bonnes documentations –

1

Si vous augmentez le niveau de journal de printemps il se doit, lorsque commence web app, vous montrer quelles URL sont mappées à quelles classes/méthodes. Cela peut aider. Si vous utilisez Eclipse, cliquez avec le bouton droit de la souris sur projet -> Propriétés -> Paramètres du projet Web -> Racine de contexte. Assurez-vous que ce soit comme vous le souhaitez, c'est-à-dire TestSpringOpenEMM2. J'ai vu beaucoup d'exemples de cela (racine de contexte) ne pas être comme prévu dans Eclipse.

+0

La racine du contexte est comme prévu. Les journaux mentionnent ceci: INFOS: Filtre de mappage: 'characterEncodingFilter' vers: [/ *] Je ne vois aucun autre journal relatif aux URL lors du démarrage de l'application avec le paramètre --debug. Toujours http: // localhost: 8080/le message d'accueil ne fonctionne pas, ni http: // localhost: 8080 /, ni http: // localhost: 8080/TestSpringOpenEMM2/message d'accueil. –

0

Peut-être que vous pouvez utiliser @RestController pas @Controller. Pour l'API REST, si j'utilise @Controller, la requête provoquera une erreur 404 non trouvée, mais après que je l'ai modifiée en @RestController, la requête fonctionne correctement.