私は、最も単純なビューリゾルバとhtmlを使用して、gradle、spring boot、spring mvcで「hello world」アプリケーションを作成しようとしています。
thymeleaf spring boot example から始め、純粋なhtmlとInternalResourceViewResolverを使用してより単純なmvcアプリケーションを作成するためにthymeleafを削除したかっただけです。 src/main/webapp/WEB-INFにある単一のgreeting.htmlを提供します。アプリを実行すると
No mapping found for HTTP request with URI [/WEB-INF/greeting.html] in DispatcherServlet with name 'dispatcherServlet'
これは一般的なエラーであり、ウェブ上には多くの回答がありますが、何も解決しないようです。
これが私のApplication.Javaです
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
これが私のGreetingController.Javaです
@Controller
public class GreetingController {
@RequestMapping("/greeting")
public String greeting() {
return "greeting";
}
}
これが私のMvcConfiguration.Javaです
@Configuration
@EnableWebMvc
public class MvcConfiguration extends WebMvcConfigurerAdapter{
@Bean
public ViewResolver getViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/");
resolver.setSuffix(".html");
return resolver;
}
}
gradle bootRun
で実行します
コードのレポは次のとおりです。 https://github.com/driver-pete/spring-mvc-example
さらにいくつかの手がかりがあります:
私の仮説は、ディスパッチャサーブレットが何らかの形で here などの代わりに/ *ではなく/ *で機能するように設定されることです。ただし、web.xmlがないため、これらのアドバイスはここでは当てはまりません。ディスパッチャサーブレットをプログラムで設定する方法の例はたくさんありますが、アプリを最小限に抑えたいと思います。thymeleafで正常に動作するため、スプリングブートは適切に設定されるはずです。
デフォルトのサーブレットのみを有効にする必要があります。これを行うには、MvcConfiguration
に次を追加します。
@Configuration
@EnableWebMvc
public class MvcConfiguration extends WebMvcConfigurerAdapter{
@Bean
public ViewResolver getViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/");
resolver.setSuffix(".html");
return resolver;
}
@Override
public void configureDefaultServletHandling(
DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
本質的に起こっているのは、Springはそのようなコンテンツの処理をネイティブに処理する方法を知らないことであり(jspの発言かもしれません)、この構成にそれをコンテナに委任するよう指示する方法です。
さらに調査した結果、configureDefaultServletHandlingメソッドを追加せずに機能する代替ソリューションを発見しました。 build.gradleに埋め込みTomcat jspエンジンを追加する必要があります。
compile("org.Apache.Tomcat.embed:Tomcat-embed-jasper")
ConfigureDefaultServletHandlingメソッドとは対照的に、このソリューションはプレーンなhtmlだけでなくjspでも機能します。
すべてのソリューションは次の場所から入手できます。 https://github.com/driver-pete/spring-mvc-example このソリューションはマスターで利用できます。 BijuのソリューションはDefaultServletHandling_solutionブランチにあります。
ビューリゾルバは、Spring-Boot Webアプリケーションのapplication.properties
ファイルでも設定できます。以下のようなものです。
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp