【问题标题】:Spring Boot Application - 404 Not Found on tomcatSpring Boot 应用程序 - 在 tomcat 上找不到 404
【发布时间】:2018-07-06 08:38:19
【问题描述】:

我已经阅读了大量关于此的问题,但没有一个有帮助。 我正在构建一个非常简单的休息应用程序,但控制器没有响应请求,我收到此错误:

HTTP Status 404 – Not Found
Type Status Report

Message /

Description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.

Apache Tomcat/8.5.23

我已将System.out 放入也未显示的控制器中,因此甚至没有调用方法。

我的项目结构是:

Application 类在app 包下。

配置:

@Configuration
@EnableTransactionManagement
public class DatabaseConfig {


@Autowired
private Environment env;

@Bean(name = "dataSource")
public DataSource dataSource() {
    DriverManagerDataSource dataSource = new DriverManagerDataSource();
    dataSource.setDriverClassName(env.getProperty("db.driver"));
    dataSource.setUrl(env.getProperty("db.url"));
    dataSource.setUsername(env.getProperty("db.username"));
    dataSource.setPassword(env.getProperty("db.password"));
    return dataSource;
}

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
    LocalContainerEntityManagerFactoryBean entityManagerFactory =
            new LocalContainerEntityManagerFactoryBean();

    entityManagerFactory.setDataSource(dataSource());

    // Classpath scanning of @Component, @Service, etc annotated class
    entityManagerFactory.setPackagesToScan(
            env.getProperty("entitymanager.packagesToScan"));

    // Vendor adapter
    HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
    entityManagerFactory.setJpaVendorAdapter(vendorAdapter);

    // Hibernate properties
    Properties additionalProperties = new Properties();
    additionalProperties.put(
            "hibernate.dialect",
            env.getProperty("hibernate.dialect"));
    additionalProperties.put(
            "hibernate.show_sql",
            env.getProperty("hibernate.show_sql"));
    additionalProperties.put(
            "hibernate.hbm2ddl.auto",
            env.getProperty("hibernate.hbm2ddl.auto"));
    entityManagerFactory.setJpaProperties(additionalProperties);

    return entityManagerFactory;
}

@Bean
public JpaTransactionManager transactionManager() {
    JpaTransactionManager transactionManager =
            new JpaTransactionManager();
    transactionManager.setEntityManagerFactory(
            entityManagerFactory().getObject());
    return transactionManager;
}

@Bean
public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
    return new PersistenceExceptionTranslationPostProcessor();
}
}

控制器:

@Controller
public class CharacterController {

@RequestMapping(value="/", method= RequestMethod.GET)
public  String start() {
    System.out.println("Start");
    return "Hello.";
}

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>xxxxxxxxxxx</groupId>
<artifactId>xxxxxxxxxxxxxxx</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>xxxxxxxxxxxxxxxxx</name>
<description>xxxxxxxxxxxxxxxxxxxxxx</description>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.9.RELEASE</version>
    <relativePath/> <!-- lookup parent fapp.repositorytory -->
</parent>

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

<dependencies>

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

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

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

    <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>5.0.3.RELEASE</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>5.0.3.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.jsoup</groupId>
        <artifactId>jsoup</artifactId>
        <version>1.11.2</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/postgresql/postgresql -->
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>9.4-1206-jdbc42</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
</project>

应用:

@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {

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

我也尝试使用@SpringBootApplication,将(basePackages ={"app","app.config" etc}),只是app,控制器类...甚至将所有类移动到同一个包,但我现在确信这不是问题。

控制台日志以:

结尾
2018-01-27 00:08:08.291  INFO 14596 --- [           main] org.hibernate.tool.hbm2ddl.SchemaUpdate  : HHH000228: Running hbm2ddl schema update
2018-01-27 00:08:09.634  INFO 14596 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2018-01-27 00:08:10.584  INFO 14596 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2018-01-27 00:08:10.632  INFO 14596 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2018-01-27 00:08:10.637  INFO 14596 --- [           main] app.Application                          : Started Application in 38.878 seconds (JVM running for 39.335) 

所以它看起来应该可以工作......

环境类:

package org.springframework.core.env;

public interface Environment extends PropertyResolver {
String[] getActiveProfiles();

String[] getDefaultProfiles();

boolean acceptsProfiles(String... var1);
}

【问题讨论】:

  • 在开始回答您的问题之前,我强烈建议您先阅读一些 Spring 文档:spring.io/guides/gs/rest-service
  • @BenBen 是的,我之前已经阅读了所有内容,但我并没有真正看到我的应用程序中缺少什么...
  • 可以发一下Environment.java的课程内容吗?
  • @DoNhuVy 最后添加。不过,这不是我的课,是从春天开始的
  • 需要付出很多努力才能重现您的错误。您不要发布属性文件,不要发布带有导入的 Java 源代码,也不要使用数据库模式,不要仔细格式化源代码。你能把你的源代码发布到 GitHub 上,并给我一个链接吗?我会为你修好。

标签: java spring maven tomcat http-status-code-404


【解决方案1】:

当您使用 Spring boot 时,您应该记住它会为您管理大量员工。

您应该使用 Spring boot 依赖项,例如:

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

最好不要提供版本以便使用托管版本。

您的应用程序类应使用@SpringBootApplication 注释进行注释。

使控制器正常工作的项目的最小设置是:

spring-boot-starterspring-boot-starter-web 以及带注释的 Application 类。

然后您会在控制台中看到如下内容:

Mapped "{[/],methods=[GET]}" onto public java.lang.String com.example.demo.CharacterController.start()

如果这一切都不起作用,您应该创建一个新的 Spring boot 项目,可能使用 eclipse 的 STS 插件或从 here 下载一个包含您的依赖项的项目。

【讨论】:

  • 我对@9​​87654328@ 的依赖有一段时间了,它比现在更有效。我得到java.lang.NoClassDefFoundError: org/springframework/core/KotlinDetector 异常。在阅读了其他一些问题后,我用 tomcat 替换了它,它至少启动并创建了数据库方案。我确实使用start.spring.io 生成了这个项目,只添加了 Jpa 依赖项。
猜你喜欢
  • 1970-01-01
  • 2017-05-30
  • 1970-01-01
  • 2016-08-10
  • 2020-05-08
  • 2018-11-03
  • 2018-08-24
  • 2015-06-24
  • 1970-01-01
相关资源
最近更新 更多