2015-09-16 2 views
2

Я пытаюсь сделать Spring MVC учебника:404 ошибки главного контроллера при использовании пружинных загрузок

Это заставляет вас создать основной контроллер объявление начать SpringApplication.

Когда я запускаю SpringApplication, я вижу, что сервер Tomcat запускается, класс контроллера получает инстанс, как и следовало ожидать. Однако сопоставление кажется неудачным: @RequestMapping ("/ greeting") Когда я пытаюсь просмотреть http://localhost:8080/TestSpringOpenEMM2/greeting или http://localhost:8080/TestSpringOpenEMM2/greeting, я всегда получаю ошибку 404. (TestSpringOpenEMM2 - мое имя проекта).

Я использую Eclipse IDE.

Вот мои файлы:

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"); 
    } 
} 

контроллер:

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"); 
} 
} 

ПОМ:

<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

Вы попробовали добавить примечание @RequestMapping к своему контроллеру? – Paddyd

+0

убедитесь, что у вас есть правильная структура каталогов и орфография/капитализация. Согласно ссылке, которую я нашел, он говорит: «Чтобы завершить наше приложение, нам нужно создать один файл Java. Maven будет компилировать источники из src/main/java по умолчанию, поэтому вам нужно создать эту структуру папок, а затем добавить файл с именем src /main/java/Example.java: " – jeffkempf

+0

и ссылка http://docs.spring.io/spring-boot/docs/current/reference/html/getting-started-first-application.html – jeffkempf

ответ

1

spring-boot-starter-parent является отличным способом, чтобы использовать Spring бутс, следовательно, использовать pom.xml так:

<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> 

загрузочного весеннем по умолчанию с использованием встроенного TOMCAT контейнера, вам просто нужно запустить метод main. Дополнительная информация по этой теме: Spring Boot's Doc

+0

THX за предложение, как бы родитель-родитель помог решить проблему ненадолго? –

+0

Ну, это сработало. Я следил за ссылкой, опубликованной за пределами: docs.spring.io/spring-boot/docs/current/reference/html/ Thx за предложение –

+0

Ваш прием. Обычно весенние проекты имеют отличную документацию –

1

Если поднять уровень журнала Spring он должен, при запуске веб-приложений, покажите, какие URL-адреса отображаются на какие классы/методы. Это может помочь.

Кроме того, если вы используете Eclipse, щелкните правой кнопкой мыши проект -> Свойства -> Настройки веб-проекта -> Корень контекста. Убедитесь, что это так, как вы ожидаете, например, TestSpringOpenEMM2. Я видел много примеров этого (корневого контекста), не ожидаемого в Eclipse.

+0

Корень контекста как и ожидалось. Журналы упоминают об этом: INFOS: Фильтр отображения: 'characterEncodingFilter' to: [/ *] Я не вижу никаких других журналов относительно URL-адресов при запуске приложения с параметром --debug. Еще http: // localhost: 8080/приветствие не работает, а http: // localhost: 8080 /, или http: // localhost: 8080/TestSpringOpenEMM2/приветствие. –

0

Возможно, вы можете использовать @RestController не @Controller. Для REST api, если я использую @Controller, запрос приведет к ошибке 404, но после того, как я изменил ее на @RestController, запрос работает нормально.

Смежные вопросы