6.Spring Boot 2.x 最佳实践之JSP集成

版权声明:作者:星云 交流即分享,分享才能进步!喜欢我的文章,可在博客左侧扫码赞赏~ https://blog.csdn.net/hadues/article/details/89413877

虽然Spring Boot 不推荐使用JSP,但是有时候有些特殊的老项目不得不用,可是我们又想要使用Spring Boot 的强大自动配置功能,那么该怎么做呢?

这篇博文讲解如何使用Spring Boot 集成JSP.

1.创建项目类型由jar 改为war
在这里插入图片描述
2.勾选web模块
在这里插入图片描述
3. 检查pom.xml

我们可以看到pom.xml 和之前的差不多都一样,除了打包类型由原来的jar修改成了war
其次我们需要添加web模板支持,所以要添加spring-boot-starter-web

由于我们在JSP页面需要使用JSP标签库,所以要加入JSTL标签库依赖

War包部署到外部的Tomcat中已经包含了这些,所以需要添加以下依赖

spring-boot-starter-tomcat 和 tomcat-embed-jasper 否则会和内嵌的Tomcat
容器发生冲突,并且provided不能修改也不能注释掉

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.xingyun</groupId>
    <artifactId>spring-boot-with-jsp-sample</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>spring-boot-with-jsp-sample</name>
    <description>spring boot with jsp sample for Spring Boot</description>

    <properties>
        <java.version>12</java.version>
    </properties>

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

        <!--编译JSP,包含了tomcat-embed-core,tomcat-embed-el-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <!--用于编译jsp-->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>
        <!--如果使用了JSTL标签库则需要添加如下依赖-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>

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

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

</project>

  1. 我们还需要一个继承了SpringBootServletInitializer 的类

这个类如果使用的是Intellij Idea ,会发现已经自动为我们创建好了。 这个类是必须的,没有它,我们将无法使用Spring Boot
集成JSP. Spring Boot 是通过启动一个main 方法启动的, 这样做就是在一个serverlet 中启动我们的main 方法

ServletInitializer.java

package com.xingyun.springbootwithjspsample;

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

public class ServletInitializer extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(SpringBootWithJspSampleApplication.class);
    }
}

5.新建传统的web目录结构
原来的目录结构是这样
在这里插入图片描述
我们需要新建几个文件夹目录
在这里插入图片描述

index.jsp 用于欢迎页面
home.jsp 位于WEB-INF/views 文件夹下,表示不可以直接访问

index.jsp 简单修改如下:

<%--
  Created by IntelliJ IDEA.
  User: fairy
  Date: 2019/4/20
  Time: 10:48
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Index Page</title>
</head>
<body>
Hello Index Page
</body>
</html>

home.jsp

<%--
  Created by IntelliJ IDEA.
  User: fairy
  Date: 2019/4/20
  Time: 10:49
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Home Page</title>
</head>
<body>
 Hello Home Page
</body>
</html>

6.application-dev.properties

由于我们将会使用外部容器,因此之前的
server.port 和server.servlet.context-path=
两个属性将无效
除此之外,我们还需要配置JSP 模板路径

application-dev.properties

# 值得注意的是这两个配置属性将无效,这个属性仅作用于内嵌的容器
#server.port=8080
#server.servlet.context-path=/

# Spring Boot 日志
# SpringBoot默认使用的的日志框架是slf4j + Logback
# Logback 没有 FATAL 级别,对应着 ERROR
# 日志级别从低到高
# TRACE < DEBUG < INFO < WARN < ERROR
## 默认配置INFO、WARN、ERROR级别的日志输出到控制台
logging.level.root=info
##配置自己的应用程序日志级别,com.xingyun 是自己应用程序的根包
logging.level.com.xingyun=debug
##设置其他全部的日志等级
logging.level.*=warn

# 配置Spring Web MVC
# 配置JSP模板前缀
spring.mvc.view.prefix=/WEB-INF/views/
# 配置JSP模板后缀
spring.mvc.view.suffix=.jsp
# 静态资源拦截,多个静态资源路径以逗号分隔
spring.mvc.static-path-pattern=/static/**

7.新建一个Controller

值得注意的是,我们要返回的是JSP页面,因此就不能在这里用@RestController注解了
当然可以新建另外一个类使用返回JSON API 数据是可以的。

package com.xingyun.springbootwithjspsample.controller;

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

@Controller
public class HomeController {

    @GetMapping(value = "/home.do")
    public String homePage(){
        return "home";
    }
}

8.注意我们启动就不能通过main 方法启动了,而是添加一个tomcat 部署到上面
在这里插入图片描述
9.启动成功后默认在webapp 文件夹下寻找index.jsp 页面

10.访问URL 可以看到:http://localhost:8014/spring_boot_with_jsp_sample/
在这里插入图片描述
11.访问我们的Controller
http://localhost:8014/spring_boot_with_jsp_sample/home.do
在这里插入图片描述


好了,本篇教程到此结束~

Github 源码下载

更多关注我的这个系列的专栏:Spring Boot 2.x 最佳实践手册

猜你喜欢

转载自blog.csdn.net/hadues/article/details/89413877