Spring Boot 集成Jsp与生产环境部署
一、简介
提起Java不得不说的一个开发场景就是Web开发,也是Java最热门的开发场景之一,说到Web开发绕不开的一个技术就是JSP,因为目前市面上仍有很多的公司在使用JSP,所以本文就来介绍一下Spring Boot 怎么集成JSP开发,以及生产环境的详细部署方法。
二、集成JSP
开发环境
- Spring Boot 2.0.4 RELEASE
- Tomcat 9.0.10
- IDEA(Intellij IDEA简称,下文统一使用)2018.2
- Windows 10
JSP集成步骤
- 创建JSP目录
- application.properties配置Jsp信息
- pom.xml添加依赖组件
- 编写Spring MVC代码
- 运行程序
具体集成方法如下:
1.创建JSP目录
在src/main目录下创建目录webapp/WEB-INF/jsp用于存放jsp页面,如下图:

2.application.properties配置Jsp信息
application.properties为全局配置文件,里面可以设置很多信息,比如设置日志、设置缓存、设置Spring、Spring SESSION等信息,我们本文只需要设置JSP的目录文件,以及文件后缀,代码如下:
spring.mvc.view.prefix=/WEB-INF/jsp
spring.mvc.view.suffix=.jsp
更多application.properties设置信息,查看官方文档:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#common-application-properties
3.pom.xml添加JSP配置
在pom.xml需要添加3个组件:
- spring-boot-starter-web (用于运行web项目)
- jstl (JavaServer Pages Standard Tag Library,JSP标准标签库,用于程序中解析JSP)
- tomcat-embed-jasper (内置tocat对Jsp支持的依赖,用于编译Jsp)
具体代码如下:
<!--web支持-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--JavaServer Pages Standard Tag Library,JSP标准标签库-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!--内置tocat对Jsp支持的依赖,用于编译Jsp-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
注意:tomcat-embed-jasper的scope(作用域)值为provided,表示打包的时候不用打包进去,其他设备会提供,如果打包进去会和外部Tomcat提供的jar冲突,导致项目启动失败。
scope(作用域)值列表代表含义解释如下:
- compile:默认值 他表示被依赖项目需要参与当前项目的编译,还有后续的测试,运行周期也参与其中,是一个比较强的依赖。打包的时候通常需要包含进去
- test:依赖项目仅仅参与测试相关的工作,包括测试代码的编译和执行,不会被打包,例如:junit
- runtime:表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile相比,跳过了编译而已。例如JDBC驱动,适用运行和测试阶段
- provided:打包不会包含进去,别的设施会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。相当于compile,但是打包阶段做了exclude操作
- system:从参与度来说,和provided相同,不过被依赖项不会从maven仓库下载,而是从本地文件系统拿。需要添加systemPath的属性来定义路径
4.编写Spring MVC代码
经过前3步的配置,项目配置部分已经完成的差不多了,接下来就是代码的编写了,代码的编写和Spring MVC一样,分为两部分Java类编写与标识注解,JSP模板创建与编写。为了更好的演示Spring Boot 的功能,我们会尽可能的简化业务逻辑,在这个示例中我们创建一个Cat类,设置标签hi="Hello Cat",在页面输出标签即可。
a).Cat.java代码
package com.hellospringboot.hellospringboot;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping("/cat") //创建路由规则http://xxxx/cat
public class Cat {
/**
* 默认路由方法
*
* @return
*/
@RequestMapping("")
public ModelAndView index() {
ModelAndView modelAndView = new ModelAndView("/index"); //设置对应JSP的模板文件
modelAndView.addObject("hi", "Hello,Cat"); //设置${hi}标签的值为Hello,Cat
return modelAndView;
}
}
Spring MVC注解解读
- @Controller 标识在一个类上,标识的类就是Spring MVC的控制器类,分发处理器会扫描使用了该注解的类是否使用了@RequestMapping 注解,@Controller只是定义了一个控制器类,只用使用了@RequestMapping 注解,才是真正处理请求的处理器;
- @RequestMapping 标识在类或者方法上,用来处理请求地址的注解,一共有6个属性:
- value 对应请求的实际地址
- method 请求的类型:get、post、put、delete 等,ex:@RequestMapping(value = "/test", method = RequestMethod.PUT)
- consumes 指定请求上的内容类型,比如application/json、text/html等
- produces 指定返回的数据类型,类型必须是Request Headers中accept包含的类型
- params 过滤请求,只有请求中包含某个参数,才会执行,比如@RequestMapping(value = "",params = "flag"),只有参数中包含flag才会执行,不然不能访问,http://localhost:8080/cat?true=flag这个地址是访问不到的,正确的地址是http://localhost:8080/cat?flag=true才可以正常访问
- headers 和params类似,只有请求headers里面包含某个key才可以访问方法
b).JSP端代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>
${hi}
</h1>
</body>
</html>
这个jsp只做了一件事,把java类里面的${hi}标签的值显示出来。
5.运行程序
到此为止,如果您使用的是IDEA开发工具,那么现在就可以运行调试程序了,直接运行Index.jsp或者启动文件,或者启动文件(Application.java)即可,然后在浏览器输入:http://localhost:8080/cat 即可查看。
三、生产环境部署
部署步骤
- 下载安装Tomcat
- 入口类继承SpringBootServletInitializer重写configure方法
- 配置pom.xml
- IDEA生成war文件
- 配置Tomcat运行项目
1.下载安装Tomcat
下载地址:https://tomcat.apache.org/download-90.cgi
如下图所示:

