wake-up-neo.com

Spring Boot JSP 404

Ich versuche, eine JSP-Seite in meinem Spring Boot-Dienst hinzuzufügen. Mein Problem ist, dass ich jedes Mal, wenn ich versuche, zu dieser Seite zu gehen, Folgendes hat:

Whitelabel-Fehlerseite

Diese Anwendung hat keine explizite Zuordnung für/error. Sie sehen also dies als Rückfall.

Di Apr 21 23:16:00 EEST 2015 Es ist ein unerwarteter Fehler aufgetreten (Typ = Nicht Gefunden, Status = 404). Keine Nachricht verfügbar

Ich habe das Präfix und das Sufix in meine application.properties eingefügt:

spring.view.prefix: /WEB-INF/jsp/
spring.view.suffix: .jsp

Dies ist meine Controller-Klasse:

@Controller
public class MarkerController {
    @RequestMapping(value="/map")
    public String trafficSpy() {
        return "index";
    }
}

Meine Bewerbungsklasse:

@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);
        }
}

Und die 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>

Und das ist die src-Dateistruktur:

├── 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
27
definera

Stellen Sie sicher, dass Sie jasper und jstl in der Liste der Abhängigkeiten haben:

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

Hier ist ein Starterprojekt in Arbeit - https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-web-jsp

31
Biju Kunjummen

In neueren Spring-Versionen muss folgendes in die Datei application.properties eingefügt werden:

spring.mvc.view.prefix =/WEB-INF/jsp /
spring.mvc.view.suffix = .jsp

JSP-Dateien müssen außerdem unter src/main/resources/META-INF/resources/WEB-INF/jsp abgelegt werden

8
Ajitesh

Mein Problem war, dass ich @RestController anstelle von @Controller als Anmerkung in meiner Controller-Klasse verwendete. Hoffe, das kann jemandem helfen. 

4
jovanchohan

mein Problem war Spring vesrion : Ich habe festgestellt, dass die Version 1.4.3 und höher die Embedded JSPs nicht mehr unterstützt. Also ändere ich die Version auf 1.4.1 , es hat für mich funktioniert.

eine andere Sache abheben:

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

es wird nicht damit arbeiten.

2
Omar B.

Zusätzlich zu den obigen Antworten muss die Anwendung als war statt jar implementiert werden.

<groupId>com.igt</groupId>
<artifactId>customer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>

zu rennen 

Java -jar customer-0.0.1-SNAPSHOT.war

Wenn Sie Ihre Anwendung als War- oder ausführbare Anwendung starten möchten, müssen Sie die Anpassungen des Builders in einer Methode freigeben, die sowohl für den SpringBootServletInitializer-Callback als auch für die Hauptmethode verfügbar ist

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);
                }

            };
        }


}

Bitte sehen

diese

1
Sam2016

Um dies in pom.xml zu haben

<!-- 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>

Es kann nicht genug sein.

Das darfst du nicht verpassen.

<packaging>war</packaging>

Andernfalls erhalten Sie beim Erstellen des Pakets eine JAR-Datei, die weder JSP noch den eingebetteten Tomcat enthält. 

Ein ausführbares Beispiel und seine Erklärung finden Sie hier https://www.surasint.com/spring-boot-jsp/

0

Wenn Sie IDEA Entwicklungstools verwenden, können Sie versuchen, dies anzugeben

Configurations -> Configuration -> environment -> Working directory

Der Wert in $MODULE_DIR$

0
mercury

Dies ist eine funktionierende Lösung für White-Label-Fehlerseite: Ansichtsseite kann nicht gefunden werden (jsp)

Stellen Sie in POM.xml sicher, dass die Verpackung "war" ist, und fügen Sie Tomcat/Jasper-Abhängigkeiten hinzu

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

Fügen Sie unter application.properties das Präfix/Suffix hinzu

spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

** Wenn Sie Intellij verwenden, müssen Sie Webressourcenverzeichnisse festlegen. In der Projektstruktur (Strg + Alt + Umschalt + S)> Facetten> Web auswählen (Ihre Anwendung)> Webressourcenverzeichnisse hinzufügen (+) (meins ist ......\src\main\webapp)

