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
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
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
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.
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.
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
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/
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).
Vous pouvez utiliser thymeleaf avec jsp mais vous devez écrire:
spring.thymeleaf.excluded-view-names=#jsp file without extension
dans le fichier application.properties