81. Spring Boot集成JSP疑问【从零开始学Spring Boot】
【原创文章,转载请注明出处】
针对文章:
()Spring Boot 添加JSP支持【从零开始学Spring Boot】
有网友提了这么一些疑问:
1、Spring Boot使用jsp时,仍旧可以打成jar包的形式吗?
2、Spring Boot使用jsp时,比如说css,image,js 等三种静态资源文件,应该放在什么目录下?这些静态资源映射,在spring boot中具体应该怎么做?
例如,下面是spring中做的静态资源映射,但是在spring boot中不知道怎么处理:
<!-- springmvc.xml 资源映射 -->
<mvc:resources location="/WEB-INF/css/" mapping="/css/**"/>
<mvc:resources location="/WEB-INF/js/" mapping="/js/**"/>
<mvc:resources location="/WEB-INF/image/" mapping="/image/**"/>
3、下面这个tomcat的包必须导入吗,spring-boot-starter-web中不是有一个内嵌的tomcat吗?
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<1>、针对第一个问题,答案是不可以的。
我们先看一段英文描述,如下:
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 Tomcat it should work if you use war packaging, i.e. an executable war will work, and will also be deployable to a standard container (not limited to, but including Tomcat). An executable jar will not work because of a hard coded file pattern in Tomcat.
- Jetty does not currently work as an embedded container with JSPs.
- Undertow does not support JSPs.
原文的大体意思就是:Tomcat支持war的打包方式,spring boot支持war打包方式。Jetty现在不支持JSP嵌入容器。Undertow根本就不支持JSP。
所以答案就是打包成war,jsp会自然按照servlet的标准部署。但也就意味着你不可以用嵌入式的方式运行,而是Tomcat Server + war的部署方式。
看到这里有些网友肯定会有疑问那什么是嵌入式的web服务器?我们这边就拿jetty来说明下。
Jetty 可以非常容易的嵌入到应用程序当中而不需要程序为了使用 Jetty 做修改。
从某种程度上,你也可以把 Jetty 理解为一个嵌入式的Web服务器。所以我们经常会说嵌入式jetty。
Jetty有一个口号:不要把你的应用部署到Jetty中,把Jetty部署到你的应用中。Jetty可以在Java应用程序中向其他POJO一样被实例化,换句话说,以嵌入式的模式运行Jetty是指将Http模块放入你的应用程序中,而非部署你的程序到一个HTTP服务器。这就是所谓的嵌入式jetty。
另外在说明一点就是JSP解析是需要JSP引擎处理的,tomcat就提供了JSP处理引擎。所以很显然JSP是依赖容器而存在的,不然就没法访问了。那么既然是依赖于tomcat的话。好了第一个问题就解说到这里,不知道是否对你有帮助?留言评论!
出了这篇文章之后,有一网友找到一支持打成jar包运行的插件:
Using Spring Boot with JSPs in Executable Jars
https://github.com/ghillert/spring-boot-jsp-demo
经过java -jar xxx.jar运行后,可以正常访问网页。(博主没有具体的尝试)
这也可以说明原本是不支持的,但是如果非要支持的话,那么需要进行使用插件进行支持。
<2>针对第二个问题
对于第二个问题,如果看过之前的文章就很好解决了,只需要在src/main/resouces下新建一个static目录,然后在static下新建子目录:css,images,js目录,在images放入一张test.jpg图片,那么访问路径是:http://127.0.0.1:8080/images/test.jpg
当前目录结构应该是这样子的:
(1)--src/java/resources
(2)-- static
(3)-- css
(3)-- images
(3)-- js
那么有人会有疑问这个,打包的时候能打上嘛,答案是可以的,请看实际打包解压图:
更多说明看:()处理静态资源(默认资源映射)【从零开始学Spring Boot】
<3>第三个问题
是的,Spring Boot内嵌了Tomcat,那么以下的配置是必须的嘛:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
如果没有这个配置的话,那么打包出来会包含tomcat的jar包,整个war文件都会变大,第二就是如果版本是一样的,比如我这里是8.0的,那么是不会报错的,如果是7.0的tomcat的话,那么就启动报错了。有另外一种配置方式如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
当然具体的,这个可以看:http://www.it610.com/article/3598864.htm 有一定的参考价值。
以上7.0,8.0是我自己尝试了才发表的言论。
结束语
出去打了2小时的羽毛球,1个小时的游泳,实在是爽。
好吧,这里我们还是必要总结下,上面说了那么多,其实就是两三句就可以概括了。
第一就是:Spring Boot使用jsp的话,是不可以打包成jar包的,需要打包成war成文件。
第二就是:静态资源存放在resources的static下,新建images,js,css目录即可,当然出了static还可以是resources下创建resources文件存放资源,还有就是public。具体看我的第13篇博客文章。
第三就是:spring-boot-starter-tomcat是必须添加的嘛,我只能说在我的这个demo中我的这个是必须添加的,不然第一占导出包大小,其次就是可能tomcat jar包会冲突,导致无法启动程序。另外要说明的就是还有别的方式使用tomcat的方式,大家可以参考别的文章进行学习。另外这是原创文章,大家有什么自己的疑问都可以给我留言,各抒己见。好了,那本章就到此为此吧。拜拜!
【Spring Boot 系列博客】
76. Spring Boot完美解决(406)Could not find acceptable representation原因及解决方法
75. Spring Boot 定制URL匹配规则【从零开始学Spring Boot】
71.mybatis 如何获取插入的id【从零开始学Spring Boot】
67. @Transactional的类注入失败【从零开始学Spring Boot】
63.JPA/Hibernate/Spring Data概念【从零开始学Spring Boot】
61. mybatic insert异常:BindingException: Parameter 'name' not found【从零开始学Spring B】
60. Spring Boot写后感【从零开始学Spring Boot】
59. Spring Boot Validator校验【从零开始学Spring Boot】
58. Spring Boot国际化(i18n)【从零开始学Spring Boot】
57. Spring 自定义properties升级篇【从零开始学Spring Boot】
56. spring boot中使用@Async实现异步调用【从零开始学Spring Boot】
55. spring boot 服务配置和部署【从零开始学Spring Boot】
54. spring boot日志升级篇—logback【从零开始学Spring Boot】
52. spring boot日志升级篇—log4j多环境不同日志级别的控制【从零开始学Spring Boot】
51. spring boot属性文件之多环境配置【从零开始学Spring Boot】
50. Spring Boot日志升级篇—log4j【从零开始学Spring Boot】
49. spring boot日志升级篇—理论【从零开始学Spring Boot】
48. spring boot单元测试restfull API【从零开始学Spring Boot】
47. Spring Boot发送邮件【从零开始学Spring Boot】
46. Spring Boot中使用AOP统一处理Web请求日志
45. Spring Boot MyBatis连接Mysql数据库【从零开始学Spring Boot】
44. Spring Boot日志记录SLF4J【从零开始学Spring Boot】
43. Spring Boot动态数据源(多数据源自动切换)【从零开始学Spring Boot】
42. Spring Boot多数据源【从零开始学Spring Boot】
41. Spring Boot 使用Java代码创建Bean并注册到Spring中【从零开始学Spring Boot】
40. springboot + devtools(热部署)【从零开始学Spring Boot】
39.4 Spring Boot Shiro权限管理【从零开始学Spring Boot】
39.3 Spring Boot Shiro权限管理【从零开始学Spring Boot】
39.2. Spring Boot Shiro权限管理【从零开始学Spring Boot】
39.1 Spring Boot Shiro权限管理【从零开始学Spring Boot】
38 Spring Boot分布式Session状态保存Redis【从零开始学Spring Boot】
37 Spring Boot集成EHCache实现缓存机制【从零开始学Spring Boot】
36 Spring Boot Cache理论篇【从零开始学Spring Boot】
35 Spring Boot集成Redis实现缓存机制【从零开始学Spring Boot】
34Spring Boot的启动器Starter详解【从零开始学Spring Boot】
33 Spring Boot 监控和管理生产环境【从零开始学Spring Boot】
32 Spring Boot使用@SpringBootApplication注解【从零开始学Spring Boot】
81. Spring Boot集成JSP疑问【从零开始学Spring Boot】的更多相关文章
- 84. Spring Boot集成MongoDB【从零开始学Spring Boot】
至于MongoDB网上有很多相关的资料,所以在这里不进行过多的介绍,我们在这里主要是介绍下如何将mongodb与spring boot结合使用.本节大纲: (1) 准备工作: (2) 新建一个mave ...
- 86. Spring Boot集成ActiveMQ【从零开始学Spring Boot】
在Spring Boot中集成ActiveMQ相对还是比较简单的,都不需要安装什么服务,默认使用内存的activeMQ,当然配合ActiveMQ Server会更好.在这里我们简单介绍怎么使用,本节主 ...
- 85. Spring Boot集成RabbitMQ【从零开始学Spring Boot】
这一节我们介绍下Spring Boot整合RabbitMQ,对于RabbitMQ这里不过多的介绍,大家可以参考网络上的资源进行安装配置,本节重点是告诉大家如何在Spring Boot中使用Rabbit ...
- 59. Spring Boot Validator校验【从零开始学Spring Boot】
大纲: (1) 入门例子: (2) 国际化: (3) 在代码中添加错误信息: (1) 入门例子: Validator主要是校验用户提交的数据的合理性的,比如是否为空了,密码长度是否大于6位,是否是纯数 ...
- 72.spring boot讨论群【从零开始学Spring Boot】
[从零开始学习Spirng Boot-常见异常汇总] 如果您碰到什么问题,您可以加群进行探讨,在群里有加入的都是Spring Boot志同道合的朋友: Spring Boot QQ交流群:193341 ...
- (6)Spring Boot datasource - mysql【从零开始学Spring Boot】
在任何一个平台都逃离不了数据库的操作,那么在spring boot中怎么接入数据库呢? 很简单,我们需要在application.properties进行配置一下,application.proper ...
- (3)Spring Boot热部署【从零开始学Spring Boot】
在编写代码的时候,你会发现我们只是简单把打印信息改变了下,就需要重新部署,如果是这样的编码方式,那么我们估计一天下来之后就真的是打几个Hello World之后就下班了.那么如何解决热部署的问题呢?那 ...
- (42)Spring Boot多数据源【从零开始学Spring Boot】
我们在开发过程中可能需要用到多个数据源,我们有一个项目(MySQL)就是和别的项目(SQL Server)混合使用了.其中SQL Server是别的公司开发的,有些基本数据需要从他们平台进行调取,那么 ...
- (27)Spring Boot Junit单元测试【从零开始学Spring Boot】
Junit这种老技术,现在又拿出来说,不为别的,某种程度上来说,更是为了要说明它在项目中的重要性. 那么先简单说一下为什么要写测试用例 1. 可以避免测试点的遗漏,为了更好的进行测试,可以提高测试效率 ...
随机推荐
- 分区表,磁盘概念和parted的使用
分区表,磁盘概念和parted的使用 登录陌生系统首先要做的事: 个人认为,首先得知道Linux版本的什么:cat /etc/issue df:查看磁盘的分区和数据的分配情况,类型(NFS,ext4. ...
- innobackupex的使用
优点: 不暂停服务器创建Innodb热备份 为mysql做增量的备份 在mysql服务器之间做在线表迁移 使创建mysql replication更加容易 备份mysql但不增加服务器的负载 安装:x ...
- 使用Appache部署WEB服务器
Apache的起源(这个就不说了,百度下就都有了) 简介:Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行, ...
- select选择框中,model传的值并非是页面上的值,而是另一个值
对于编程来说,money和rebate代表的是金额优惠和折扣优惠,采用money或rebate便于数据存储.但是页面显示给用户的时候是金额优惠和折扣优惠,并不是显示编程中所存储数据.所以选择的mode ...
- H+后台主题UI框架---整理(二)
本篇文章是针对H+后台主题UI框架的整理的第二部分.主要只有一个point.如下: 其代码如下: <div class="ibox float-e-margins"> ...
- 【经验总结】关于使用某些第三方插件库元素设置display:none后重新show不显示的问题;(display、opacity、宽高0的使用场景)
display:none 直接取消元素所占用的位置(但是元素还是存在的),后面元素看他就相当于不存在了: opacity:0 隐藏,但是其依旧占用位置: height.width:0 和displa ...
- 如何创建你的第一个手机APP?
本文使用helloworld来作为android的入门项目,通过这个最简单的项目来帮助大家了解android程序开发包含哪些部分,以及如何运行android程序,本次开发android程序的工具是ec ...
- Win10 系统安装Sql Server2008 R2 数据库遇到的问题及解决办法总结!
1.开始安装时,提示要先安装 “.NET Framework 3.5(包括.NET 2.0和3.0)”,之前已经下载好.NET Framework 3.5 sp1,安装时还是提示要先安装 “.NET ...
- SQL Server数据库锁机制及类型
原文地址:http://blog.csdn.net/zp752963831/article/details/3906477
- 我所理解的MVVM
将UI中的数据适配.交互处理: controller中与UI密切相关的功能: 剥离出来,形成单独的模块: 以增加UI和Controller的灵活性.