** Wenn Sie mehrere Module (bei Intellij) haben, wählen Sie Ausführen> Konfiguration bearbeiten> Springboot für Ihre Anwendung auswählen> Registerkarte Konfiguration> Arbeitsverzeichnis als $ MODULE_WORKING_DIR $

0
Kyung Hwan Min

Spring MVC bietet keine Standard-Fehlerseite (Fall-Back). Die häufigste Methode zum Festlegen einer Standardfehlerseite war immer SimpleMappingExceptionResolver (seit Spring V1 tatsächlich). Spring Boot bietet jedoch auch eine Fehlerbehandlungsseite für Fehler.

Beim Start versucht Spring Boot, eine Zuordnung für /error zu finden. Normalerweise wird eine URL mit der Bezeichnung /error einer logischen Ansicht mit demselben Namen zugeordnet: error. Im Allgemeinen ist diese Ansicht wiederum der Vorlage error.html Thymeleaf zugeordnet. (Bei Verwendung von JSP würde dies entsprechend der Einrichtung Ihres InternalResourceViewResolver auf error.jsp abgebildet werden).


Spring Boot verwendet und konfiguriert Thymeleaf automatisch als View-Rendering-Engine, sofern es sich im Klassenpfad befindet. 

Thymeleaf mit Maven:

Stellen Sie sicher, dass Sie Maven 3 mit dem folgenden Befehl installiert haben: mvn --version. Navigieren Sie zu dem Verzeichnis, in dem Sie Ihr Projekt erstellen möchten, und führen Sie den Maven-Typ aus:

mvn archetype:generate -DarchetypeArtifactId=maven-archetype-quickstart -DgroupId=pl.codeleak.demos.sbt -DartifactId=spring-boot-thymeleaf -interactiveMode=false

Der obige Befehl erstellt ein neues Verzeichnis spring-boot-thymeleaf. Nun können Sie es in Ihre IDE importieren .. _. Als nächstes müssen Sie die Anwendung konfigurieren. Öffnen Sie pom.xml und fügen Sie ein übergeordnetes Projekt hinzu:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.1.8.RELEASE</version>
</parent>

Werte aus dem übergeordneten Projekt sind die Standardwerte für dieses Projekt, wenn sie nicht angegeben sind. __ Im nächsten Schritt müssen Webabhängigkeiten hinzugefügt werden. Dazu entfernte ich zunächst alle vorherigen Abhängigkeiten (eigentlich junit 3.8.1) und fügte die folgenden Abhängigkeiten hinzu:

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

Warten Sie nun eine Sekunde, bis Maven die Abhängigkeiten herunterlädt, und führen Sie mvn Dependency: tree aus, um zu sehen, welche Abhängigkeiten enthalten sind. Die nächste Sache ist eine Paketierungskonfiguration. Fügen wir das Spring Boot Maven Plugin hinzu:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

Thymeleaf mit Gradle:

Um Thymeleaf auf den Klassenpfad zu setzen, verwenden Sie 

compile("org.springframework.boot:spring-boot-starter-thymeleaf")

in der Gradle-Build-Datei (die Verwendung der relevanten Maven-Abhängigkeit ist unkompliziert).

In Ihrem Fall müssen Sie die index.jsp-Ansicht (entsprechend der verwendeten Steuerung) unter src/main/resources/templates/ anzeigen.


Wenn keine Zuordnung von/Fehler zu einer Ansicht gefunden werden kann, definiert Spring Boot eine eigene Fehlerseite, den sogenannten Whitelabel Error Page (eine Minimalseite, die nur die HTTP-Statusinformationen und etwaige Fehlerdetails enthält, z. B. die Nachricht von einem nicht erfasste Ausnahme).

0
MCHAppy

Sie können Thymeleaf mit jsp verwenden, aber Sie müssen schreiben:

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

in der Datei application.properties

0
Kike Lebowski