Windows下载:64-bit Windows zip | Linux下载:tar.gz
注意:如果是Windows版下载的免安装版如果放到C盘的话,注意给文件夹分配足够的权限,不然启动之后访问页面显示400或者505类似的问题。
2.入口类继承SpringBootServletInitializer重写configure方法
如果要进行生产环境部署,需要单独配置一下Spring Boot 的入口类,需要继承SpringBootServletInitializer类,重写configure方法,因为默认情况外部Tomcat不能读取到Spring Boot 入口类的main方法启动程序加载,使用需要继承,代码如下:
package com.hellospringboot.hellospringboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
/**
* 启动类,程序入口
*/
@SpringBootApplication
public class HelloSpringBootApplication extends SpringBootServletInitializer{
/**
* 重写configure方法,加载启动类
* @param application
* @return
*/
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(HelloSpringBootApplication.class);
}
/**
* Spring Boot 默认main方法
* @param args
*/
public static void main(String[] args) {
SpringApplication.run(HelloSpringBootApplication.class, args);
}
}
3.配置pom.xml
需要配置一下pom.xml,排除一下内置tomcat的jar包,防止打包之后与外面Tomcat jar 包冲突,导致项目启动失败,配置如下:
<!--排除内置tomcat jar包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
主要的代码是provided,设置打包不会包含进去,由其他设施提供。
4.IDEA生成war文件
步骤一:修改生成jar为war格式
找到:
jar
修改为:
war
为什么需要修改jar包格式为war,因为如果打包为jar包的时候,不会包含JSP文件,所以访问的时候回404,而打包为war的时候回包含JSP文件,所以需要把打包格式修改为war.
jar和war的区别?
- jar(java application archive)java应用程序库,通常为开发引用的通用类
- war(web application archive)web应用程序
所以从jar和war的区别来看,网页程序打包成war格式也是很合适的。
如果需要修改生成文件的文件名称,可以设置build下的finalName属性,代码如下:
<build>
<finalName>name</finalName>
</build>
步骤二:使用IDEA生成war包
选择菜单栏Build => Build Artifacts.. => 点击Rebuild,即可生成war包,如图:


生成完之后,在项目的target目录下找到生成war文件,如下图:

5.配置Tomcat运行项目
步骤一:把war文件复制到tomcat的webapps目录下
步骤二:配置conf/server.xml
在Host标签内添加Context设置,docBase属性填写war文件名称,配置如下:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="springbootjsp" debug="0" privileged="true" reloadable="true" />
<!--
其他代码
-->
</Host>
步骤三:启动tomcat
运行bin/shutdown.bat文件,启动tomcat
输入地址:http://localhost:8080/cat 访问。
到此项目部署成功,虽然本人部署到Windows服务器了,Linux也是一样的步骤。
四、知识扩展:Spring Boot 模板推荐
虽然上文我们详细介绍了JSP在Spring Boot 中使用,但是Spring Boot官方并不推荐使用JSP(原因见下文)。
Spring Boot推荐模板引擎:
- Thymeleaf
- Freemarker
- Mustache
- Groovy Templates
如下图所示:

