Bienvenido a proyecto on line, aquí vas a encontrar la respuesta a lo que estabas buscando.
Solución:
Según la documentación de Maven src/main/resources
terminará en WEB-INF/classes
En la guerra.
Esto hace el truco para Spring Boot en su application.properties
:
spring.mvc.view.prefix = /WEB-INF/classes/templates
spring.mvc.view.suffix = .jsp
Si prefiere la configuración de Java, este es el camino a seguir:
@EnableWebMvc
@Configuration
public class ApplicationConfiguration extends WebMvcConfigurerAdapter
@Bean
public ViewResolver jspViewResolver()
InternalResourceViewResolver bean = new InternalResourceViewResolver();
bean.setPrefix("/WEB-INF/classes/templates/");
bean.setSuffix(".jsp");
return bean;
Actualizar con un ejemplo completo
Este ejemplo se basó en el inicializador de Spring (proyecto Gradle con dependencia “Web”). Acabo de agregar apply plugin: 'war'
al build.gradle
, agregó / cambió los archivos a continuación, construyó el proyecto con gradle war
y lo implementé en mi servidor de aplicaciones (Tomcat 8).
Este es el árbol de directorios de este proyecto de muestra:
---src
+---main
+---java
| ---com
| ---example
| ---demo
| ApplicationConfiguration.java
| DemoApplication.java
| DemoController.java
|
---resources
+---static
---templates
index.jsp
ApplicationConfiguration.java: ver arriba
DemoApplication.java:
@SpringBootApplication
public class DemoApplication extends SpringBootServletInitializer
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
return application.sources(DemoApplication.class);
public static void main(String[] args) throws Exception
SpringApplication.run(DemoApplication.class, args);
DemoController.java:
@Controller
public class DemoController
@RequestMapping("/")
public String index()
return "index";
index.jsp:
Hello World
Informacion oficial:
Manejo de recursos:
Los enlaces a los recursos se reescriben en tiempo de ejecución en la plantilla, gracias a ResourceUrlEncodingFilter, autoconfigurado para Thymeleaf y FreeMarker. Debe declarar manualmente este filtro cuando utilice JSP. fuente
Motor de plantillas compatible
Además de los servicios web REST, también puede utilizar Spring MVC para ofrecer contenido HTML dinámico. Spring MVC admite una variedad de tecnologías de plantillas, incluidas Thymeleaf, FreeMarker y JSP.
[…]
Las JSP deben evitarse si es posible, existen varias limitaciones conocidas al usarlas con contenedores de servlets integrados.
[..]
Cuando esté utilizando uno de estos motores de plantillas con la configuración predeterminada, sus plantillas se recogerán automáticamente de src / main / resources / templates.
fuente
Limitaciones de Spring Boot JSP
- Con Tomcat debería funcionar si usa paquetes de guerra, es decir, una guerra ejecutable funcionará, y también se podrá implementar en un estándar.
contenedor (no limitado a, pero incluido Tomcat).- Un jar ejecutable no funcionará debido a un patrón de archivo codificado en Tomcat.
- Con Jetty debería funcionar si usa paquetes de guerra, es decir, una guerra ejecutable funcionará, y también se podrá implementar en cualquier contenedor estándar.
- Undertow no admite JSP.
- La creación de una página personalizada error.jsp no anulará la vista predeterminada para el manejo de errores; en su lugar, se deben usar páginas de error personalizadas.
fuente
Cambio tecnico
Dile a Spring Boot desde dónde cargar el JSP files
. En application.properties
colocar
spring.mvc.view.prefix: /WEB-INF/views/
spring.mvc.view.suffix: .jsp
fuente
Ejemplo de bota de primavera con JSP
En caso de que quieras usar JSP
con bota de primavera aquí hay dos ejemplos:
https://github.com/spring-projects/spring-boot/tree/v1.5.9.RELEASE/spring-boot-samples/spring-boot-sample-web-jsp
https://github.com/joakime/spring-boot-jsp-demo
Para resumirlo, ninguno de las respuestas sugeridas funcionó para mí hasta ahora. Usando un proyecto de inicio de arranque de Spring en blanco.
De alguna manera, algo parece cableado dentro de Spring o servlets para que JSP debe estar en /webapp
(o una subcarpeta). A diferencia de las plantillas predeterminadas de hojas de tomillo que se buscan en /resources/templates
.
Probé todo tipo de cambios, realmente muchas configuraciones diferentes, pero no pude modificar ese comportamiento. Simplemente produjo complejidad y ya no pudo servir a las JSP. Entonces, en resumen, si está utilizando JSP, simplemente colóquelos en /webapp
. También funciona agregando cero configuración usando un controlador como:
@GetMapping("/foo")
public String serveFoo()
return "relative-path-inside-webapp/foo.jsp";
En otra nota, por defecto, el /webapp
La carpeta también estará oculta en Spring Toolsuite, por lo que tendrá que configurarla manualmente como una “carpeta de origen”.