私は、Spring Bootを使用して、構成の重いVanilla Spring MVCプロジェクトを書き直そうとしています。私は、Spring Boot Initiaizerを使用してIntelliJで新しいSpring Bootプロジェクトを開始し、Javaベースの最小限の構成のルートを進めています。多くのチュートリアルでは、生成されたデフォルトのメインクラスで十分であり、@SpringBootApplication
にはすべてが含まれています。サンプルを取得しましたRESTコントローラーが動作し、シリアル化されたオブジェクトをJSONとして返しますが、表示するビューを取得するのは難しいことがわかっています。私の構造は次のとおりです。作成したディレクトリ。
src
`-main
`-Java
`-resources
`-static
`-templates
`-webapp
`-WEB-INF
`-home.jsp
コントローラーは単純です。
@Controller
public class ViewMaster {
@RequestMapping("/home")
public String home() {
return "home";
}
}
構成なしで、Spring Bootがビューの保存場所と拡張機能(html?)を期待する場所を知りたいです。また、application.properties
それでも404エラーが表示されます。リソース内でWEB-INFディレクトリまたはhtmlファイルだけを移動しても、役に立ちませんでした。
spring.mvc.view.prefix=/WEB-INF/
spring.mvc.view.suffix=.jsp
また、これらの依存関係をpom.xmlに効果なしで含めようとしました。
<dependency>
<groupId>org.Apache.Tomcat.embed</groupId>
<artifactId>Tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
私はここで痛いほど明らかな何かを見逃しているに違いないので、誰かがそれを指摘できるかどうか感謝します!
ソリューション
試行錯誤で答えを見つけましたが、かなり面倒でした。この結論が間違っている場合、誰かが私を修正できることを願っていますが、Spring Bootは文字列WEB-INF
が好きではないようです。 WEB-INF
ディレクトリの名前をview
に変更し、application.properties
を次のように変更すると、ビューが正常にロードされました。
spring.mvc.view.prefix=/view/
spring.mvc.view.suffix=.jsp
追加の調査結果
この演習の目的は、Javaベースの構成であるminimalの実用例を作成することでした。そのため、セットアップを最小限に抑えました。その後、複数のSOスレッドとフォーラムには多くのアドバイスが与えられていることがわかりました。 選択した埋め込みコンテナに依存する制限があるため、JSPは単にSpring Bootでうまく動作しません。それを念頭に置いて、JSPをThymeLeafテンプレートに置き換えることを決めました。
私の新しい作業構成は、これらの必要性を取り除きます:
application.properties
を追加する必要はありません:spring.mvc.view.prefix
+ spring.mvc.view.suffix
org.springframework.boot / spring-boot-starter-Tomcat
org.springframework.boot / Tomcat-embed-jasper
javax.servlet / jstl
したがって、デフォルトのSpring Bootテンプレートと、ViewName.html
という名前のビューがsrc/main/resources/templates
に配置された2つのThymeLeaf依存関係のみです。
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring4</artifactId>
</dependency>
Spring Bootがビューを/ webapp内に格納することを想定していない場合、ビューページは.jspをビューページとして/ views /フォルダーに設定するapplication.properties設定(htmlまたはjspなど)に依存する任意の形式である場合があります
spring.mvc.view.prefix=/views/
spring.mvc.view.suffix=.jsp //for .html change it to .html
tomcat jaspherを使用する必要があります。これを含めない場合、ページは解析されず、ファイルとしてダウンロードされます
spring.mvc.view.prefix=/views/
spring.mvc.view.suffix=.jsp
最初に考えるのは、依存関係を以下のようにpour pomに挿入することです
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-Tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.Apache.Tomcat.embed</groupId>
<artifactId>Tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
この依存関係では、埋め込みのTomcat依存関係が提供されると、スプリングブートで言います。これは、jarアプリ内でSpringアプリケーションにTomcat依存関係がないという効果があります。
2番目は、あなたがしていると思う、あなたのポンのpakagingプロパティをjarから以下のような戦争に変更することです
<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
...
<packaging>war</packaging>
....
</project>
3番目と最後は、以下のように標準のアプリケーションブートスターターをリファクタリングすることです。
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
アプリケーションプロパティの設定は問題ないかもしれませんが、jspを特定のフォルダーに配置し、WEB-INFだけでなく新しいパスを指すように設定をリファクタリングすることをお勧めしますが、これは単なるアドバイスです。
これがあなたのお役に立てば幸いです。
tys、plsは依存関係を追加しようとします:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-Tomcat</artifactId>
<scope>provided</scope>
</dependency>
リファレンス: https://github.com/lenicliu/examples/tree/master/examples-spring-boot/examples-spring-boot-jsp
spring.mvc.view.prefix
はwebappフォルダーの相対パスで、uにはjspファイルを入れることができます。
application.properties
削除:
spring.mvc.view.prefix=/view/
spring.mvc.view.suffix=.jsp
追加:
spring.thymeleaf.prefix= /WEB-INF/views/
spring.thymeleaf.suffix= .html
pom.xml
ジャスパーの依存関係を削除します。
<dependency>
<groupId>org.Apache.Tomcat.embed</groupId>
<artifactId>Tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
Thymeleaf依存関係を追加します。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>