Spring Bootサービスにjspページを追加しようとしています。私の問題は、そのページにアクセスしようとするたびに、これがあることです:
ホワイトラベルエラーページ
このアプリケーションには/ errorの明示的なマッピングがないため、これをフォールバックと見なしています。
Tue Apr 21 23:16:00 EEST 2015予期しないエラーが発生しました(type = Not Found、status = 404)。利用可能なメッセージはありません
Application.propertiesにプレフィックスとサフィックスを追加しました:
spring.view.prefix: /WEB-INF/jsp/
spring.view.suffix: .jsp
これは私のコントローラークラスです。
@Controller
public class MarkerController {
@RequestMapping(value="/map")
public String trafficSpy() {
return "index";
}
}
私のアプリケーションクラス:
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
private static Logger logger = Logger.getLogger(Application.class.getName());
public static void main(String[] args) {
logger.info("SPRING VERSION: " + SpringVersion.getVersion());
SpringApplication.run(Application.class, args);
}
}
そして、index.jsp:
<!DOCTYPE html>
<%@ taglib prefix="c" uri="http://Java.Sun.com/jsp/jstl/core"%>
<html lang="en">
<body>
<h1>Hello, World!!!</h1>
<p>JSTL URL: ${url}</p>
</body>
</html>
そして、これはsrcファイル構造です:
├── src
│ ├── main
│ │ ├── Java
│ │ │ └── com
│ │ │ └── example
│ │ │ └── internetprogramming
│ │ │ └── myserver
│ │ │ └── server
│ │ │ ├── Application.Java
│ │ │ ├── config
│ │ │ │ └── DatabaseConfig.Java
│ │ │ ├── controller
│ │ │ │ └── MarkerController.Java
│ │ │ ├── dao
│ │ │ │ ├── MarkerDaoImplementation.Java
│ │ │ │ └── MarkerDaoInterface.Java
│ │ │ ├── Marker.Java
│ │ │ └── service
│ │ │ ├── MarkerServiceImplementation.Java
│ │ │ └── MarkerServiceInterface.Java
│ │ ├── resources
│ │ │ └── application.properties
│ │ └── webapp
│ │ └── WEB-INF
│ │ └── jsp
│ │ └── index.jsp
依存関係のリストにjasperとjstlがあることを確認してください。
<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>
作業開始プロジェクト- https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-web-jsp
Springの新しいバージョンでは、application.propertiesファイルに次を追加する必要があります。
spring.mvc.view.prefix =/WEB-INF/jsp /
spring.mvc.view.suffix = .jsp
また、JSPファイルはsrc/main/resources/META-INF/resources/WEB-INF/jspに配置する必要があります
私の問題は、コントローラークラスのアノテーションとして@Controllerではなく@RestControllerを使用していたことです。これが誰かを助けることを願っています。
上記の答えに加えて、アプリケーションをwarの代わりにjarとしてデプロイする必要があります
<groupId>com.igt</groupId>
<artifactId>customer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
走る
Java -jar customer-0.0.1-SNAPSHOT.war
また、アプリケーションをwarまたは実行可能アプリケーションとして起動する場合は、SpringBootServletInitializerコールバックとmainメソッドの両方で使用可能なメソッドでビルダーのカスタマイズを共有する必要があります。
package com.igt.customer;
import Java.util.Arrays;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class CustomerApplication extends org.springframework.boot.web.support.SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(CustomerApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(CustomerApplication.class, args);
}
@Bean
public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
return args -> {
System.out.println("Let's inspect the beans provided by Spring Boot:");
String[] beanNames = ctx.getBeanDefinitionNames();
Arrays.sort(beanNames);
for (String beanName : beanNames) {
System.out.println(beanName);
}
};
}
}
見てください
私の問題はSpring vesrion:1.4.3以降のバージョンでは埋め込みJSPのサポートが停止していることがわかりました。だから私は1.4.1にバージョンを変更し、それは私のために働いた。
他のものが離陸する:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
それでは動作しません。
これをpom.xmlに含めるには
<!-- JSP -->
<dependency>
<groupId>org.Apache.Tomcat.embed</groupId>
<artifactId>Tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<!-- jstl for jsp -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
十分ではないかもしれません。
これを見逃してはいけません。
<packaging>war</packaging>
それ以外の場合、パッケージをビルドすると、jarファイルとして取得され、JSPも埋め込みTomcatもありません。
ここで実行可能な例とその説明を参照してください https://www.surasint.com/spring-boot-jsp/
IDEA開発ツールを使用している場合は、指定してみてください
Configurations -> Configuration -> environment -> Working directory
$MODULE_DIR$
の値
これは、ホワイトラベルエラーページについての私のための作業ソリューションです:ビューページ(jsp)が見つかりません
POM.xmlで、パッケージが「war」であることを確認し、Tomcat/jasperの依存関係を追加します
<packaging>war</packaging>
<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>
Application.propertiesでプレフィックス/サフィックスを追加します
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
** Intellijを使用する場合は、Webリソースディレクトリを設定する必要があります。プロジェクト構造(ctrl + alt + shift + S)>ファセット> Web(アプリケーション)の選択> Webリソースディレクトリの追加(+)(私の場合は......\src\main\webapp)
** 複数のモジュール(Intellijの場合)、実行>構成の編集>アプリケーションのスプリングブートの選択>構成タブ>作業ディレクトリとして$ MODULE_WORKING_DIR $
Spring MVCは、デフォルトの(フォールバック)エラーページをすぐに提供しません。デフォルトのエラーページを設定する最も一般的な方法は、常にSimpleMappingExceptionResolver
でした(実際はSpring V1以降)。ただし、Spring Bootはフォールバックエラー処理ページも提供します。
起動時に、Spring Bootは/error
のマッピングを見つけようとします。慣例により、/error
で終わるURLは、同じ名前の論理ビューerror
にマップされます。通常、このビューはerror.html
Thymeleafテンプレートに順番にマッピングされます。 (JSPを使用する場合、InternalResourceViewResolverのセットアップに従ってerror.jsp
にマップされます)。
Spring Bootは、クラスパス上にある限り、Thymeleafをビューレンダリングエンジンとして自動的に使用および構成します。
Thymeleaf with Maven:
次のコマンドでMaven 3がインストールされていることを確認してください:mvn --version。プロジェクトを作成するディレクトリに移動し、Maven archtetypeを実行します。
mvn archetype:generate -DarchetypeArtifactId=maven-archetype-quickstart -DgroupId=pl.codeleak.demos.sbt -DartifactId=spring-boot-thymeleaf -interactiveMode=false
上記のコマンドは、新しいディレクトリspring-boot-thymeleafを作成します。これで、IDEにインポートできます。次のステップは、アプリケーションを構成することです。 pom.xmlを開き、親プロジェクトを追加します。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.1.8.RELEASE</version>
</parent>
親プロジェクトからの値が指定されていない場合、このプロジェクトのデフォルトになります。次のステップは、Web依存関係を追加することです。そうするために、私は最初に以前の依存関係をすべて削除し(実際には3.8.1のJunit)、以下の依存関係を追加しました。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
ここで、Mavenが依存関係をダウンロードし、mvndependency:treeを実行して、含まれている依存関係を確認するまで少し待ちます。次はパッケージ構成です。 Spring Boot Mavenプラグインを追加しましょう。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
GradleのあるThymeleaf:
Thymeleafをクラスパスに配置するには
compile("org.springframework.boot:spring-boot-starter-thymeleaf")
gradleビルドファイル(関連するMaven依存関係の使用は簡単です)。
(使用しているコントローラーに応じて)index.jsp
ビューを表示するには、src/main/resources/templates/
の下に配置する必要があります。
/ errorからビューへのマッピングが見つからない場合、Spring Bootは独自のフォールバックエラーページ-いわゆるWhitelabel Error Page
(HTTPステータス情報と、キャッチされなかった例外からのメッセージ)。
Jspでthymeleafを使用できますが、次のように記述する必要があります。
spring.thymeleaf.excluded-view-names=#jsp file without extension
application.propertiesファイル内