Spring启动MVC模板 - tomcat7给出404错误

时间:2014-12-05 12:34:33

标签: java spring maven spring-mvc tomcat

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

我使用的是Spring Boot和tomcat7。

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

Spring引导路径 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)

谢谢

5 个答案:

答案 0 :(得分:0)

尝试将模板放入src/main/resources/templates(它是弹簧启动的另一个默认路径)

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

答案 1 :(得分:0)

尝试将控制器注释为@Controller并将'/ dashboard'默认请求映射到控制器,以便仪表板控制器可以用uri作为'/ dashboard'来回答请求

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

使用调试点来查看请求是否已经落入控制器管道,白页可能与空模板有关

答案 2 :(得分:0)

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

答案 3 :(得分:0)

如果有以下变化,那就有效了。

我评论了spring-boot-starter-thymeleaf,因为它要求将一些模板放到/ templates文件夹中。 之后我将@ResponseBody添加到RequestMapping以返回String。

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

所以也许你对spring-boot-starter-thymeleaf

有疑问

注意:我使用命令行spring-boot-maven-plugin

在您的pom中使用mvn spring-boot:run插件启动了tomcat

答案 4 :(得分:-2)

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

@navajavadevolper