2016-06-22 12 views
2

enter image description hereEingesetzte Einfache Hello World mit Spring MVC app (ohne web.xml) gibt Fehler 404

Ich bin Neuling auf Spring MVC mit Anmerkungen, ich habe früher mit Spring MVC XML-Konfiguration gearbeitet. Ich bekomme 404 Fehler, wenn ich versuche, die URL http://localhost:8080/HelloWorldApp zu treffen. Ich habe drei Klassen geschrieben: 1. AppIntializer 2. AppConfig 3. AppController folgenden Code:

package com.demo; 
     public class AppIntializer implements WebApplicationInitializer { 
      private static final String CONFIG_LOCATION = "com.demo.config"; 

      @Override 
      public void onStartup(ServletContext servletContext) throws ServletException { 

      System.out.println("Initializing Application for " + servletContext.getServerInfo()); 

      // Create ApplicationContext 
      AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext(); 
      applicationContext.setConfigLocation(CONFIG_LOCATION); 

      // Add the servlet mapping manually and make it initialize automatically 
      DispatcherServlet dispatcherServlet = new DispatcherServlet(applicationContext); 
      ServletRegistration.Dynamic servlet = servletContext.addServlet("mvc-dispatcher", dispatcherServlet); 

      servlet.addMapping("/"); 
      servlet.setAsyncSupported(true); 
      servlet.setLoadOnStartup(1); 
     } 
    } 

    package com.demo.config; 
     @Configuration 
     @EnableWebMvc 
     @ComponentScan("com.demo") 
     public class AppConfig extends WebMvcConfigurerAdapter { 

     } 

    package com.demo.web.controller; 
    @Controller 
    public class AppController { 
     @ResponseBody 
     @RequestMapping(value = "/", method = RequestMethod.GET) 
     public String helloWorld() { 
      return "Hello World: Spring MVC without XML configuration"; 
     } 
    } 

pom.xml

<modelVersion>4.0.0</modelVersion> 
    <groupId>HelloWorldApp</groupId> 
    <artifactId>HelloWorldApp</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>war</packaging> 
    <properties> 
     <spring-framework.version>4.2.1.RELEASE</spring-framework.version> 
     <servlet.version>3.0.1</servlet.version> 

    </properties> 
    <dependencies> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>${spring-framework.version}</version> 
      <scope>provided</scope> 
     </dependency> 

     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>javax.servlet-api</artifactId> 
      <version>${servlet.version}</version> 
      <scope>provided</scope> 
     </dependency> 
    </dependencies> 
    <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>      
      <plugin> 
       <groupId>org.apache.tomcat.maven</groupId> 
       <artifactId>tomcat7-maven-plugin</artifactId> 
       <version>2.2</version> 
       <configuration> 
        <port>8080</port> 
        <path>/</path> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

ich versucht habe, um es auszuführen:

Konsolenausgabe:

