在简单的休息服务上出现404错误

时间:2016-09-07 10:02:10

标签: spring tomcat spring-boot http-status-code-404 spring-restcontroller

我对网络开发很陌生,今年夏天我在Spring上的一个网络应用程序上工作,但该应用程序已经设置好了,只是做了一些Java和AngularJS。但现在我有一些问题从头开始这种类型的应用程序。我试图测试一个简单的Web服务,但无法访问我想要的网址,我收到404错误。我正在使用Tomcat 8.5.4开发Intellij:

的pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <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>seb</groupId>
    <artifactId>webapp</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.5.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot</artifactId>
            <version>1.4.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>1.10.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>4.3.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>javax.persistence</groupId>
            <artifactId>persistence-api</artifactId>
            <version>1.0.2</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

</project>

应用context.xml中

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns:beans="http://www.springframework.org/schema/beans"
             xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:mvc="http://www.springframework.org/schema/mvc"
             xmlns:jpa="http://www.springframework.org/schema/data/jpa"
             xmlns:context="http://www.springframework.org/schema/context"
             xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/data/jpa
       http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
       http://www.springframework.org/schema/context">

       <jpa:repositories base-package="repository" />
       <mvc:annotation-driven/>
       <context:component-scan base-package="controller" />

</beans:beans>

的web.xml

<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
    <display-name>Archetype Created Web Application</display-name>
    <servlet>
        <servlet-name>springrest</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>springrest</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

Main.java

@SpringBootConfiguration
@EnableJpaRepositories("repository")
public class Main {

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

StudentController.java

@RestController
public class StudentController {

    private final StudentService studentService;

    public StudentController(final StudentService studentService) {
        this.studentService = studentService;
    }

    @RequestMapping(value = "/student", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
    public void getSomeStudent() {
        studentService.getSomeStudent();
        System.out.println("Hello");
    }
}

我想要访问的网址是:localhost:8080 / webapp / student,但没有任何反应,只是有404错误。我想我忘记了一些事情,但我在网上查看了一些教程和问题,无法想出如何修复我的项目。所以,如果有人得到一些可以帮助我的线索,那将非常有帮助。先谢谢。

3 个答案:

答案 0 :(得分:0)

将@SpringBootConfiguration更改为@SpringBootApplication,它会为您配置以下内容

  
      
  • @Configuration将该类标记为应用程序上下文的bean定义源。
  •   
  • @EnableAutoConfiguration告诉Spring Boot开始根据类路径设置,其他bean和各种属性添加bean   设置。通常你会为Spring MVC应用添加@EnableWebMvc,   但Spring Boot会在看到spring-webmvc时自动添加它   类路径。这将应用程序标记为Web应用程序和   激活关键行为,例如设置
  •   
  • @ComponentScan告诉Spring在hello包中寻找其他组件,配置和服务,允许它   找到HelloController。
  •   

由于您使用的是spring-boot,请添加以下依赖项,并删除web.xml,其中spring-boot会自动为您配置Web调度程序servlet

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

或者如果您愿意,您仍然可以继续配置。

根据您的初始设置,控制器应位于

http://localhost:8080/student(没有'webapp')

答案 1 :(得分:0)

好吧,我停止尝试在tomcat上部署我的应用程序,我现在只使用spring,我可以访问我的URL。无论如何,我将深入研究spring文档和教程,感谢不同的解释和链接。

答案 2 :(得分:-1)

使用https://start.spring.io/创建Spring Boot Application项目。

这将为您生成spring boot maven项目。

然后在那里添加你的StudentController。

并且当@jahra指定时,您必须触发URL:http://localhost:8080/student才能访问您的学生网络服务