Spring Boot 项目中使用 JSP

文章目录

  • [Spring Boot 项目中使用 JSP](#Spring Boot 项目中使用 JSP)

Spring Boot 项目中使用 JSP

在 Spring Boot 项目中不是不可以使用 JSP 。想在 Spring Boot 中使用 JSP,需要满足一些特殊要求。

项目结构

Spring Boot 项目想要支持 JSP,其项目结构必须如下:

xml 复制代码
spring-boot-jsp
├── pom.xml
└── src
    ├── main
    │   ├── java
    │   ├── resouces
    │   └── webapp
    │       └── WEB-INF
    │           └── jsp
    │               └── welcome.jsp
    └── test

在配置文件 application.properties 中进行配置:

properties 复制代码
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
  • spring.mvc.view.prefix 指明 jsp 文件在 webapp 下的哪个目录

  • spring.mvc.view.suffix 指明 jsp 以什么样的后缀结尾

引入依赖包

xml 复制代码
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>jstl</artifactId>
</dependency>
<dependency>
  <groupId>org.apache.tomcat.embed</groupId>
  <artifactId>tomcat-embed-jasper</artifactId>
</dependency>
  • spring-boot-starter-web 包依赖了 spring-boot-starter-tomcat,因此,后者不再需要单独配置;

  • jstl 是一个 JSP 的 jstl 标签库;

  • tomcat-embed-jasper 主要用来支持 JSP 的解析和运行。

编写页面和后台

html 复制代码
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<body>
Time: ${time}
<br>
Message: ${message}
</body>
</html>
java 复制代码
@Controller
public class WelcomeController {

    @GetMapping("/")
    public String welcome(Model model) {
        model.addAttribute("time", new Date());
        model.addAttribute("message", "hello world");
        return "welcome";
    }

}

运行

方式一:Maven 命令运行

cmd 进入项目根路径下,执行:

bash 复制代码
mvn clean spring-boot:run

补充:IDEA 的 Maven 工具窗口中,有个 M 图标,通过点击它在弹出的窗口中可直接手动执行 maven 命令。

方式二:在 IDEA 中运行

如果像其他项目一样,直接在 IDEA 中通过 main 方法来启动项目,在访问测试的时候会出现 404 not found

这是因为 Spring Boot JSP 项目需要额外进行一个设置:选择 Edit Configurations 选项,打开 Configuration,为 Working directory 赋值为项目的根目录。

方式三:打 war 包部署运行

  • step 1 :在 pom.xml 里设置打包格式为 war

    xml 复制代码
    <packaging>war</packaging>
  • step 2:排除内嵌的 Tomcat 依赖,避免 jar 包冲突。

    xml 复制代码
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <!-- 排除内置容器。导出成 war 包可以让外部容器运行 spring-boot 项目 -->
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
  • step 3:添加 Servlet 的支持

    Spring Boot 项目必须实现 SpringBootServletInitializer 接口的 .configure() 方法才能让外部容器运行 Spring Boot 项目。

    在启动类同目录下创建 ServletInitializer 类:

    java 复制代码
    public class ServletInitializer extends SpringBootServletInitializer {
    
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
            return application.sources(JspApplication.class);
        }
    
    }
  • step 4:maven 命令打包

    在项目根目录下执行:

    bash 复制代码
    mvn clean package
  • step 5:发布运行

    将项目 target 目录下的 .war 包拷贝到 tomcat 的 webapps 目录下,运行 tomcat 的 bin 目录下的 startup.bat 启动 tomcat 。

    在浏览器中访问即可。

相关推荐
飞的肖8 分钟前
前端使用 Element Plus架构vue3.0实现图片拖拉拽,后等比压缩,上传到Spring Boot后端
前端·spring boot·架构
Q_192849990610 分钟前
基于Spring Boot的摄影器材租赁回收系统
java·spring boot·后端
Code_流苏12 分钟前
VSCode搭建Java开发环境 2024保姆级安装教程(Java环境搭建+VSCode安装+运行测试+背景图设置)
java·ide·vscode·搭建·java开发环境
良许Linux14 分钟前
0.96寸OLED显示屏详解
linux·服务器·后端·互联网
求知若饥26 分钟前
NestJS 项目实战-权限管理系统开发(六)
后端·node.js·nestjs
禁默1 小时前
深入浅出:AWT的基本组件及其应用
java·开发语言·界面编程
Cachel wood1 小时前
python round四舍五入和decimal库精确四舍五入
java·linux·前端·数据库·vue.js·python·前端框架
Code哈哈笑1 小时前
【Java 学习】深度剖析Java多态:从向上转型到向下转型,解锁动态绑定的奥秘,让代码更优雅灵活
java·开发语言·学习
gb42152871 小时前
springboot中Jackson库和jsonpath库的区别和联系。
java·spring boot·后端
程序猿进阶1 小时前
深入解析 Spring WebFlux:原理与应用
java·开发语言·后端·spring·面试·架构·springboot