1、SpringBoot虽然支持JSP,但是官方不建议使用

《Spring官方文档》中对于JSP的支持有这么一段描述:

spring boot jsp 配置 springboot支持jsp_spring boot jsp 配置

使用翻译软件上述内容:

JSP局限性

当运行使用嵌入式servlet容器(并打包为可执行档案)的Spring Boot应用程序时,JSP支持存在一些限制。

  • 对于Jetty和Tomcat,如果使用war包装,它应该可以工作。 与java -jar一起启动时,可执行的war将起作用,并且还将可部署到任何标准容器中。 使用可执行jar时,不支持JSP。
  • Undertow不支持JSP。
  • 创建定制的error.jsp页面不会覆盖默认视图以进行错误处理。 应改用自定义错误页面。

有一个JSP实例,因此您可以了解如何进行设置。

SpringBoot是内嵌Web容器的,推荐打成 jar包不是 war包。如果想使用JSP也可以,自建WEB-INF\web.xml 然后像往常一样使用JSP。打成war包使用外部容器即可,这就相当于失去了一些SpringBoot的特性了。

 

2、SpringBoot项目中使用JSP的步骤

下面将通过一个示例来介绍如何在SpringBoot项目中使用JSP,首先创建SpringBoot项目。

2.1 pom.xml文件的配置

使用Maven进行项目的构建,pom.xml文件的配置如下:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <!-- 添加Servlet依赖模块 -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <scope>provided</scope>
    </dependency>

    <!-- 添加JSTL标签库依赖模块 -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
    </dependency>

    <!--添加Tomcat依赖模块.-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>

    <!-- 使用JSP引擎,SpringBoot内置Tomcat没有此依赖 -->
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <scope>provided</scope>
    </dependency>
</dependencies>

2.2 构建webapp目录

在与同级java和resources目录下,创建webapp目录,然后在webapp目录下再创建WEB-INF目录等,目录结构如下图:

spring boot jsp 配置 springboot支持jsp_spring boot jsp 配置_02

2.3 创建web.xml配置文件

在WEB-INF目录下,创建web.xml配置文件,配置信息如下:

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>

</web-app>

2.4 编写application.properties配置文件

在application.properties配置文件中,添加如下配置信息:

#Spring boot视图配置
spring.mvc.view.prefix=/WEB-INF/page/
spring.mvc.view.suffix=.jsp

2.5 创建Controller控制器

在源代码目录下,创建controller目录(控制器成),并创建IndexController(首页控制器类),代码如下:

package com.pjb.jspdemo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;

/**
 * 首页控制器
 * @author pan_junbiao
 **/
@Controller
public class IndexController
{
    /**
     * 首页
     */
    @RequestMapping("/index")
    public String index(HttpServletRequest request)
    {
        //将用户信息保存到Request对象中
        request.setAttribute("name","pan_junbiao的博客");
        request.setAttribute("blog","");
        request.setAttribute("remark","您好,欢迎访问 pan_junbiao的博客");

        //返回首页
        return "index";
    }
}

2.6 创建JSP页面

在webapp\WEB-INF\目录下,创建page目录(用于存放JSP页面),并在page目录下创建index.jsp首先,页面代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>首页</title>
    <meta name="author" content="pan_junbiao的博客">
</head>
<body>
<h3>使用JSP表达式:</h3>
用户姓名:<%= request.getAttribute("name") %><br/>
博客地址:<%= request.getAttribute("blog") %><br/>
备注信息:<%= request.getAttribute("remark") %><br/>

<h3>使用EL表达式语言:</h3>
用户姓名:${requestScope.name}<br/>
博客地址:${requestScope.blog}<br/>
备注信息:${requestScope.remark}<br/>

<h3>使用JSTL标签库:</h3>
用户姓名:<c:out value="${requestScope.name}" /><br/>
博客地址:<c:out value="${requestScope.blog}" /><br/>
备注信息:<c:out value="${requestScope.remark}" /><br/>
</body>
</html>

2.7 运行测试

启动SpringBoot,在浏览器中输入地址:http://127.0.0.1:8080/index

执行结果:

spring boot jsp 配置 springboot支持jsp_java_03

 

3、解决IDEA中无法新建JSP文件的问题

选择菜单:File → Project Structure。

spring boot jsp 配置 springboot支持jsp_spring boot jsp 配置_04

spring boot jsp 配置 springboot支持jsp_ide_05