Je suis nouveau dans Java et dans Spring . Comment mapper mon http://localhost:8080/
racine de l’application sur un index.html
statique __? Si je navigue vers http://localhost:8080/index.html
, cela fonctionne correctement.
Ma structure d'application est:
Mon config\WebConfig.Java
ressemble à ceci:
@Configuration
@EnableWebMvc
@ComponentScan
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("/");
}
}
J'ai essayé d'ajouter registry.addResourceHandler("/").addResourceLocations("/index.html");
mais cela a échoué.
Cela aurait fonctionné immédiatement si vous n'aviez pas utilisé l'annotation @EnableWebMvc
. Lorsque vous faites cela, vous désactivez tout ce que Spring Boot fait pour vous dans WebMvcAutoConfiguration
. Vous pouvez supprimer cette annotation ou rajouter le contrôleur de vue que vous avez désactivé:
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("forward:/index.html");
}
Un exemple de réponse de 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");
}
};
}
}
si c'est une application de démarrage de printemps.
Spring Boot détecte automatiquement index.html dans le dossier public/statique/webapp. Si vous avez écrit un contrôleur @Requestmapping("/")
, il remplacera la fonctionnalité par défaut et le index.html
ne s'affichera pas sauf si vous tapez localhost:8080/index.html
@Configuration
@EnableWebMvc
public class WebAppConfig extends WebMvcConfigurerAdapter {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addRedirectViewController("/", "index.html");
}
}
Dans Spring Boot
, je place toujours les pages Web dans un dossier tel que public
ou webapps
ou views
et le place dans le répertoire src/main/resources
comme vous pouvez le voir dans application.properties
également.
et voici mon 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
dès que vous mettez l'URL comme servername:15800
et cette requête reçue par le répartiteur Servlet occupé avec Spring Boot, il recherchera exactement le index.html
et ce nom sera en cas de nature sensible comme le spring.mvc.view.suffix
qui serait html, jsp, htm etc.
J'espère que cela aiderait beaucoup de monde.
Le code source ressemble à -
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);
}
}
Mise à jour: janvier 2019
Commencez par créer un dossier public sous ressources et créez le fichier index.html . Utilisez WebMvcConfigurer au lieu de 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");
}
}