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
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;
}
}
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>