Jestem nowy w Javie i Springie. Jak mogę zmapować katalog główny aplikacji http://localhost:8080/
na statyczny index.html
? Jeśli przejdę do http://localhost:8080/index.html
jego pracy, dobrze.
Struktura mojej aplikacji to:
Mój config\WebConfig.java
wygląd wygląda tak:
@Configuration
@EnableWebMvc
@ComponentScan
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("/");
}
}
Próbowałem dodać, registry.addResourceHandler("/").addResourceLocations("/index.html");
ale to się nie udaje.
java
spring
spring-boot
Shoham
źródło
źródło
http://localhost:8080/appName
ale to nie jest to, czego potrzebuję ...Odpowiedzi:
To by zadziałało po wyjęciu z pudełka, gdybyś nie użył
@EnableWebMvc
adnotacji. Kiedy to robisz, wyłączasz wszystkie rzeczy, które robi dla Ciebie Spring BootWebMvcAutoConfiguration
. Możesz usunąć tę adnotację lub z powrotem dodać kontroler widoku, który wyłączyłeś:@Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/").setViewName("forward:/index.html"); }
źródło
WebMvcConfigurerAdapte
r, ale bez@EnableWebMvc
”index.html
w/
. Ale czy jest możliwe, aby przeglądarka faktycznie zmieniła adres URL z/
na/index.html
?/
do/index.html
używania"redirect:/index.html"
zamiast do przodu.Przykład odpowiedzi Dave'a Syera:
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"); } }; } }
źródło
jeśli jest to aplikacja Spring Boot.
Spring Boot automatycznie wykrywa plik index.html w folderze public / static / webapp. Jeśli napisałeś jakiś kontroler
@Requestmapping("/")
, zastąpi on domyślną funkcję i nie pokaże,index.html
chyba że wpiszeszlocalhost:8080/index.html
źródło
Aktualizacja: styczeń-2019
Najpierw utwórz folder publiczny w zasobach i utwórz plik index.html. Użyj WebMvcConfigurer zamiast 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"); } }
źródło
@Configuration @EnableWebMvc public class WebAppConfig extends WebMvcConfigurerAdapter { @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addRedirectViewController("/", "index.html"); } }
źródło
Jeśli korzystasz z najnowszej
spring-boot 2.1.6.RELEASE
z prostą@RestController
adnotacją, nie musisz nic robić, po prostu dodajindex.html
plik doresources/static
folderu:project ├── src ├── main └── resources └── static └── index.html
Następnie kliknij adres URL http: // localhost: 8080 . Mam nadzieję, że pomoże wszystkim.
źródło
Wewnątrz
Spring Boot
zawsze umieszczam strony internetowe w folderze takim jakpublic
lubwebapps
lubviews
i umieszczam je wsrc/main/resources
katalogu, jak widaćapplication.properties
również.a to jest moje
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
jak tylko umieścisz adres URL like
servername:15800
i to żądanie otrzymane przez Spring Boot zajęte przez dyspozytor serwletów, dokładnie przeszukaindex.html
i ta nazwa będzie rozróżniana wielkość liter, jakospring.mvc.view.suffix
html, jsp, htm itp.Mam nadzieję, że pomogłoby to wielu osobom.
źródło
Kod źródłowy wygląda następująco -
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); } }
źródło
Miałem ten sam problem. Spring boot wie, gdzie znajdują się statyczne pliki html.
źródło
Możesz dodać RedirectViewController, na przykład:
@Configuration public class WebConfiguration implements WebMvcConfigurer { @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addRedirectViewController("/", "/index.html"); } }
źródło