2015-10-23 2 views
1

Прежде всего обратите внимание, что я новичок в этом отношении. Я начал веб-проект Spring maven и написал 3 класса (опубликовано ниже). Я положил проект на мой сервер tomcat (из eclipse), и когда я его запустил, я могу получить доступ к localhost: 8080 (показана страница по умолчанию tomcat), но когда я пытаюсь обратиться к localhost: 8080/greeting, я получаю ошибку 404 , Что я делаю не так? Я также выложу мой pom.xmlПочему я не могу получить доступ к контроллеру?

Спасибо

Приветствие:

package hello; 

public class Greeting { 
    private final long id; 
    private final String content; 

    public Greeting(long id, String content) { 
     this.id = id; 
     this.content = content; 
    } 

    public long getId() { 
     return id; 
    } 

    public String getContent() { 
     return content; 
    } 
} 

GreetingController:

package hello; 

    import java.util.concurrent.atomic.AtomicLong; 
    import org.springframework.web.bind.annotation.RequestMapping; 
    import org.springframework.web.bind.annotation.RequestParam; 
    import org.springframework.web.bind.annotation.RestController; 

    @RestController 
    public class GreetingController { 

     private static final String template = "Hello, %s!"; 
     private final AtomicLong counter = new AtomicLong(); 

     @RequestMapping("/greeting") 
     public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) { 
      return new Greeting(counter.incrementAndGet(), 
           String.format(template, name)); 
     } 
    } 

Применение:

package hello; 

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

@SpringBootApplication 
public class Application { 

    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 
} 

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> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.2.7.RELEASE</version> 
    </parent> 

    <artifactId>WebTest</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>war</packaging> 

    <properties> 

     <!-- Generic properties --> 
     <java.version>1.8</java.version> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 

     <!-- Web --> 
     <jsp.version>2.2</jsp.version> 
     <jstl.version>1.2</jstl.version> 
     <servlet.version>2.5</servlet.version> 


     <!-- Spring --> 
     <spring-framework.version>3.2.3.RELEASE</spring-framework.version> 

     <!-- Hibernate/JPA --> 
     <hibernate.version>4.2.1.Final</hibernate.version> 

     <!-- Logging --> 
     <logback.version>1.0.13</logback.version> 
     <slf4j.version>1.7.5</slf4j.version> 

     <!-- Test --> 
     <junit.version>4.11</junit.version> 

    </properties> 

    <dependencies> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 

     <!-- Spring MVC --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>4.1.8.RELEASE</version> 
     </dependency> 

     <!-- Other Web dependencies --> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>jstl</artifactId> 
      <version>${jstl.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>servlet-api</artifactId> 
      <version>${servlet.version}</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet.jsp</groupId> 
      <artifactId>jsp-api</artifactId> 
      <version>${jsp.version}</version> 
      <scope>provided</scope> 
     </dependency> 

     <!-- Spring and Transactions --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-tx</artifactId> 
      <version>${spring-framework.version}</version> 
     </dependency> 

     <!-- Logging with SLF4J & LogBack --> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>${slf4j.version}</version> 
      <scope>compile</scope> 
     </dependency> 
     <dependency> 
      <groupId>ch.qos.logback</groupId> 
      <artifactId>logback-classic</artifactId> 
      <version>${logback.version}</version> 
      <scope>runtime</scope> 
     </dependency> 

     <!-- Hibernate --> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-entitymanager</artifactId> 
      <version>${hibernate.version}</version> 
     </dependency> 


     <!-- Test Artifacts --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-test</artifactId> 
      <version>${spring-framework.version}</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>${junit.version}</version> 
      <scope>test</scope> 
     </dependency> 

    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
      </plugin> 
     </plugins> 
    </build> 
</project> 
+0

- это 'Application.java' и' GreetingController.java' в том же пакете? если не пытаться помещать их в один и тот же пакет ... Это ограничение аннотации '@ SpringBootApplication', чтобы решить эту проблему, вы можете попробовать заменить эту аннотацию на' @ Configuration @ EnableAutoConfiguration @ ComponentScan' ... –

ответ

0

При развертывания приложения в автономный экземпляр Tomcat и не развертываются как приложение ROOT, вы должны добавить имя приложения в вашей URL. Вы можете проверить журнал Tomcat для точного имени. Если вы назвали свой проект «helloworld», то Eclipse обычно развертывает проект с таким именем в качестве имени приложения, поэтому вы должны позвонить в свое приложение с URL-адресом http://localhost:8080/helloworld/greeting

0

Если вам действительно не нужно развернуть приложение на внешний сервер Tomcat, вы можете решить свою проблему, просто выполнив основной метод вашего приложения напрямую. Spring Boot запускает встроенный экземпляр Tomcat для вас.

Если вам нужно развернуть приложение на внешний сервер Tomcat, вам нужно немного изменить свой класс Application, чтобы он запустился правильно. Вы должны расширить SpringBootServletInitializer и переопределить метод configure:

@SpringBootApplication 
public class Application extends SpringBootServletInitializer { 

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

    public static void main(String[] args) throws Exception { 
     SpringApplication.run(Application.class, args); 
    } 

} 

Это покрывается в traditional deployment section пружинах эталонной загрузки документации.

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