SpringBoot2.x系列教程09--SpringBoot中支持jsp页面
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。
设置新模块的名称,各位随意即可。
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目录进行存放管理。
这里我们自己手动创建出这个目录即可。
二. 进行jsp编码
在上面的章节中,我们把jsp的运行环境编写完毕,接下来就开始编写jsp页面和相关接口。
1. 创建jsp页面
首先我们在上面创建的webapp\WEB-INF\jsp
目录中,创建一个index.jsp文件。
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异常!!!
4. 启动项目
不要直接以启动类的方式来启动项目,请用spring-boot:run命令方式启动才行,否则404!!!
spring-boot:run
该命令可以在当前项目模块的Maven Projects\Plugins中找到。
双击上图中的spring-boot:run即可,当然你如果把maven环境变量都配置好了,也可以用命令行来启动。
5. 运行测试
项目启动起来之后,我们来测试一下jsp页面是否可以展示我们的数据。我们在浏览器中直接访问http://localhost:8080/index接口,即可跳转到对应的jsp页面。
注意:
再次强调一下,请以spring-boot:run命令方式启动!!!
6. 整个项目目录结构
下图展示了当前这个项目的完整包结构,请参考创建。
结语
至此 就在SpringBoot中引入的jsp,我们发现也没什么难度,就是稍微比Themeleaf或纯html复杂一点点。
今日小作业:
用jsp页面,编写一个学生信息管理功能页面,实现对学生信息的增删改查。