Ich bin neu in Java und Spring. Wie kann ich mein App-Stammverzeichnis http://localhost:8080/
einem statischen index.html
zuordnen? Wenn ich zu http://localhost:8080/index.html
navigiere, funktioniert es gut.
Meine App-Struktur ist:
Mein config\WebConfig.Java
sieht so aus:
@Configuration
@EnableWebMvc
@ComponentScan
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("/");
}
}
Ich habe versucht, registry.addResourceHandler("/").addResourceLocations("/index.html");
hinzuzufügen, aber es schlägt fehl.
Wenn Sie die @EnableWebMvc
-Annotation nicht verwendet hätten, hätte es sich von Anfang an bewährt. Wenn Sie dies tun, schalten Sie alle Dinge aus, die Spring Boot in WebMvcAutoConfiguration
für Sie erledigt. Sie können diese Anmerkung entfernen oder den von Ihnen deaktivierten View-Controller wieder hinzufügen:
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("forward:/index.html");
}
Ein Beispiel für die Antwort von 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");
}
};
}
}
wenn es sich um eine Spring Boot App handelt.
Spring Boot erkennt index.html automatisch im Ordner public/static/webapp. Wenn Sie einen Controller @Requestmapping("/")
geschrieben haben, überschreibt er die Standardfunktion und zeigt den index.html
nur an, wenn Sie localhost:8080/index.html
eingeben.
@Configuration
@EnableWebMvc
public class WebAppConfig extends WebMvcConfigurerAdapter {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addRedirectViewController("/", "index.html");
}
}
In Spring Boot
stelle ich die Webseiten immer in einem Ordner wie public
oder webapps
oder views
ab und platziere sie im src/main/resources
-Verzeichnis, wie Sie auch in application.properties
sehen können.
und das ist mein 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
sobald Sie die URL wie servername:15800
eingeben und diese von Spring Boot besetzte Servlet-Dispatcher-Anforderung erhalten hat, wird genau nach index.html
gesucht, und dieser Name wird im Fall sensibel wie spring.mvc.view.suffix
, dh html, jsp, htm usw.
Hoffe, es würde vielen helfen.
Der Quellcode sieht aus wie -
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);
}
}
Update: Januar-2019
Erstellen Sie zuerst den öffentlichen Ordner unter den Ressourcen und erstellen Sie die index.html-Datei . Verwenden Sie den WebMvcConfigurer anstelle des 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");
}
}