81. Spring Boot集成JSP疑问【从零开始学Spring Boot】

 

 

【视频 & 交流平台】

à SpringBoot视频

http://study.163.com/course/introduction.htm?courseId=1004329008&utm_campaign=commission&utm_source=400000000155061&utm_medium=share

à SpringCloud视频

http://study.163.com/course/introduction.htm?courseId=1004638001&utm_campaign=commission&utm_source=400000000155061&utm_medium=share

à Spring Boot源码

https://gitee.com/happyangellxq520/spring-boot

à Spring Boot交流平台

http://412887952-qq-com.iteye.com/blog/2321532

 

【原创文章,转载请注明出处】

       针对文章:

19Spring Boot JSP支持【从零开始学Spring Boot 

       有网友提了这么一些疑问:

 

 

1Spring Boot使用jsp时,仍旧可以打成jar包的形式吗?

2Spring Boot使用jsp时,比如说cssimagejs 等三种静态资源文件,应该放在什么目录下?这些静态资源映射,在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

       所以答案就是打包成warjsp会自然按照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

       那么有人会有疑问这个,打包的时候能打上嘛,答案是可以的,请看实际打包解压图:



 

更多说明看:13)处理静态资源(默认资源映射)【从零开始学Spring Boot 

 

 

<3>第三个问题

       是的,Spring Boot内嵌了Tomcat,那么以下的配置是必须的嘛:

     <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-tomcat</artifactId>
           <scope>provided</scope>
       </dependency>

 

       如果没有这个配置的话,那么打包出来会包含tomcatjar包,整个war文件都会变大,第二就是如果版本是一样的,比如我这里是8.0的,那么是不会报错的,如果是7.0tomcat的话,那么就启动报错了。有另外一种配置方式如下:

       <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个小时的游泳,实在是爽。

       好吧,这里我们还是必要总结下,上面说了那么多,其实就是两三句就可以概括了。

      (a) 第一就是:Spring Boot使用jsp的话,是不可以打包成jar包的,需要打包成war成文件。

       (b)第二就是:静态资源存放在resourcesstatic下,新建images,js,css目录即可,当然出了static还可以是resources下创建resources文件存放资源,还有就是public。具体看我的第13篇博客文章。

       (c)第三就是:spring-boot-starter-tomcat是必须添加的嘛,我只能说在我的这个demo中我的这个是必须添加的,不然第一占导出包大小,其次就是可能tomcat jar包会冲突,导致无法启动程序。另外要说明的就是还有别的方式使用tomcat的方式,大家可以参考别的文章进行学习。另外这是原创文章,大家有什么自己的疑问都可以给我留言,各抒己见。好了,那本章就到此为此吧。拜拜!

 

   

Spring Boot 系列博客】

视频&交流平台

à Spring Boot网易云课堂视频

http://study.163.com/course/introduction.htm?courseId=1004329008

à Spring Boot交流平台

http://412887952-qq-com.iteye.com/blog/2321532

 

网易云课堂视频最新更新

第十一章 Spring Boot 日志

1、spring boot日志—理论

2、Spring Boot日志-logback

3、Spring Boot日志-log4j2

第十二章 Spring Boot 知识点2

1、spring boot 服务配置和部署

2、Spring Boot 定制URL匹配规则

 

 

历史章节

 

第一章 快速开始

1、Spring Boot之Hello World

2、Spring Boot之Hello World访问404

 

第二章 Spring Boot之JSON

1、spring boot返回json数据

2、Spring Boot完美使用FastJson解析JSON数据

 

第三章 Spring Boot热部署

1、Spring Boot热部署(springloader)

2、springboot + devtools(热部署)

 

第四章 Spring Boot数据库

1、Spring Boot JPA/Hibernate/Spring Data概念

2、Spring Boot JPA-Hibernate

3、Spring Boot Spring Data JPA介绍

4、Spring Boot JdbcTemplate

5、Spring Boot集成MyBatis

 

第五章 web开发

1、全局异常捕捉

2、配置server信息

3、spring boot使用thymeleaf

4、Spring Boot 使用freemarker

5、Spring Boot添加JSP支持

 

第六章 定时任务

1、Spring Boot定时任务

2、Spring Boot 定时任务升级篇(动态修改cron参数)

3、Spring Boot 定时任务升级篇(动态添加修改删除定时任务)

4、Spring Boot 定时任务升级篇(集群/分布式下的定时任务说明)

5、Spring Boot Quartz介绍

6、Spring Boot Quartz在Java Project中使用

7、Spring Boot 集成Quartz普通使用

8、Spring Boot 集成Quartz升级版

9、Spring Boot 集成Quartz二次升级版

10、Spring Boot 集成Quartz-Job如何自动注入Spring容器托管的对象

 

第七章 Spring Boot MyBatis升级篇

1、Spring Boot MyBatis升级篇-注解

2、Spring Boot MyBatis升级篇-注解-自增ID

3、Spring Boot MyBatis升级篇-注解-增删改查

4、Spring Boot MyBatis升级篇-注解-分页查询

5、Spring Boot MyBatis升级篇-注解-分页PageHelper不生效

6、Spring Boot MyBatis升级篇-注解- mybatic insert异常:BindingException: Parameter 'name' not found

7、Spring Boot MyBatis升级篇-注解- #和$符号特别篇

8、Spring Boot MyBatis升级篇-注解-@Result

9、Spring Boot MyBatis升级篇-注解-动态SQL(if test)-方案一:<script>

10、Spring Boot MyBatis升级篇-注解-动态SQL(if test)-方案二:@Provider

11、Spring Boot MyBatis升级篇-注解-动态SQL-参数问题

12、Spring Boot MyBatis升级篇-注解-特别篇:@MapperScan和@Mapper

13、Spring Boot MyBatis升级篇-XML

14、Spring Boot MyBatis升级篇-XML-自增ID

15、Spring Boot MyBatis升级篇-XML-增删改查

16、Spring Boot MyBatis升级篇-XML-分页查询

17、Spring Boot MyBatis升级篇-XML-分页PageHelper不生效

18、Spring Boot MyBatis升级篇-XML-动态SQL(if test)

19、Spring Boot MyBatis升级篇-XML-注解-初尝试

20、Spring Boot MyBatis升级篇- pagehelper替换为pagehelper-spring-boot-starter

 

第八章 Spring Boot 知识点1

1、Spring Boot 拦截器HandlerInterceptor

2、Spring Boot启动加载数据CommandLineRunner

3、Spring Boot环境变量读取和属性对象的绑定

4、Spring Boot使用自定义的properties

5、Spring Boot使用自定义的properties

6、Spring Boot使用@SpringBootApplication

7、Spring Boot 监控和管理生产环境

 

第十章 Spring Boot 打包部署

1、Spring Boot打包部署((提供Linux的sh文件))

 

第十一章 Spring Boot 日志

1、spring boot日志—理论

2、Spring Boot日志-logback

 

3、Spring Boot日志-log4j2

 

 更多查看博客: http://412887952-qq-com.iteye.com/

 

猜你喜欢

转载自412887952-qq-com.iteye.com/blog/2315957