JSP文件无法在Spring Boot Web应用程序中呈现

Nic*_*cek 57 spring-boot

我使用嵌入式Tomcat(默认)启动并运行Spring Boot Web应用程序.当它提供JSP文件作为渲染我在控制器中指定的视图的一部分时,JSP不会这样呈现,而是打印出内容.例如:

的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>
Run Code Online (Sandbox Code Playgroud)

在浏览器中呈现视图时,将显示上面的内容,而不是预期的内容:

Test
Run Code Online (Sandbox Code Playgroud)

Nic*_*cek 98

确保您pom.xml指定Tomcat JSP依赖项,如下所示:

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

嵌入式Tomcat似乎将JSP呈现视为可选.

如下所述,这个JAR有时也是必要的:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

(我添加了提供,因为这个JAR应该包含在servlet容器中.

  • 你让我今天很开心!这对我有帮助 - 尽管我的问题略有不同 - Spring甚至没有在`/ src/main/resources/webapp/WEB-INF/pages`中查找**我的.jsp文件.非常感谢! (3认同)

Sez*_*rli 23

你需要一个而不是两个依赖项(jasper和jstl)来pom.xml实现这个目的.

   <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>
Run Code Online (Sandbox Code Playgroud)


小智 14

对我来说,就像Dan提到的一样.删除提供的范围.

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

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>jstl</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)

多谢你们!


小智 12

也为我工作,但我不得不删除

<scope>provided</scope>

<dependency>
  <groupId>org.apache.tomcat.embed</groupId>
  <artifactId>tomcat-embed-jasper</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)


Ara*_*lur 10

更好的是你可以使用gradle(它正赶上Maven).在build.gradle文件中使用此依赖项.

// JSP的必需依赖项

providedRuntime 'org.apache.tomcat.embed:tomcat-embed-jasper'
Run Code Online (Sandbox Code Playgroud)


Ask*_*kar 7

  1. 确保,spring-boot-starter-tomcat,tomcat-embed-jasper和jstl依赖是在pom.xml。
  2. 确保包装类型为war.
  3. 如果有多个模块(IntelliJ),进入运行 -> 编辑配置 -> 配置,然后选择或放入$MODULE_WORKING_DIR$“工作目录”。

就是这样。


jee*_*mar 6

我认为你错过了一些配置,因为它很容易集成JSP只需遵循以下步骤

1 - tomcat-embad-jasper依赖

<dependency>
      <groupId>org.apache.tomcat.embed</groupId>
      <artifactId>tomcat-embed-jasper</artifactId>
      <scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

2 - 添加以下配置是application.properties

spring.mvc.view.prefix: /
spring.mvc.view.suffix: .jsp
Run Code Online (Sandbox Code Playgroud)

这仍然有一些疑问,然后在链接下面查看它

Spring Boot和JSP集成


Aar*_*esh 5

原因是因为您使用的是注释 @RestController 而不是 @Controller

当您使用 RestController 注解类时,所有使用 @RequestMapping 注解的方法默认采用 @ResponseBody 语义。换句话说,您的方法 #index 将字符串 /webapp/WEB-INF/index.jsp 序列化为 JSON,而不是将其值映射到视图。

就像其中一个答案中提到的那样,它必须是

@Controller 公共类 YourController { ... }