不知不觉都第十篇了,用了这么久,都是在本机运行,localhost 还是不爽,加上目前 jsp 页面已配置,可以做几个炫一些的页面,挂服务器上试试。那么问题来了,如何打包、部署呢?接下来开始尝试打包,Spirng Boot 默认配置是 jar 包,那首先来尝试一下 jar 包的打包、部署和测试。

在文章开始之前,首先删除配置文件的部分配置,如下:

   <!-- Add Spring repositories --><!-- (you don't need this if you are using a .RELEASE version) --><repositories><repository><id>spring-snapshots</id><url>http://repo.spring.io/snapshot</url><snapshots><enabled>true</enabled></snapshots></repository><repository><id>spring-milestones</id><url>http://repo.spring.io/milestone</url></repository></repositories><pluginRepositories><pluginRepository><id>spring-snapshots</id><url>http://repo.spring.io/snapshot</url></pluginRepository><pluginRepository><id>spring-milestones</id><url>http://repo.spring.io/milestone</url></pluginRepository></pluginRepositories>

注释的意思是:

<! - 添加Spring存储库 - >
<! - (如果您使用的是.RELEASE版本,则不需要此项) - >

官网解释:

If you use a milestone or snapshot release, you also need to add the appropriate pluginRepository elements.

大概意思:如果使用里程碑或快照版本,则还需要添加相应的pluginRepository元素。

所以这里先把这部分配置删除, 因为目前项目用的是 2.0.2.RELEASE 版本。

一、打 jar 包。

如果不做任何的配置,直接打包:选中项目-》右键-》Run as -》4 Maven build -》弹出框 Goals 栏输入 -X package -》点击 Run 按钮,则打包开始。如果出现错误,可以尝试做下面两步操作:

第一步:选中项目-》右键 -》Maven -》Update Project。

第二步:选中项目-》菜单 -》Project -》Clean。

备注:上面 IDE 是英文环境,如果你的是中文,请简单翻译,对照操作。

如果打包成功,可以在 target 目录看到自己期盼已久的 jar 包,如图:

上传到 linux 服务器。可以看到这个包非常小,不到 14k:

运行试下效果,总觉得有点悬:

启动命令:java -jar test-springboot-1.0.jar

查看 jar 包,找到 test-springboot-1.0.jar\META-INF\MANIFEST.MF,内容如下:

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: LangLang
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_172

确实少 main 方法,因为这是 Spring Boot 启动的入口,看来打包有问题,缺配置。

修改 pom.xml 配置文件:

   <build><plugins><!-- 这是Spring Boot Devtools Plugin的配置 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><!-- 如果没有fork配置,可能devtools不会起作用,即不会restart --><fork>true</fork><mainClass>com.menglanglang.test.springboot.App</mainClass></configuration><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build>

继续打包,打包后可以再看看 test-springboot-1.0.jar\META-INF\MANIFEST.MF 文件的内容:

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: LangLang
Start-Class: com.menglanglang.test.springboot.App
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Spring-Boot-Version: 2.0.3.RELEASE
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_172
Main-Class: org.springframework.boot.loader.JarLauncher

内容明显比之前多很多,而且有了 Start-Class 等信息,而且 jar 包的大小也变为近 20M。

上传服务器,再次运行测试,结果如下:

看来打包部署算是成功了。

二、测试

打开浏览器,访问下前几篇测试的链接,看看结果是否一致。

访问:http://192.168.220.254:8080/cfg/outStr1

访问:http://192.168.220.254:8080/cfg/outStr4

访问:http://192.168.220.254:8080/jsp/testJspPage

打开 jar 包后发现,jar 包中并没有打入 jsp 页面部分,所以继续修改 pom.xml 配置,如下:

   <build><plugins><!-- 这是Spring Boot Devtools Plugin的配置 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><!-- 如果没有fork配置,可能devtools不会起作用,即不会restart --><fork>true</fork><mainClass>com.menglanglang.test.springboot.App</mainClass></configuration><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins><resources><resource><directory>${basedir}/src/main/webapp</directory><targetPath>META-INF/resources</targetPath><includes><include>**/**</include></includes></resource><resource><directory>src/main/resources</directory><filtering>false</filtering><includes><include>**/**</include></includes></resource><resource><directory>src/main/webapp</directory><filtering>false</filtering><includes><include>**/**</include></includes></resource></resources></build>

打包,部署,测试,发现还是不能访问页面。查其原因,官网说法:

JSP limitations

When running a Spring Boot application that uses an embedded servlet container (and is packaged as an executable archive), there are some limitations in the JSP support.

  • With Jetty and Tomcat it should work if you use war packaging. An executable war will work when launched with java -jar, and will also be deployable to any standard container. JSPs are not supported when using an executable jar.
  • Undertow does not support JSPs.
  • Creating a custom error.jsp page won’t override the default view forerror handling,custom error pagesshould be used instead.

大概意思:

JSP 限制

当运行使用嵌入 servlet 容器的 Spring Boot 应用程序(并打包为可执行包)时,JSP 支持存在一些限制。

  • 使用 Jetty 和 Tomcat,如果使用 war 包,它应该可以工作。使用 java -jar 启动时,可执行的 war 也将起作用,并且还可以部署到任何标准容器。 使用可执行 jar 包时不支持 JSP。
  • Undertow不支持JSP。
  • 创建自定义 error.jsp 页面不会覆盖错误处理的默认视图,而应使用自定义错误页面。

看来是 Jar 包不能很好的支持访问 jsp 页面导致。

是不是打包的插件有问题,如果不设置版本,应该是最新版本,也就是 2.0.2,指定一个老版本再试试,比如 1.4.0。修改配置后如下:

   <build><plugins><!-- 这是Spring Boot Devtools Plugin的配置 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>1.4.0.RELEASE</version><configuration><!-- 如果没有fork配置,可能devtools不会起作用,即不会restart --><!-- 。。。此处省略n行 --></build>

再次部署测试,居然能看到 jsp 页面内容,只是加载特别慢,如图:

但在 1.4.0 的官方文档中,也有 JSP limitations 部分说明。

顺便,又试了下 1.5.x 系列的版本,结果和 2.0.x 一样,所打包的 jar 都是不能访问 jsp 页面的,其它版本大家可以自行尝试。

猜测,Spring Boot 刚开始也是想支持 jsp 的,可能由于支持不是很好,所以在后续版本中,逐渐取消了 jsp 的支持。

Spring Boot 初级入门教程(十) —— 打完整 jar 包、部署和测试相关推荐

  1. jdbctemplate mysql 配置_Spring Boot 初级入门教程(十四) —— 配置 MySQL 数据库和使用 JdbcTemplate 测试...

    经过前面几篇文章,包已经可以打了,不管是 jar 包还是 war 包都已测试通过,jsp 页面也可以访问了,但页面上的数据都是在配置文件中写死的,不爽 ~ 到目前为止,最重要的配置还没做,那就是连数据 ...

  2. spring boot 瘦身打包排除其他依赖jar包

    一个普通的spring boot项目差不多就要50M左右的大小,随着项目的进行,代码包大小才1M以内,对于我们开发人员来说是一种极大的痛苦,查找了一下网上的资源, 在<excludeGroupI ...

  3. Spring Boot项目源码启动正常,打成jar包后启动报错找不到主类

    java -jar .\target\demo-0.0.1-SNAPSHOT.jar personal-demo-0.0.1-SNAPSHOT.jar中没有主清单属性 网上翻了,大多都是说在pom.x ...

  4. Vue + Spring Boot 项目实战(十五):动态加载后台菜单

    重要链接: 「系列文章目录」 「项目源码(GitHub)」 本篇目录 前言 一.后端实现 1.表设计 2.pojo 3.菜单查询接口(树结构查询) 二.前端实现 1.后台页面设计 2.数据处理 3.添 ...

  5. Spring Boot从入门到精通(超详细)

    Spring Boot从入门到精通(超详细) _kayden_ 2020-07-20 15:19:22 9491 正在上传-重新上传取消​ 收藏 184 分类专栏: springboot 文章标签:  ...

  6. Spring Boot WebFlux 上手教程

    Spring Boot WebFlux 上手教程 背景 大家都知道,Spring Framework 是 Java/Spring 应用程序跨平台开发框架,也是 Java EE(Java Enterpr ...

  7. 芋道 Spring Boot 快速入门

    点击上方"芋道源码",选择"设为星标" 做积极的人,而不是积极废人! 源码精品专栏 原创 | Java 2019 超神之路,很肝~ 中文详细注释的开源项目 RP ...

  8. Spring Boot 操作 Redis教程

    Spring Boot 操作 Redis教程 在 Redis 出现之前,我们的缓存框架各种各样,有了 Redis ,缓存方案基本上都统一了 使用 Java 操作 Redis 的方案很多,Jedis 是 ...

  9. 视频教程-Spring boot快速入门-Java

    Spring boot快速入门 十年项目开发经验,主要从事java相关的开发,熟悉各种mvc开发框架. 王振伟 ¥12.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 ...

最新文章

  1. 谣言止于智者:基于深度强化学习的谣言早期检测模型
  2. workerman mmo_2020了,我们为什么还在做MMO端游
  3. 【windows】安装pytorch1.7.1-cpu版本的geometric过程记录
  4. Flask == scoped_session
  5. 小白也能看懂——使用dev-c++建立工程(多个文件一同编译连接)并运行
  6. MySQL必知必会(使用子查询)
  7. 漫画:高并发下的HashMap
  8. Java面试知识点:红黑树、Stream流
  9. 安装GIT,集成到Powershell中
  10. DoraHacks的笔记
  11. webview 加载时闪烁黑一下_Web端页面加载卡顿缓慢问题解决方法分享
  12. 最简单又最复杂的单例模式
  13. cr3格式是什么意思_如何用PS导入佳能CR3格式图片?
  14. cnpm下载依赖包速度快的原理探究
  15. 新能源专属车险可在线投保 80%车主基准保费下降
  16. python数列求和_python练习--数列求和
  17. html规范eml文件,eml文件【操作办法】
  18. illegal offset type php,PHP warning Illegal offset type错误解决办法
  19. android第三方浏览器存在泄露用户隐私漏洞
  20. Tunnello安装指南

热门文章

  1. 【Matplotlib】python绘图,同时沿x、y、z轴方向渐变颜色(按多轴渐变色)
  2. foxmail收件服务器用户名,谁用Foxmail邮箱呀 我在iPhone添加邮箱 有谁知道收件服务器怎么填...
  3. Spark RDD与DataFrame相互转换
  4. python 利用Unicode编码获得十二星座符号
  5. vue elmenetui admin表格筛选列(动态显示)
  6. IN286 ADC采样电路的模拟仿真(Tina软件)
  7. 手机投屏电视android限制声音,乐播投屏电视没有声音怎么办_乐播投屏电视没有声音手机有声音解决办法_3DM手游...
  8. 【业务理解】数据指标
  9. 手机打开游戏显示无法连接服务器,玩手机游戏提示无法连接服务器
  10. 公共DNS服务器整理