複数のソースからのデータがいくつかのデータ構造に処理されるプロジェクトがあります。プログラムがこれらの構造の構築を完了したら、ユーザーがこれらの構造を手動で微調整できるサーバーをセットアップする必要があります。私は、Spring Boot を使用してセットアップされた組み込み Tomcat サーバー上の Spring MVC がまさに必要なものであると判断しました。
ビューテクノロジーとしてThymeleafを使用したいので、そうしました
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Main {
public static void main(String... args) throws Exception {
// Lots of initialization ...
SpringApplication.run(Main.class, args);
}
@Bean
public ServletContextTemplateResolver templateResolver() {
ServletContextTemplateResolver resolver = new ServletContextTemplateResolver();
resolver.setPrefix("/resources/views/");
resolver.setSuffix(".html");
resolver.setTemplateMode("HTML5");
resolver.setCacheable(false);
return resolver;
}
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine engine = new SpringTemplateEngine();
engine.setTemplateResolver(templateResolver());
return engine;
}
@Bean
public ViewResolver viewResolver() {
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setTemplateEngine(templateEngine());
viewResolver.setOrder(1);
viewResolver.setViewNames(new String[]{"*"});
viewResolver.setCache(false);
return viewResolver;
}
}
と
@Controller
public class WebController {
@RequestMapping(value="/greeting", method=RequestMethod.GET)
public String greeting() {
return "greeting";
}
}
しかし、 にビュー ファイルがあっても/resources/views/greeting.html
、サーバーの URL への応答http://localhost:8080/greeting
は
org.thymeleaf.exceptions.TemplateInputException: Error resolving template "greeting", template might not exist or might not be accessible by any of the configured Template Resolvers
デバッガーでコードをステップ実行すると、ある時点でServletContext
、ビュー ファイルをストリームとして返すはずの が、次のような一時フォルダーを参照しているように見えます。
C:\Users\Michael\AppData\Local\Temp\tomcat-docbase.971027024999448548.8080
空です。
今、私はどちらかをする必要があることを理解しています
サーバーの起動時にリソースを一時フォルダーにデプロイする
リソースがすでに存在するディレクトリでサーバーを動作させる
私の問題は、どちらを行うか、またはどのアプローチが最適かがわからないことです。1がより良い知恵であると何かが私に言っていますが、どんな提案も大歓迎です。
編集
わかりました、私はうまくいくように見えるものになりました。ジョーの答えは確かに私が道を進むのに役立ちましたが、私を困惑させる方法でMavenの構成を変更しなければならなかったようです.
テンプレートを入れてビルドパスgreeting.html
に/resources/templates/greeting.html
追加resources
した後、エラーが発生しました
javax.servlet.ServletException: Circular view path [greeting]: would dispatch back to the current handler URL [/word/greeting] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)
つまり、Thymeleaf が適切に構成されていないように見えました。いくつかいじった後、 in のバージョンを から に変更することにspring-boot-starter-parent
なりpom.xml
まし0.5.0.BUILD-SNAPSHOT
た0.5.0.M6
。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<!--<version>0.5.0.BUILD-SNAPSHOT</version>-->
<version>0.5.0.M6</version>
</parent>
Thymeleaf依存関係からバージョンタグを削除します
<dependencies>
<!-- ... -->
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring3</artifactId>
<!--<version>${thymeleaf-spring3-version}</version>-->
</dependency>
</dependencies>
この後、うまくいきました。
spring-boot-starter-parent
からバージョン タグを削除できるようにのバージョンを変更する必要があったthymeleaf-spring3
理由と、それが必要だった理由を説明してください。