跳至主要內容

SpringBoot2.x系列教程09--SpringBoot中支持jsp页面

Mr.DabaoSpringBoot约 1490 字大约 5 分钟

SpringBoot2.x系列教程09--SpringBoot中支持jsp页面

前言

在上一章节中跟大家讲过现在项目比较流行的开发模式,稍微大点的项目一般都是采用前后端分离的开发模式。如果我们的项目采用的是前后端不分离的模式,在SpringBoot中推荐我们使用Themeleaf模板来作为页面。

但是咱们都知道,Spring MVC中是支持JSP的,但是在Spring Boot中,其实不建议我们使用JSP。因为SpringBoot自带的嵌入式servlet容器对jsp的解析有使用限制,而且jsp的本质是Servlet,每个页面的加载都需要先进行编译,所以jsp的效率相对于html或Themeleaf都比较低。

但是如果你非要在Spring Boot中使用jsp可不可以呢?还是那句话,既然你有这样另类的需求那就想办法满足你呗,接下来我们就在SpringBoot中实现对jsp的支持。

一. 搭建jsp运行环境

前面我一直在说,本系列教程的所有项目代码,都会在同一个父项目下创建,所以我们继续在之前的项目中创建一个新的模块,创建过程请参考之前的文章。

1. 创建Maven web module

我们这里直接在之前的project中创建一个新的module。

image-20221123105312577
image-20221123105312577

设置新模块的名称,各位随意即可。

image-20221123105322245
image-20221123105322245

2. 改造项目为Spring Boot项目

在新模块demo06的pom.xml文件中,请添加相关依赖和插件。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.5.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<build>
    <plugins>
        <plugin>
           <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
       </plugin>
    </plugins>
</build>

3. 添加web相关依赖

这里我们一定要在pom.xml文件中,添加web和jsp等相关依赖包。

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- servlet 依赖. -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

4. 在application.properties中配置支持jsp

除了添加上述依赖包之外,我们还要在application.properties配置文件中,设置逻辑视图名等配置信息,添加对jsp的支持,配置jsp模板文件的存放路径。

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

5. 创建webapp目录

然后在src\main目录下,手动创建出一个新的目录webapp\WEB-INF\jsp,我们可以在这里存放自己的jsp页面。你可能会问,为什么不把jsp页面直接放到resources目录下呢?这是因为jsp属于动态的页面,而且也不是专门的模板页面,所以我们根据以往的经验,专门创建一个webapp目录进行存放管理。
image-20221123105338019

image-20221123105346543
image-20221123105346543

这里我们自己手动创建出这个目录即可。

image-20221123105357158
image-20221123105357158

二. 进行jsp编码

在上面的章节中,我们把jsp的运行环境编写完毕,接下来就开始编写jsp页面和相关接口。

1. 创建jsp页面

首先我们在上面创建的webapp\WEB-INF\jsp目录中,创建一个index.jsp文件。
image-20221123105409536

image-20221123105417214
image-20221123105417214

jsp页面内容代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE HTML>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
    <meta charset="UTF-8">
    <title>Boot支持JSP!</title>
</head>
<body>
<h2>Hello ${msg}</h2>
</body>
</html>

2. 创建一个Controller类

这里我创建一个Controller接口,并在这里进行页面跳转和传值的设置。

package com.yyg.boot.web;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

/**
 * Spring Boot中支持jsp功能的实现
 */
@Controller
public class JspController {

    @GetMapping("/index")
    public String index(Model model) {
        model.addAttribute("msg","跟一一哥学习SpringBoot中使用JSP功能!");
        //要跳转到的页面视图名称
        return "index";
    }

}

3. 创建启动类

最后我们在项目的根目录com.yyg.boot下创建一个启动类。

@SpringBootApplication
public class JspApplication  {
    //注意:不要直接启动该类,要以spring-boot:run命令方式启动才行,否则404!!!
    public static void main(String[] args) {
        SpringApplication.run(JspApplication.class, args);
    }
}

注意:

我们不要直接利用入口类来启动该项目,要以spring-boot:run命令方式启动才行,否则可能会产生404异常!!!
image-20221123105441552

4. 启动项目

不要直接以启动类的方式来启动项目,请用spring-boot:run命令方式启动才行,否则404!!!

spring-boot:run

该命令可以在当前项目模块的Maven Projects\Plugins中找到。

image-20221123105507328
image-20221123105507328

双击上图中的spring-boot:run即可,当然你如果把maven环境变量都配置好了,也可以用命令行来启动。

5. 运行测试

项目启动起来之后,我们来测试一下jsp页面是否可以展示我们的数据。我们在浏览器中直接访问http://localhost:8080/index接口,即可跳转到对应的jsp页面。open in new window

image-20221123105526198
image-20221123105526198

注意:

再次强调一下,请以spring-boot:run命令方式启动!!!

6. 整个项目目录结构

下图展示了当前这个项目的完整包结构,请参考创建。

image-20221123105542475
image-20221123105542475

结语

至此 就在SpringBoot中引入的jsp,我们发现也没什么难度,就是稍微比Themeleaf或纯html复杂一点点。

今日小作业:

用jsp页面,编写一个学生信息管理功能页面,实现对学生信息的增删改查。