web-dev-qa-db-ja.com

Spring Boot JSP 404

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
29
definera

依存関係のリストに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

41
Biju Kunjummen

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に配置する必要があります

10
Ajitesh

私の問題は、コントローラークラスのアノテーションとして@Controllerではなく@RestControllerを使用していたことです。これが誰かを助けることを願っています。

4
jovanchohan

上記の答えに加えて、アプリケーションを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);
                }

            };
        }


}

見てください

this

2
Sam2016

私の問題はSpring vesrion:1.4.3以降のバージョンでは埋め込みJSPのサポートが停止していることがわかりました。だから私は1.4.1にバージョンを変更し、それは私のために働いた。

他のものが離陸する:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

それでは動作しません。

2
Omar B.

これを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/

0

IDEA開発ツールを使用している場合は、指定してみてください

Configurations -> Configuration -> environment -> Working directory

$MODULE_DIR$の値

0
mercury

これは、ホワイトラベルエラーページについての私のための作業ソリューションです:ビューページ(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 $

0
Kyung Hwan Min

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ステータス情報と、キャッチされなかった例外からのメッセージ)。

0
MCHAppy

Jspでthymeleafを使用できますが、次のように記述する必要があります。

spring.thymeleaf.excluded-view-names=#jsp file without extension

application.propertiesファイル内

0
Kike Lebowski