starter spring-boot

spring-boot - spring boot starter web



El archivo JSP no se procesa en la aplicaciĆ³n web Spring Boot (13)

Tengo una aplicación web Spring Boot en funcionamiento utilizando Tomcat integrado (el valor predeterminado). Cuando sirve archivos JSP como parte de la representación de la vista que especifiqué en mi controlador, los JSP no se representan como tales y, en su lugar, imprime los contenidos. Por ejemplo:

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <!DOCTYPE html> <html lang="en"> <head></head> <body>Test</body> </html>

Cuando la vista se representa en los navegadores, se muestran los contenidos anteriores, en lugar de los contenidos esperados:

Test


Asegúrese de que su pom.xml especifique la dependencia Tomcat JSP de la siguiente manera:

<dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency>

Parece que Tomcat integrado trata el renderizado de JSP como opcional.

Como se menciona a continuación, este JAR a veces también es necesario:

<dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <scope>provided</scope> </dependency>

(Agregué proporcionado dado que este JAR debe ser incluido por el contenedor de servlets.


Configuración completa de Gradle para Spring-Boot con Spring-MVC y con el servidor Tomcat integrado:

build.gradle

buildscript { ext { springBootVersion = ''1.5.8.RELEASE'' } repositories { mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") } } apply plugin: ''java'' apply plugin: ''org.springframework.boot'' //WEB-MVC compile ''org.springframework.boot:spring-boot-starter-web:1.5.8.RELEASE'' compile ''org.apache.tomcat.embed:tomcat-embed-jasper:9.0.1'' compile ''javax.servlet:jstl:1.2''

App.class

@SpringBootApplication public final class App { public static void main(final String[] args) { new SpringApplicationBuilder(App.class) .build(args) .run(); } @Bean public ViewResolver viewResolver() { final InternalResourceViewResolver r = new InternalResourceViewResolver(); r.setPrefix("/WEB-INF/jsp/"); r.setSuffix(".jsp"); return r; } }


Creo que te perdiste algo de configuración porque es fácil integrar JSP simplemente sigue los pasos a continuación

1 - dependencia tomcat-embad-jasper

<dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency>

2 - Agregar la configuración a continuación es application.properties

spring.mvc.view.prefix: / spring.mvc.view.suffix: .jsp

Eso todavía tiene dudas, luego échale un vistazo a este enlace

Spring Boot y la integración JSP


En ocasiones, tomcat-embed-jasper no está disponible, por lo que es necesario eliminarlo de la dependencia maven de tomcat-embed-jasper.

p.ej.

<dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <!--scope>provided</scope--> </dependency>


Enfrenté el problema, como imprimir el nombre del archivo jsp en el navegador en lugar de su contenido.

Al agregar el siguiente fragmento para la representación de la página jsp en pom.xml, se procesa correctamente.

<dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> </dependency>


Mejor puedes usar gradle (que está alcanzando a Maven). Use esta dependencia en el archivo build.gradle.

// Dependencia requerida para JSP

providedRuntime ''org.apache.tomcat.embed:tomcat-embed-jasper''


No necesitaras una, sino dos dependencias (jasper y jstl) en tu pom.xml para que esto funcione.

<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <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> </dependencies>


Para mí trabajó igual como lo mencionó Dan. Eliminar el alcance proporcionado .

<dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency>

¡Gracias chicos!


Resolví mi problema cuando, además de lo descrito anteriormente:

<dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency>

added ViewResolver:

@Configuration @ComponentScan @EnableWebMvc public class SpringServletConfig { @Bean public InternalResourceViewResolver resolver() { InternalResourceViewResolver vr = new InternalResourceViewResolver(); vr.setPrefix("/WEB-INF/jsps/"); vr.setSuffix(".jsp"); return vr; } }

from: ¿Por qué Spring MVC responde con un 404 e informa "No se encontró una asignación para la solicitud HTTP con URI [...] en DispatcherServlet"?


Si desea utilizar 1.5.8.RELEASE o similar, entonces, ejemplo ejecutable y su explicación está aquí https://www.surasint.com/spring-boot-jsp/

Solo necesitas esto en pom.xml

http://maven.apache.org/xsd/maven-4.0.0.xsd "> 4.0.0 org.springframework.boot spring-boot-starter-parent 1.5.8.RELEASE

<groupId>com.surasint.example</groupId> <artifactId>spring-boot-02</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <properties> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.source>1.8</maven.compiler.source> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 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> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>

Y esto en application.properties

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

Luego, mantenga su jsp en la carpeta / WEB-INF / jsp /.

Este es el controlador.

package com.surasint.example.web.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import java.util.Date; import java.util.Map; @Controller public class TestController { @GetMapping("/testjsp") public String list(Map<String, Object> model) { model.put("this_time",new Date().toString()); return "testjsp-view"; } }


Solo cambia la dependencia

<dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency>

a

<dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> </dependency>


Trabajó para mí también, pero tuve que eliminar

<scope>provided</scope> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> </dependency>


<servlet> <servlet-name>appServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherSe rvlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>appServlet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> I took the * off so it was just from web.xml <servlet> <servlet-name>appServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherSe rvlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>appServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>