Java Spring Boot: Uygulama kökümü ("/") index.html ile nasıl eşlerim?


134

Java'da ve Spring'de yeniyim. Uygulama kökümü http://localhost:8080/bir statik ile nasıl eşleyebilirim index.html? İşlerine gidersem http://localhost:8080/index.htmliyi olur.

Uygulama yapım:

dirs

Benim config\WebConfig.javaşuna benziyor:

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

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

Eklemeye çalıştım registry.addResourceHandler("/").addResourceLocations("/index.html");ama başarısız oldu.



3
Haritayı nasıl @UdoKlimaschewski Bu gösterileri http://localhost:8080/appNameama onun değil ne gerekmez ...
Shoham

1
WebMvcConfigurerAdapter kullanımdan kaldırıldı
user1346730

Yanıtlar:


150

@EnableWebMvcEk açıklama kullanmamış olsaydınız, kutunun dışında işe yarardı. Bunu yaptığınızda, Spring Boot'un sizin için içinde yaptığı her şeyi kapatırsınız WebMvcAutoConfiguration. Bu ek açıklamayı kaldırabilir veya kapattığınız görünüm denetleyicisini geri ekleyebilirsiniz:

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

1
Teşekkürler ..
Fark etmemiştim

12
Gönderen referans dokümanlar "Bahar Önyükleme MVC özellikleri tutmak istiyor ve sadece tip kendi @Bean ekleyebilir (vb interceptor biçemleyicileri, görünüm denetleyicileri) Ek MVC yapılandırması eklemek isterseniz: WebMvcConfigurerAdapteama olmadan r @EnableWebMvc"
Dave Syer

1
Bu görev yapacak index.htmlen /. Ancak tarayıcının url'yi 'den' /e değiştirmesi de mümkün müdür /index.html?
asmaier

13
Tamam anladım. Eğer aynı zamanda gelen url değiştirmek istediğiniz /için /index.htmlkullanılmak "redirect:/index.html" yerine ileriye.
asmaier

4
@EnableWebMvc ek açıklamasını kullanmıyorum ve index.html'ye yönlendirilmiyorum.
Jelle

44

Dave Syer'in cevabına bir örnek:

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
İlkbahar 5'te kullanımdan kaldırılan WebMvcConfigurerAdapter yerine WebMvcConfigurer kullanın.
Moose on the Loose

22

Spring boot App ise.

Spring Boot, public / static / webapp klasöründeki index.html dosyasını otomatik olarak algılar. Eğer herhangi bir denetleyici yazılı varsa @Requestmapping("/"), varsayılan özelliğini geçersiz kılar ve görünmemesi index.htmlYazdığınız sürecelocalhost:8080/index.html


4
Bir src / main / resources / public / index.html dosyası oluşturdum ve işe yaradı! Teşekkürler
James Watkins

Bu hala doğru mu?
FearX

10
@Configuration  
@EnableWebMvc  
public class WebAppConfig extends WebMvcConfigurerAdapter {  

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

}

8

Güncelleme: Ocak-2019

Önce kaynaklar altında ortak klasör oluşturun ve index.html dosyasını oluşturun. WebMvcConfigurerAdapter yerine WebMvcConfigurer kullanın.

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");
    }

}

bu işe yaramazsa ne yanlış olabilir? kaynaklar / genel / index.html var; java 13; yay 2.2.2; tomcat
JFFIGK

7

En sonuncuyu spring-boot 2.1.6.RELEASEbasit bir @RestControlleraçıklama ile kullanırsanız, hiçbir şey yapmanıza gerek yoktur, index.htmldosyanızı resources/staticklasörün altına eklemeniz yeterlidir :

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

Ardından http: // localhost: 8080 URL'sini tıklayın . Herkese yardımcı olacağını umuyorum.


benim durumumda çalışıyordu ama tomcat'ten Undertow'a geçtiğimde aniden çalışmayı bıraktım. şimdi index.html'ime / iletmek için bir yola ihtiyacım var
Almanca Faller

5

İçine Spring Boot, web sayfalarını her zaman publicor webappsveya gibi bir klasöre koyuyorum ve sizin de görebileceğiniz gibi dizinin viewsiçine yerleştiriyorum .src/main/resourcesapplication.properties

Spring_Boot-Proje-Explorer-View

ve bu benim 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'yi beğenir koymaz servername:15800ve Spring Boot işgal edilmiş Servlet göndericisi tarafından alınan bu istek tam olarak aranacaktır index.htmlve bu ad spring.mvc.view.suffixhtml, jsp, htm gibi büyük / küçük harf duyarlı olacaktır.

Umarım herkese yardımcı olur.


@ArifMustafa Son Sprint Önyükleme sürümlerinde, web sayfalarını şablonların içine de koymanızı tavsiye ederim.
ArifMustafa

Bunun için referanslarınız var mı? Spring backend ile bir react / redux ön uç projesi oluşturmaya çalışıyorum ve dahil olan en iyi uygulamalardan emin değilim.
mike

2
  1. index.html dosyası aşağıdaki konumun altına gelmelidir - src / resources / public / index.html VEYA src / resources / static / index.html, eğer her iki konum da tanımlıysa, o zaman hangisi o dizinden index.html'yi çağıracaktır.
  2. Kaynak kodu şöyle görünüyor -

    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);
       }
    }

1

Ben de aynı sorunu yaşadım. Spring boot, statik html dosyalarının nerede olduğunu bilir.

  1. İndex.html'yi kaynaklar / statik klasörüne ekleyin
  2. Ardından, @RequestMapping ("/") vb. Gibi kök yolu için tam denetleyici yöntemini silin
  3. Uygulamayı çalıştırın ve http: // localhost: 8080'i kontrol edin (Çalışmalı)

0

RedirectViewController'ı aşağıdaki gibi ekleyebilirsiniz:

@Configuration
public class WebConfiguration implements WebMvcConfigurer {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addRedirectViewController("/", "/index.html");
    }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.