Spring为什么不推荐使用JSP?
Spring官方不推荐使用JSP的原因有这么几个:
- 官方文档JSP没有Thymeleaf好;
- Thymeleaf健康的开源项目,几乎每个月都有更新,而JSP已经好几年没有实质性的进展;
- Thymeleaf有迅速响应的用户论坛。
Spring Boot 集成Jsp与生产环境部署的更多相关文章
- Spring Boot (二)集成Jsp与生产环境部署
一.简介 提起Java不得不说的一个开发场景就是Web开发,也是Java最热门的开发场景之一,说到Web开发绕不开的一个技术就是JSP,因为目前市面上仍有很多的公司在使用JSP,所以本文就来介绍一下S ...
- 81. Spring Boot集成JSP疑问【从零开始学Spring Boot】
[原创文章,转载请注明出处] 针对文章: ()Spring Boot 添加JSP支持[从零开始学Spring Boot] 有网友提了这么一些疑问: 1.Spring Boot使用jsp时,仍旧可以打成 ...
- Spring Boot 利用 nginx 实现生产环境的伪热更新
当我们在服务器部署Java程序,特别是使用了 Spring Boot 生成单一 Jar 文件部署的时候,单一文件为我们开发单来的极大的便利性,保障程序的完整性.但同时对我们修改程序中的任何一处都带来重 ...
- spring boot集成jsp
我们在使用spring boot进行web项目开发的时候,可能会选择页面用jsp.spring boot默认使用的html的,现在我们来看下如何集成jsp页面进行开发. 1.pom.xml文件引入所需 ...
- (33)Spring Boot 监控和管理生产环境【从零开始学Spring Boot】
[本文章是否对你有用以及是否有好的建议,请留言] spring-boot-actuator模块提供了一个监控和管理生产环境的模块,可以使用http.jmx.ssh.telnet等拉管理和监控应用.审计 ...
- spring boot 集成jsp
刚开始操作的时候,遇到了个问题,在这记录一下.(因为自己是个新手,对maven项目结构不了解) 1.大概创建步骤如下 File-New-Project-Spring Initializr ,type选 ...
- spring boot:redis+lua实现生产环境中可用的秒杀功能(spring boot 2.2.0)
一,秒杀需要具备的功能: 秒杀通常是电商中用到的吸引流量的促销活动方式 搭建秒杀系统,需要具备以下几点: 1,限制每个用户购买的商品数量,(秒杀价格为吸引流量一般会订的很低,不能让一个用户全部抢购到手 ...
- (19)Spring Boot 添加JSP支持【从零开始学Spring Boot】
[来也匆匆,去也匆匆,在此留下您的脚印吧,转发点赞评论: 您的认可是我最大的动力,感谢您的支持] 看完本文章您可能会有些疑问,可以查看之后的一篇博客: 81. Spring Boot集成JSP疑问[从 ...
- 51. spring boot属性文件之多环境配置【从零开始学Spring Boot】
原本这个章节是要介绍<log4j多环境不同日志级别的控制的>但是没有这篇文章做基础的话,学习起来还是有点难度的,所以我们先一起了解下spring boot属性文件之多环境配置,当然文章中也 ...
随机推荐
- 前端常用的库和实用技术之JavaScript高级函数
1.惰性载入函数 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- CSIC_716_20191115【内置函数、递归、模块、软件开发规范】
内置函数 map map映射:语法结构(函数对象,可迭代对象) 依次从可迭代对象中取值,然后给函数做运算,再依次返回运算的结果. ss = map(lambda x: x + x, [1, 2, 3] ...
- IDEA快捷键(收集自网络后整理)
快捷键 说明 CTRL+B 快速打开光标处的类或方法 CTRL+C 拷贝 CTRL+D 复制当前行到下一行 CTRL+E 最近打开的文件 CTRL+F 当前文件查找特定内容 CTRL+G 定位行 CT ...
- Jmeter接口自动化测试:简单使用步骤
好处:不需要页面就可以提前介入测试,实施成本低,修改量少,相对于UI自动化来说更为稳定 1. 下载略过 2. 使用步骤 创建线程组合控制器(Jmeter基本操作) 针对http协议的接口增加Sampl ...
- vuecli脚手架+vue+vuex实现vue驱动的demo。
哎呀呀呀,现在大家都要会Vue || React,否则感觉跟这个前端的世界脱节了一样. start: vue-cli这个构建工具大大降低了webpack的使用难度,支持热更新,有webpack-de ...
- 移动端click点透bug
移动端click点透bug click点透bug有一个特定的产生情况: 当上层元素是tap事件,且tap后消失,下层元素是click事件.这个时候,tap上层元素的时候就会触发下层元素的click事件 ...
- SGLTE/SVLTE、CSFB、SRVCC概念
SGLTE:Simultaneous GSM and LTE,手机可以同时驻留在GSM和LTE网络中,打电话通过GSM网络进行,数据业务通过LTE网络进行. SVLTE:Simultaneous V ...
- CentOS中GDB提示Missing separate debuginfos解决办法
安装debuginfo 修改文件 vi /etc/yum.repo.d/CentOS-Debuginfo.repo 修改enabled的值为1 使用debuginfo-install安装需要的文件
- Vue基础(1)
目录 Vue基础 基础 导入 1. 挂载 2. 插值表达式 3. 事件 4. 创建对象 5. v-text和v-html 6. vue的过滤器 7. 属性指令 Vue基础 基础 首先我们要知道Vue是 ...
- 18-4-bind
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...