जावा स्प्रिंग बूट: index.html में मेरा ऐप रूट ("/") कैसे मैप करें?


133

मैं जावा और स्प्रिंग के लिए नया हूं। मैं अपने ऐप रूट http://localhost:8080/को स्थैतिक में कैसे मैप कर सकता हूं index.html? अगर मैं http://localhost:8080/index.htmlइसके काम करने के लिए नेविगेट ।

मेरी एप्लिकेशन संरचना है:

dirs

मेरा 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");लेकिन यह विफल रहा।


1
शायद यह मदद करता है: stackoverflow.com/questions/20405474/spring-boot-context-root
Udo Klimaschewski

3
@UdoKlimaschewski यह दिखाता है कि कैसे नक्शा करना है, http://localhost:8080/appNameलेकिन इसकी मुझे क्या जरूरत है ...
शोहम्म

1
WebMvcConfigurerAdapter को पदावनत किया गया है
16:13 पर user1346730

जवाबों:


150

यदि आपने @EnableWebMvcएनोटेशन का उपयोग नहीं किया होता तो यह बॉक्स से बाहर काम करता । जब आप ऐसा करते हैं कि आप उन सभी चीजों को बंद कर देते हैं जो स्प्रिंग बूट आपके लिए करता है WebMvcAutoConfiguration। आप उस एनोटेशन को हटा सकते हैं, या आप उस दृश्य नियंत्रक को वापस जोड़ सकते हैं जिसे आपने स्विच किया था:

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

1
धन्यवाद .. मुझे महसूस नहीं हुआ कि ... अपनी साइट में एक सरल डेमो नहीं दिखा सकता है जो दिखाता है कि ...
शोहम्म

12
से संदर्भ डॉक्स : "यदि आप वसंत बूट MVC सुविधाओं रखना चाहते हैं, और तुम सिर्फ अतिरिक्त MVC विन्यास (इंटरसेप्टर, formatters, दृश्य नियंत्रक आदि) को जोड़ने के लिए आप प्रकार के अपने खुद के @Bean जोड़ सकते हैं चाहते हैं WebMvcConfigurerAdapte, लेकिन बिना आर @EnableWebMvc"
डेव सीर

1
इस index.htmlपर काम करेंगे /। लेकिन क्या यह भी संभव है कि ब्राउज़र वास्तव में url को इससे बदल /दे /index.html?
15:15

12
ठीक है, मैंने पता लगा लिया। मामले में आप आगे के बजाय उपयोग करने के /लिए url को बदलना चाहते हैं। /index.html"redirect:/index.html"
asmaier

4
मैं @EnableWebMvc एनोटेशन का उपयोग नहीं कर रहा हूं, और मुझे index.html पर पुनर्निर्देशित नहीं किया गया है।
जेले

44

डेव सीर के जवाब का एक उदाहरण:

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
स्प्रिंग 5 में अपग्रेड किए गए WebMvcConfigurerAdapter के बजाय WebMvcConfigurer का उपयोग करें।
पर Moose

22

अगर यह एक स्प्रिंग बूट ऐप है।

स्प्रिंग बूट सार्वजनिक / स्थिर / वेबैप फ़ोल्डर में index.html का स्वचालित रूप से पता लगाता है। यदि आपने कोई कंट्रोलर लिखा है तो @Requestmapping("/")यह डिफॉल्ट फीचर को ओवरराइड कर देगा और यह index.htmlतब तक नहीं दिखेगा जब तक आप टाइप नहीं करतेlocalhost:8080/index.html


4
मैंने एक src / main / resource / public / index.html फ़ाइल बनाई और यह काम कर गया! धन्यवाद
जेम्स वाटकिंस

क्या यह अब भी सच है?
फियरएक्स


8

अपडेट: जनवरी-2019

पहले संसाधनों के तहत सार्वजनिक फ़ोल्डर बनाएँ और index.html फ़ाइल बनाएँ। WebMvcConfigurerAdapter के बजाय WebMvcConfigurer का उपयोग करें।

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

}

अगर यह काम नहीं करता है तो क्या गलत हो सकता है? संसाधन / सार्वजनिक / index.html मौजूद है; जावा १३; वसंत 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 मारो । उम्मीद है कि यह सभी की मदद करेगा।


मेरे मामले में, यह काम कर रहा था, लेकिन जब मैं टॉमकट से अंडरट्रॉ में बदल गया तो अचानक काम करना बंद कर दिया। अब मुझे अपने index.html के लिए आगे आने / जाने का रास्ता चाहिए
जर्मन फालनर

5

अंदर Spring Boot, मैं हमेशा उन वेब पृष्ठों को एक फ़ोल्डर के अंदर की तरह डाल publicया webappsया viewsऔर यह जगह के अंदर src/main/resourcesनिर्देशिका के रूप में आप में देख सकते हैं application.propertiesभी।

Spring_Boot-परियोजना-एक्सप्लोरर-देखें

और यह मेरा है 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और स्प्रिंग बूट के कब्जे वाले सर्वलेट डिस्पैचर द्वारा प्राप्त किया गया यह अनुरोध बिलकुल खोजा जाएगा index.htmlऔर यह नाम संवेदनशील के रूप में spring.mvc.view.suffixहोगा जो html, jsp, htm आदि होगा।

आशा है कि यह कई लोगों की मदद करेगा।


@ArifMustafa हाल के स्प्रिंट बूट संस्करणों में, मैं वेबपेजों को टेम्प्लेट के अंदर भी रखने की सलाह देता हूं।
अरिफमुस्तफा

क्या आपके पास इसके लिए संदर्भ हैं? मैं एक स्प्रिंग बैकएंड के साथ प्रतिक्रिया / रिडक्स फ्रंटेंड प्रोजेक्ट बनाने की कोशिश कर रहा हूं और इसमें शामिल सर्वोत्तम प्रथाओं के बारे में मुझे यकीन नहीं है।
माइक

2
  1. index.html फ़ाइल स्थान के नीचे आनी चाहिए - src / resource / public / index.html या src / resource / 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);
       }
    }

1

मुझे भी यही समस्या थी। स्प्रिंग बूट जानता है कि स्थिर HTML फाइलें कहाँ स्थित हैं।

  1. Index.html को रिसोर्स / स्टेटिक फोल्डर में जोड़ें
  2. फिर रूट पथ के लिए पूर्ण नियंत्रक विधि को हटाएं जैसे @RequestMapping ("/") आदि
  3. ऐप चलाएं और http: // localhost: 8080 (काम करें) देखें

0

आप एक RedirectViewController जैसे जोड़ सकते हैं:

@Configuration
public class WebConfiguration implements WebMvcConfigurer {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addRedirectViewController("/", "/index.html");
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.