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

 

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

       针对文章:

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

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

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

       第二就是:静态资源存放在resourcesstatic下,新建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 

 

31 Spring Boot导入XML配置【从零开始学Spring Boot

 

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

 

 

posted on 2016-08-06 18:43  疯子123  阅读(214)  评论(0编辑  收藏  举报

导航