Mantén la atención ya que en este tutorial vas a encontrar la contestación que buscas.
Solución:
Parece que estabas muy cerca de la aplicación en funcionamiento. El problema principal en su código está en
para su dependencia de Jasper. Y también parece que está ejecutando su código desde Eclipse IDE a través del main
método.
Larga historia corta:
Si desea ejecutar su aplicación a través de la main
método en MyApplication.java
entonces simplemente elimina el alcance provided
para el Jaspe.
org.apache.tomcat.embed
tomcat-embed-jasper
O puede ejecutar su aplicación exactamente en ese estado como lo tiene ahora desde la consola:
mvn clean spring-boot:run
Pero sugiero eliminar este alcance para que pueda ejecutar su código desde IDE y desde la consola. Además de eso parece spring-boot-starter-tomcat
la dependencia es redundante (debe estar disponible dentro de spring-boot-starter-web
). En pocas palabras, intente usar el siguiente archivo pom:
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.1.3.RELEASE
com.example
demo
0.0.1-SNAPSHOT
demo
Demo project for Spring Boot
1.8
org.springframework.boot
spring-boot-starter-web
org.apache.tomcat.embed
tomcat-embed-jasper
Espero que mi respuesta te ayude.
Es posible que también deba agregar esto en pom.xml
javax.servlet
jstl
ACTUALIZACIÓN 1:
Limitación JSP
Cuando se ejecuta una aplicación Spring Boot que utiliza un contenedor de servlet incrustado (y está empaquetado como un archivo ejecutable), existen algunas limitaciones en la compatibilidad con JSP.
- Con Jetty y Tomcat, debería funcionar si usa un paquete de guerra. Una guerra ejecutable funcionará cuando se inicie con java -jar, y también se podrá implementar en cualquier contenedor estándar. Los JSP no son compatibles cuando se usa un jar ejecutable.
- Undertow no es compatible con JSP.
- La creación de una página personalizada de error.jsp no anula la vista predeterminada
para el manejo de errores. En su lugar, se deben usar páginas de error personalizadas.
Alcance
compile
Este es el ámbito predeterminado, que se utiliza si no se especifica ninguno. Las dependencias de compilación están disponibles en todos los classpaths de un proyecto. Además, esas dependencias se propagan a proyectos dependientes.
provided
Esto es muy parecido a compilar, pero indica que espera que el JDK o un contenedor proporcione la dependencia en tiempo de ejecución. Por ejemplo, al crear una aplicación web para Java Enterprise Edition, establecería la dependencia de la API Servlet y las API Java EE relacionadas con el alcance proporcionado porque el contenedor web proporciona esas clases. Este alcance solo está disponible en el classpath de compilación y prueba, y no es transitivo.
runtime
Este ámbito indica que la dependencia no es necesaria para la compilación, pero sí para la ejecución. Está en el tiempo de ejecución y en las rutas de clase de prueba, pero no en la ruta de clase de compilación.
Además, intente cambiar lo siguiente en tomcat-embed-jasper
Remove provided OR change the scope to compile compile
Limitaciones de JSP Spring Boot JSP 404
Valoraciones y comentarios
Ten en cuenta recomendar este escrito si te fue de ayuda.