私はJavaとSpringが初めてです。アプリのルートhttp://localhost:8080/
を静的なindex.html
にマッピングする方法を教えてください。 http://localhost:8080/index.html
に移動してもうまくいきます。
私のアプリの構造は以下のとおりです。
私の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");
を追加しようとしましたが失敗します。
@EnableWebMvc
アノテーションを使用していなければ、そのまま使用できます。これを行うと、Spring BootがWebMvcAutoConfiguration
で実行していることはすべて無効になります。そのアノテーションを削除することも、オフにしたView Controllerを追加することもできます。
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("forward:/index.html");
}
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");
}
};
}
}
springブートアプリの場合.
Spring Bootはpublic/static/webappフォルダ内のindex.htmlを自動的に検出します。 @Requestmapping("/")
というコントローラを書いた場合、それはデフォルトの機能を上書きし、index.html
と入力しない限りlocalhost:8080/index.html
は表示されません。
@Configuration
@EnableWebMvc
public class WebAppConfig extends WebMvcConfigurerAdapter {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addRedirectViewController("/", "index.html");
}
}
Spring Boot
内では、public
、webapps
、views
などのフォルダー内にWebページを常に配置し、src/main/resources
でもわかるように、application.properties
ディレクトリー内に配置します。
これは私の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
servername:15800
のようなURLを置くと、Spring Bootが受け取ったこのリクエストはサーブレットディスパッチャを占有し、index.html
を正確に検索します。この名前は、spring.mvc.view.suffix
として大文字小文字を区別します。
それが多くの人を助けることを願っています。
更新日:2019年1月
まずリソースの下にパブリックフォルダを作成し、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");
}
}
ソースコードは以下のようになります -
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);
}
}