starter - Java Spring Boot: ¿Cómo asignar la raíz de mi aplicación("/") a index.html?
spring boot wikipedia (9)
- El archivo index.html debe aparecer debajo de la ubicación: src / resources / public / index.html O src / resources / static / index.html si ambas ubicaciones están definidas, entonces, qué primero ocurrirá index.html llamará desde ese directorio.
-
El código fuente se ve así:
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"); } }
Soy nuevo en Java y Spring.
¿Cómo puedo asignar la raíz de mi aplicación
http://localhost:8080/
a un static
index.html
?
Si navego a
http://localhost:8080/index.html
funciona bien.
La estructura de mi aplicación es:
Mi
config/WebConfig.java
ve así:
@Configuration
@EnableWebMvc
@ComponentScan
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("/");
}
}
Traté de agregar
registry.addResourceHandler("/").addResourceLocations("/index.html");
Pero falla.
Actualización: enero-2019
Primero cree una carpeta pública en recursos y cree el archivo index.html. Utilice WebMvcConfigurer en lugar de WebMvcConfigurerAdapter.
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
Dentro de
Spring Boot
, siempre pongo las páginas web dentro de una carpeta como
public
o
webapps
o
views
y la
webapps
dentro del directorio
src/main/resources
como se puede ver en
application.properties
también.
y esta es mi
application.properties
:
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);
}
}
tan pronto como
servername:15800
la URL como
servername:15800
y esta solicitud recibida por Spring Boot ocupó el despachador de Servlet, buscará exactamente
index.html
y este nombre será sensible a mayúsculas y minúsculas como
spring.mvc.view.suffix
que sería html, jsp , htm etc.
Espero que ayude a muchos.
Hubiera funcionado de
@EnableWebMvc
si no hubiera utilizado la anotación
@EnableWebMvc
.
Cuando hace eso, apaga todas las cosas que Spring Boot hace por usted en
WebMvcAutoConfiguration
.
Puede eliminar esa anotación, o puede volver a agregar el controlador de vista que apagó:
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("forward:/index.html");
}
Si usa el último
spring-boot 2.1.6.RELEASE
con una simple anotación
@RestController
entonces no necesita hacer nada, simplemente agregue su archivo
index.html
en la carpeta
resources/static
:
project ├── src ├── main └── resources └── static └── index.html
Luego presione la URL http: // localhost: 8080 . Espero que ayude a todos.
Un ejemplo de la respuesta 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");
}
};
}
}
Yo tuve el mismo problema. Spring boot sabe dónde se encuentran los archivos html estáticos.
- Agregue index.html en la carpeta resources / static
- Luego elimine el método de controlador completo para la ruta raíz como @RequestMapping ("/"), etc.
- Ejecute la aplicación y verifique http: // localhost: 8080 (debería funcionar)
si se trata de una aplicación Spring boot.
Spring Boot detecta automáticamente index.html en la carpeta public / static / webapp.
Si ha escrito algún controlador
@Requestmapping("/")
, anulará la función predeterminada y no mostrará el
index.html
menos que escriba
localhost:8080/index.html
@Configuration
@EnableWebMvc
public class WebAppConfig extends WebMvcConfigurerAdapter {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addRedirectViewController("/", "index.html");
}
}