C:\Users\workspace_new\HelloWorldApp>mvn tomcat7:run 
    [INFO] Scanning for projects... 
    [INFO] 
    [INFO] ------------------------------------------------------------------------ 
    [INFO] Building HelloWorldApp 0.0.1-SNAPSHOT 
    [INFO] ------------------------------------------------------------------------ 
    [INFO] 
    [INFO] >>> tomcat7-maven-plugin:2.2:run (default-cli) > process-classes @ HelloWorldApp >>> 
    [INFO] 
    [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ HelloWorldApp --- 
    [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! 
    [INFO] skip non existing resourceDirectory C:\Users\harleen.dhingra\workspace_new\HelloWorldApp\src\main\resources 
    [INFO] 
    [INFO] --- maven-compiler-plugin:3.3:compile (default-compile) @ HelloWorldApp --- 
    [INFO] Nothing to compile - all classes are up to date 
    [INFO] 
    [INFO] <<< tomcat7-maven-plugin:2.2:run (default-cli) < process-classes @ HelloWorldApp <<< 
    [INFO] 
    [INFO] --- tomcat7-maven-plugin:2.2:run (default-cli) @ HelloWorldApp --- 
    [INFO] Running war on http://localhost:8080/ 
    [INFO] Using existing Tomcat server configuration at C:\Users\harleen.dhingra\workspace_new\HelloWorldApp\target\tomcat 
    [INFO] create webapp with contextPath: 
    Jun 22, 2016 11:11:37 AM org.apache.coyote.AbstractProtocol init 
    INFO: Initializing ProtocolHandler ["http-bio-8080"] 
    Jun 22, 2016 11:11:37 AM org.apache.catalina.core.StandardService startInternal 
    INFO: Starting service Tomcat 
    Jun 22, 2016 11:11:37 AM org.apache.catalina.core.StandardEngine startInternal 
    INFO: Starting Servlet Engine: Apache Tomcat/7.0.47 
    Jun 22, 2016 11:11:39 AM org.apache.coyote.AbstractProtocol start 
    INFO: Starting ProtocolHandler ["http-bio-8080"] 

Ich bin nicht Fehler auf der Konsole immer, wenn ich http://localhost:8080/HelloWorldApp/ oder http://localhost:8080/ schlug ich Ausgabe als „Hallo Welt: Spring MVC ohne XML-Konfiguration“ erhalten sollte ich in bekommen

+0

gezeigt ich glaube, du verpasst die '@ Controller' Annotation auf Ihrer' öffentlichen Klasse AppController' – Patrick

+0

Ich habe den @Controller auf AppController hinzugefügt, aber immer noch bekomme ich 404 Fehler. – Harleen

+0

Hast du von 'Spring-Boot' gehört? Ich würde vorschlagen, es zu verwenden, weil es auf baut, um vollständige Frühlingsanwendungen ohne Konfigurationsdateien zu bauen. – Patrick

Antwort

0

Fehlende @Controller Anmerkung statt 404 Fehler die Controller-Klasse.
sollte Ihre Controller-Klasse

package com.demo.web.controller; 
@Controller 
public class AppController { 
    @ResponseBody 
    @RequestMapping(value = "/", method = RequestMethod.GET) 
    public String helloWorld() { 
     return "Hello World: Spring MVC without XML configuration"; 
    } 
} 

bearbeiten
Hier sind zwei Updates zu dieser Antwort
Lösung 1
Fügen Sie diesen Code in Ihre AppInitializer Klasse wie sein

applicationContext.setServletContext(servletContext); 

Wenn Lösung damals nicht funktioniert der Code wie folgt ändern:
Lösung 2 ich es etwas anders tat und es funktionierte.
Hier sind die Änderungen:

  1. Ihre AppInitializer Klasse zu diesem Paket (config-Ordner) & Änderung es com.demo.config
  2. Verwenden .register Methode, statt .setConfigLocation bewegen wie unten
package com.demo.config; 
    public class AppIntializer implements WebApplicationInitializer { 

     @Override 
     public void onStartup(ServletContext servletContext) throws ServletException { 

     System.out.println("Initializing Application for " + servletContext.getServerInfo()); 

     // Create ApplicationContext 
     AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext(); 

     applicationContext.register(AppConfig.class); 
     applicationContext.setServletContext(servletContext); 

     // Add the servlet mapping manually and make it initialize automatically 
     DispatcherServlet dispatcherServlet = new DispatcherServlet(applicationContext); 
     ServletRegistration.Dynamic servlet = servletContext.addServlet("mvc-dispatcher", dispatcherServlet); 

     servlet.addMapping("/"); 
     servlet.setAsyncSupported(true); 
     servlet.setLoadOnStartup(1); 
    } 
} 
+0

oops Ich habe das vermisst, ich habe den @Controller auf AppController hinzugefügt, aber immer noch bekomme ich 404 Fehler. Gibt es noch etwas zu sehen? – Harleen

+0

hast du das Projekt gereinigt? @Harleen –

+0

Ich lief zwei Befehle wieder mvn sauber installieren & mvn tomcat7: Ausführen von cmd, aber ich bekomme den gleichen Fehler 404, wenn ich http: // localhost: 8080/HelloWorldApp/im Browser drücken. – Harleen