web-dev-qa-db-fra.com

Botte À Ressort JSP 404

J'essaie d'ajouter une page JSP à mon service de démarrage Spring. Mon problème est que chaque fois que j'essaie d'aller à cette page, j'ai ceci:

Whitelabel Error Page

Cette application n'a pas de mappage explicite pour/error, vous voyez donc ceci comme un repli.

Mar 21 Avr 23:16:00 EEST 2015 Une erreur inattendue s'est produite (type = Non Trouvé, statut = 404). Aucun message disponible

J'ai ajouté le préfixe et le suffixe dans mon application.properties:

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

Ceci est ma classe de contrôleur:

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

Ma classe d'application:

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

Et l'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>

Et voici la structure de fichier 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
27
definera

Assurez-vous que jasper et jstl figurent dans la liste des dépendances:

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

Voici un projet de démarrage en cours - https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-web-jsp

31
Biju Kunjummen

Dans les versions plus récentes de Spring, les éléments suivants doivent être placés dans le fichier application.properties:

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

Les fichiers JSP doivent également être placés sous src/main/resources/META-INF/resources/WEB-INF/jsp

8
Ajitesh

Mon problème était que j'utilisais @RestController au lieu de @Controller comme annotation dans ma classe de contrôleur. J'espère que cela peut aider quelqu'un. 

4
jovanchohan

mon problème était Spring vesrion : J'ai constaté que, depuis la version 1.4.3 et les versions ultérieures, cesse de supporter les JSP incorporés. Alors je change de version en 1.4.1 , ça a marché pour moi.

une autre chose décoller:

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

ça ne marchera pas avec ça.

2
Omar B.

En plus des réponses ci-dessus, l'application doit être déployée sous la forme war à la place de jar.

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

courir 

Java -jar customer-0.0.1-SNAPSHOT.war

De même, si vous avez l'intention de démarrer votre application en tant qu'application war ou exécutable, vous devez partager les personnalisations du générateur dans une méthode disponible pour le rappel SpringBootServletInitializer et la méthode principale.

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

            };
        }


}

S'il te plait regarde

ce

1
Sam2016

Pour avoir ceci dans 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>

Ce n'est peut-être pas assez.

Vous ne devez pas manquer ça.

<packaging>war</packaging>

Sinon, lorsque vous construirez le paquet, vous obtiendrez un fichier JAR contenant JSP et Tomcat intégré. 

Voir exemple exploitable et explication ici https://www.surasint.com/spring-boot-jsp/

0
Surasin Tancharoen

Spring MVC ne propose aucune page d’erreur par défaut (solution de secours) par défaut. Le moyen le plus courant de définir une page d'erreur par défaut a toujours été la SimpleMappingExceptionResolver (depuis Spring V1 en fait). Cependant, Spring Boot fournit également une page de traitement des erreurs de secours.

Au démarrage, Spring Boot tente de trouver un mappage pour /error. Par convention, une URL se terminant par /error correspond à une vue logique du même nom: error. Généralement, cette vue correspond au modèle error.html Thymeleaf. (Si vous utilisez JSP, le mappage sur error.jsp dépend de la configuration de votre InternalResourceViewResolver).


Spring Boot utilisera et configurera automatiquement Thymeleaf en tant que moteur de rendu de vue, tant qu'il se trouve sur le chemin de classe. 

Thymeleaf avec Maven:

Assurez-vous que Maven 3 est installé avec la commande suivante: mvn --version. Accédez au répertoire dans lequel vous souhaitez créer votre projet et exécutez Maven archtetype:

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

La commande ci-dessus créera un nouveau répertoire spring-boot-thymeleaf. Maintenant, vous pouvez l'importer dans votre IDE . L'étape suivante consiste à configurer l'application. Ouvrez pom.xml et ajoutez un projet parent:

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

Les valeurs du projet parent seront les valeurs par défaut pour ce projet si elles ne sont pas spécifiées . L'étape suivante consiste à ajouter des dépendances Web. Pour ce faire, j'ai d'abord supprimé toutes les dépendances précédentes (Junit 3.8.1 en fait) et ajouté les dépendances ci-dessous:

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

Maintenant, attendez une seconde jusqu'à ce que Maven télécharge les dépendances et lancez mvn dependency: tree pour voir quelles sont les dépendances incluses .. Le prochain élément est une configuration de package. Ajoutons Spring Boot Maven Plugin:

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

Thymeleaf avec Gradle:

Pour mettre Thymeleaf sur le classpath, utilisez 

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

dans le fichier de construction gradle (l’utilisation de la dépendance maven appropriée est simple).

Dans votre cas, pour afficher la vue index.jsp (conformément au contrôleur que vous utilisez), vous devez la placer sous src/main/resources/templates/.


Si aucun mappage de/error vers une vue ne peut être trouvé, Spring Boot définit sa propre page d'erreur de substitution, appelée «Whitelabel Error Page» (page minimale contenant uniquement les informations d'état HTTP et les détails de l'erreur, tels que le message d'un message). exception non interceptée).

0
MCHAppy

Vous pouvez utiliser thymeleaf avec jsp mais vous devez écrire:

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

dans le fichier application.properties

0
Kike Lebowski