【问题标题】:Spring boot MVC template - tomcat7 giving 404 errorSpring Boot MVC模板-tomcat7给出404错误
【发布时间】:2015-02-03 15:07:44
【问题描述】:

如果我调用我的 tomcat 服务器的默认 url,我会看到错误 404。程序运行没有任何问题,但可能是 restcontroller 被禁用(我不知道,通常不会)。日志中没有错误。起始页是 html 格式。我设置了默认路径(见下文)。

我正在使用 Spring Boot 和 tomcat7。

请求的资源 (/dashboard/) 不可用。

Spring Boot 路径 src\main\resources\templates\index.html

战争中的Index.html路径: ..\tomcat7\webapps\dashboard\WEB-INF\classes\templates\index.html

主要

@Configuration
@EnableAutoConfiguration
@ComponentScan(basePackages = "com.###.dashboard")
@EnableJpaRepositories
@EntityScan(basePackages = "com.###.dashboard.domain")
public class Dashboard extends SpringBootServletInitializer  {

    public static void main(String[] args) {
        SpringApplication.run(new Object[] {Dashboard.class, DashboardController.class}, args);    
    }

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


}

RestController

@RestController
public class DashboardController {


    /**
     *...
     */
    @RequestMapping("/")
    public String setPage(Model model) {

        // ...

        return "index";
    }
}

pom

<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.###.dashboard</groupId>
  <artifactId>Dashboard</artifactId>
  <packaging>war</packaging>
  <version>1.0</version>
  <name>Dashboard</name>
  <url>http://maven.apache.org</url>

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

    <dependencies>

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

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

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


        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-commons</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-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>       

    </dependencies>

    <properties>
        <start-class>com.###.dashboard.main.Dashboard</start-class>
    </properties>

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


        </plugins>
    </build>

</project>

tomcat7 服务器

2014-12-05 13:31:46.836  INFO 28052 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/],methods=[],param
s=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.String com.###.dashboard.domain.DashboardController.setPage(org.springframework.ui.Model)

谢谢

【问题讨论】:

  • 向“/”发出请求时会发生什么?
  • / = 白页,/dashboard/ = 请求的资源 (/dashboard/) 不可用。
  • 也许不是问题,但听起来你只想要@Controller 而不是@RestController。 RestController 用于直接处理序列化数据,而不是通过 View 解析器
  • 我昨天试过@Controller,同样的问题
  • 我遇到了同样的问题。结果我忘了在 pom.xml 文件中添加 spring-boot-starter-thymeleaf 依赖项,但我可以看到你这样做了......你是否尝试过进入 pom.xml 文件并运行 mvn clean install package?下载的依赖可能与 pom 文件不同步。

标签: java spring maven spring-mvc tomcat


【解决方案1】:

尝试将模板放入src/main/resources/templates(这是spring boot的另一个默认路径)

它对我有用,资源/模板听起来比资源/资源更好:)

【讨论】:

  • 对不起,我使用资源/模板。我的错。问题依然存在。
  • 您对另一个答案的评论是:“主页在那里。“src\main\resources\templates”如果我在 eclise 中启动项目,我不会收到任何错误,他会找到该页面。”你确定你把war作为root到tomcat,导致另一个路径,例如如果你把它放到webapps/folder,将是localhost:8080/folder
  • 我确定,我把战争作为根
【解决方案2】:

尝试将您的控制器注释为@Controller 并将“/dashboard”默认请求映射到控制器,以便仪表板控制器可以响应以“/dashboard”开头的 uri 的请求

@Controller
@RequestMapping("/dashboard")
public class DashboardController

使用调试点查看请求是否已通过您的控制器管道,白页可能与空模板相关

【讨论】:

  • 我的tomcat部署战争。调试点在那里没有帮助,或者?我试过@Controller,同样的问题
  • 你试过用@RequestMapping("/dashboard")注释你的类
  • 是的,还是同样的问题。
  • RestController 的? setPage()方法中只有model.addAttribute()的调用。
【解决方案3】:

这意味着您的 spring 容器无法找到默认页面。只需将您的主页添加到 src 或对主页进行适当的重定向。出于测试目的,您可以在您放置主页的网络上使用完整的映射。

【讨论】:

【解决方案4】:

通过以下更改,它起作用了。

我注释掉了 spring-boot-starter-thymeleaf,因为它要求将一些模板放入 /templates 文件夹。 之后我将 @ResponseBody 添加到 RequestMapping 以返回字符串。

    @RequestMapping("/")
    public @ResponseBody String setPage(Model model) {
        return "index";
    }

所以也许你对spring-boot-starter-thymeleaf 有问题

注意:我在你的pom中使用spring-boot-maven-plugin插件和命令行mvn spring-boot:run启动了tomcat

【讨论】:

  • 谢谢,但还是不行。我为嵌入式 tomcat 创建了一场战争。它加载了类,但仍然存在 404 错误。
  • String 之前写入@ResponseBody 会使控制器输出单词“index”作为对浏览器请求的回答,而不是输出视图资源/模板/index.html 的内容。
【解决方案5】:

在没有 MAVEN 的情况下使用 Tomcat7 时出现很多错误,例如在 spring 中添加休眠验证器和休眠依赖项,请注意一件事会更新您的 Eclipse。并转移到 Tomcat 8,它使用 API-3.0 设置,因此每个休眠组件都可以使用它。甚至一些错误疑问也可以随意问我。

@navajavadevolper

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-18
    • 2018-06-26
    • 2016-11-27
    • 2022-08-10
    • 2015-01-03
    • 1970-01-01
    • 2018-08-31
    • 2015-01-30
    相关资源
    最近更新 更多