java web项目的两种上下文构建方式

1.前言

  前段时间在做开发需求时,遇到了一个我比较诧异的问题,即tomcat部署应用时,并没有配置web.xml上下文。这让我十分疑惑,之后辗转查询资料,才知道原来servlet3.0提供了一种基于注解的启动方式,它与web.xml方式是可替代的。所以今天在查询了吉奥多的资料后,结合自己的理解,做一个简单的总结,一方面方便自己日后回忆,另一方面也希望能帮助到有需要的朋友。

2.tomcat服务器容器的启动流程

   这里以tomcat服务器容器为例,原因是它支持jsp动态语言。不敢保证其它的静态服务器具有类似的流程,如nginx,apach server,但是理论方面肯定有一些相似之处。

   虽然我很早以前就看过相关的资料,也整理过一些笔记。但是如今再看,依然惘若初见,说来惭愧。。。具体的我就不班门弄斧了,现在在我所看的资料中,我比较推荐的有这篇:

    TOMCAT原理详解及请求过程    ------排版是稍微有些乱,但是内容是实打实的干货。

    同时可以结合其它朋友的博文资料,加深理解。

    这里的话,我也想来简单的理解一下,方便自己回顾: 

    何谓tomcat服务器容器?

          1.首先,它是一个java进程,依托jvm宿主环境。那么自然,与其相关的概念就有诸如: 类加载器啦,java源码啦,字节码啦,main启动程序等等。这一块可以从 tomcat的bin目录下的startup.sh里面的命令来思考;

          2.其次,tomcat定义为servlet容器,可以理解为它是为了满足servlet规范,或者说它的出现助推了servelt规范的出现(我没有查询资料,不保证这句话的正确性)。总而言之,tomcat容器与servlet规范是强耦合的

          3.servlet规范中,包含了一些常用概念,如Filter,Servlet,Listener。tomcat提供了一些组件,实现了这个servlet规范

3.基于web.xml的启动方式

     web.xml是tomcat容器组织上下文的一种方式。

     在一个tomcat容器中,包含了多个层次的web.xml配置。我没记错的话应该是有三个层级的配置,分别是: 全局的web.xml配置,context的web.xml配置,应用的web.xm配置,它们存在覆盖关系。默认是应用的配置优先级最高,全局的最低。

     如果曾经配置过web.xml文件,我们应该知道需要配置servlet,filter,listener用于实现自定义的上下文内容。各自的作用可以参考网上的资料,它也是比较常规的方式,理解方面应该比较好接受。这里便不过多纠结。

4.基于spi的上下文启动方式

4.1 servlet3.0规范

    servlet3.0规范中,提供了一些列的注解,用于替代手动输入配置文件的方式构建上下文。比如:@WebServlet,@WebFilter,@WebListener等,具体可以参看这篇博文:

                Servlet3.0的新特性

4.2 注解启动的前提

   1.上面的参考博文有说到: tomcat需要7.0以上; 我猜测原因是因为tomcat7.0及以上启动流程有ServiceLoader的服务发现流程;

   2.jdk需要6.0及以上,因此,tomcat7.0应该最低兼容jdk6.0。  原因是 spi机制是jdk6.0提供的,如图:

   需要强调的是,SPI机制是JDK提供的功能,而非tomcat提供,也非servlet规范所提供

  关于spi机制推荐这几篇博文:

        高级开发必须理解的Java中SPI机制

       springMVC之利用Servlet3.0的SPI机制实现零配置原理

5.内置tomcat的启动流程

   在探索这个问题时,我也有衍生这个问题,即springBoot的内容tomcat如何能够与springBoot平滑的结合,在今后的编程实践中,我能否将原本需要外部tomcat容器的项目改造为springBoot的tomcat内置容器启动。比如开源的cas-overlay-web项目。

  在搜索资料的过程中,推荐这篇写内置tomcat启动流程的文章:

          SpringBoot内置tomcat启动原理

  我的大体印象是,不论是外部的tomcat容器启动,还是内容的tomcat容器启动,它们二者的结合点在于,为tomcat设置上下文的过程,比如设置servlet,过滤器,监听器等等。

  至于启动的流程,关闭的流程,则是各自线程负责,从这个意义上讲,内置与外置倒并无什么差别。

  所以,如果以后有机会了,应该可以从这个角度入手去分析处理,看看能否有所突破。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值