Saltar al contenido

¿Spring boot usa la carpeta de plantillas de recursos con plantillas JSP en lugar de la carpeta de aplicaciones web?

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

Puntuaciones y reseñas

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *