Java Spring Boot:如何将我的应用程序根目录(“ /”)映射到index.html?


133

我是Java和Spring的新手。如何将我的应用程序根目录映射http://localhost:8080/到静态目录index.html?如果我导航到http://localhost:8080/index.html它的作品很好。

我的应用程序结构为:

rs

我的config\WebConfig.java样子是这样的:

@Configuration
@EnableWebMvc
@ComponentScan
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**").addResourceLocations("/");
        }
}

我尝试添加,registry.addResourceHandler("/").addResourceLocations("/index.html");但是失败。



3
@UdoKlimaschewski它显示了如何进行地图绘制,http://localhost:8080/appName但不是我所需要的...
Shoham 2014年

1
不建议使用
WebMvcConfigurerAdapter

Answers:


150

如果您不使用@EnableWebMvc注释,它将开箱即用。当您这样做时,您将关闭Spring Boot在其中为您执行的所有操作WebMvcAutoConfiguration。您可以删除该注释,也可以重新添加已关闭的视图控制器:

@Override
public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/").setViewName("forward:/index.html");
}

1
谢谢..我没有意识到...在他们的网站上找不到一个简单的演示来显示...
Shoham 2014年

12
参考文档:“如果你想保持弹簧引导MVC功能,而你只是想添加额外的MVC配置(拦截器,格式化,视图控制器等),你可以添加自己@Bean型WebMvcConfigurerAdapteR,但没有@EnableWebMvc
Dave Syer 2014年

1
该服务将index.html/。但是是否也可以使浏览器将URL从实际更改//index.html
2015年

12
好吧,我知道了。如果您还想将URL从/改为/index.html使用,"redirect:/index.html" 而不是转发。
asmaier

4
我没有使用@EnableWebMvc批注,也没有重定向到index.html。
Jelle

44

Dave Syer的答案的示例:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration
public class MyWebMvcConfig {

    @Bean
    public WebMvcConfigurerAdapter forwardToIndex() {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addViewControllers(ViewControllerRegistry registry) {
                // forward requests to /admin and /user to their index.html
                registry.addViewController("/admin").setViewName(
                        "forward:/admin/index.html");
                registry.addViewController("/user").setViewName(
                        "forward:/user/index.html");
            }
        };
    }

}

8
使用WebMvcConfigurer代替已过时WebMvcConfigurerAdapter在弹簧5
穆斯就散了

22

如果是Spring Boot应用程序。

Spring Boot自动检测public / static / webapp文件夹中的index.html。如果您编写了任何控制器@Requestmapping("/"),它将覆盖默认功能,index.html除非您键入,否则不会显示localhost:8080/index.html


4
我创建了一个src / main / resources / public / index.html文件,它起作用了!谢谢
James Watkins

还是这样吗?
FearX

10
@Configuration  
@EnableWebMvc  
public class WebAppConfig extends WebMvcConfigurerAdapter {  

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addRedirectViewController("/", "index.html");
    }

}

8

更新:2019年1月

首先在资源下创建公用文件夹,然后创建index.html文件。使用WebMvcConfigurer而不是WebMvcConfigurerAdapter。

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebAppConfig implements WebMvcConfigurer {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("forward:/index.html");
    }

}

如果这不起作用怎么办?resources / public / index.html存在;Java 13; 春天2.2.2; Tomcat
JFFIGK

7

如果您使用spring-boot 2.1.6.RELEASE带有最新@RestController注释的最新版本,则无需执行任何操作,只需将index.html文件添加到以下resources/static文件夹中:

project
  ├── src
      ├── main
          └── resources
              └── static
                  └── index.html

然后点击URL http:// localhost:8080。希望对大家有帮助。


就我而言,它正在工作,但是当我从tomcat更改为Undertow时突然停止工作。现在,我需要一种方法来转发/到我的index.html
德国法

5

在内部Spring Boot,我总是将网页放在publicwebapps或文件夹中views,并将其放置在src/main/resources目录中,如您所见application.properties

Spring_Boot-Project-Explorer-View

这是我的application.properties

server.port=15800
spring.mvc.view.prefix=/public/
spring.mvc.view.suffix=.html
spring.datasource.url=jdbc:mysql://localhost:3306/hibernatedb
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.hibernate.ddl-auto = update
spring.jpa.properties.hibernate.format_sql = true

logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

只要您将url放置为这样servername:15800,Spring Boot占用的Servlet调度程序就会收到此请求,它将精确搜索,index.html并且此名称将区分大小写,因为spring.mvc.view.suffixhtml,jsp,htm等。

希望对大家有帮助。


@ArifMustafa在最新的Sprint Boot版本中,我建议也将网页放在模板中。
ArifMustafa

你有参考吗?我正在尝试使用Spring后端创建react / redux前端项目,但不确定所涉及的最佳实践。
mike

2
  1. index.html文件应位于以下位置-src / resources / public / index.html或src / resources / static / index.html(如果两个位置均已定义,则首先出现index.html)将从该目录中调用。
  2. 源代码看起来像-

    package com.bluestone.pms.app.boot; 
    import org.springframework.boot.Banner;
    import org.springframework.boot.Banner;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.builder.SpringApplicationBuilder;
    import org.springframework.boot.web.support.SpringBootServletInitializer;
    import org.springframework.context.annotation.ComponentScan;
    
    
    
    @SpringBootApplication 
    @EnableAutoConfiguration
    @ComponentScan(basePackages = {"com.your.pkg"}) 
    public class BootApplication extends SpringBootServletInitializer {
    
    
    
    /**
     * @param args Arguments
    */
    public static void main(String[] args) {
    SpringApplication application = new SpringApplication(BootApplication.class);
    /* Setting Boot banner off default value is true */
    application.setBannerMode(Banner.Mode.OFF);
    application.run(args);
    }
    
    /**
      * @param builder a builder for the application context
      * @return the application builder
      * @see SpringApplicationBuilder
     */
     @Override
     protected SpringApplicationBuilder configure(SpringApplicationBuilder 
      builder) {
        return super.configure(builder);
       }
    }


0

您可以添加一个RedirectViewController,例如:

@Configuration
public class WebConfiguration implements WebMvcConfigurer {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addRedirectViewController("/", "/index.html");
    }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.