成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

【聊透SpringMVC】SpringMVC“傳統(tǒng)”方式的啟動過程

開源
和SpringBoot連用且采用內(nèi)嵌Web服務(wù)器并打成jar包直接運行的,可以認為是SpringMVC現(xiàn)代的啟動方式。

 [[319179]]

打成war包并放入Tomcat等Servlet容器下面運行的,都認為是SpringMVC傳統(tǒng)的啟動方式。

和SpringBoot連用且采用內(nèi)嵌Web服務(wù)器并打成jar包直接運行的,可以認為是SpringMVC現(xiàn)代的啟動方式。

傳統(tǒng)的啟動過程

基于web.xml(配置文件)的方式啟動肯定算傳統(tǒng)的,但由于現(xiàn)在web.xml幾乎已經(jīng)絕跡,所以就不考慮它了。

與之相對的就是基于編程(寫代碼)的方式啟動,流行于前幾年的SSM(Spring、SpringMVC、MyBatis)中。當然也算傳統(tǒng)的。

在上一篇中講到,通過一個“小橋式”的接口ServletContainerInitializer(Servlet容器初始化器)把Tomcat的啟動和初始化進程帶到了SpringMVC里。

在這個“橋式”接口上可以指定“感興趣”的類或接口,SpringMVC指定的是WebApplicationInitializer(Web應(yīng)用初始化器)接口,意圖已經(jīng)很明顯,就是通過這個初始化器接口來完成SpringMVC應(yīng)用的啟動和初始化。

我們先來看下這個初始化接口,如下圖01:

 

 

 

 

它只有一個onStartup方法,方法只有一個參數(shù)就是ServletContext,這個ServletContext由Tomcat創(chuàng)建好后提供給SpringMVC,SpringMVC在啟動過程中調(diào)用這個onStartup方法,在這個方法內(nèi)完成自身的創(chuàng)建和初始化,還要把Servlet和Filter等注冊到ServletContext里。

這些工作都是SpringMVC要做的,而不是我們要做的,所以SpringMVC肯定已經(jīng)實現(xiàn)了這個接口,我們查看下類型信息,如下圖02:

 

 

 

 

我們發(fā)現(xiàn)了一個看著很重要的類,就是:

AbstractAnnotationConfigDispatcherServletInitializer

可惜這個類是抽象的,肯定是不能直接用的,但是它里面已經(jīng)包含了剛剛上面提到的所有完整的啟動邏輯過程。

如果你對SSM很熟悉或Spring的官方文檔看的很熟悉的話,你一定知道這個類是怎么用的。是的,我們需要定義一個類來繼承它即可。

先看下官方文檔上給的用法,如下圖03:

 

 

 

 

繼承之后,我們需要提供三方面信息,一個是用于注冊到根容器中的類,一個是用于注冊到Servlet容器中的類,一個是核心Servlet的映射URL。

注意,這里說的容器指的是Spring的ApplicationContext這個容器,其中根容器和Servlet容器是父子關(guān)系,且在SpringMVC中核心Servlet映射的URL必須是“/”。

下面給出一個我在幾年前為公司搭建框架時的代碼,如下圖04:

 

 

 

 

這就是以編程的方式來完成SpringMVC的啟動。我們自己定義的這個類就是前文提到的“感興趣”的類。

這個類是不用(或不能)向Spring容器注冊的,因為這個類是感興趣的類,所以Tomcat會從jar包里把它找出來,這樣SpringMVC就拿到了我們定義的這個類。

其實最主要的是這時候根本還沒有Spring容器呢,哈哈,因為Spring容器就是在這個類里才創(chuàng)建出來的,有點意思吧。

其實這個類里包含的內(nèi)容非常多,我們都可以使用寫代碼的方式來進行配置。下面舉幾個示例。

比如對核心Servlet的一些定制化設(shè)置,如下圖05:

 

 

 

 

比如可以加進去一些自己需要的過濾器,如下圖06:

 

 

 

 

比如可以對文件上傳進行一些配置,如下圖07:

 

 

 

 

當然,還可以介入到Spring容器的初始化過程中,進行一些額外的操作,如激活特定的Profile等,如下圖08:

 

 

 

 

啟動過程中做的事情

其實前面已經(jīng)說了一些了,這里再來個完整版的,主要包括的事情有:

1、創(chuàng)建根容器。

2、然后把根容器放入ServletContext中。

3、接著創(chuàng)建Servlet容器。

4、然后使用Servlet容器去創(chuàng)建核心Servlet。

5、接著把核心Servlet注冊到ServletContext中。

6、接著再注冊一些過濾器。

下面我們使用幾張圖把這些內(nèi)容一個個展示一下,需要詳細了解的可以去看看對應(yīng)的源碼。

創(chuàng)建根容器,可以看到是基于注解的容器類,如下圖09:

 

 

 

 

將根容器放入ServletContext中,因為ServletContext在應(yīng)用運行期間一直存在,所以根容器是一個全局性的,也一直存在,如下圖10:

 

 

 

 

創(chuàng)建Servlet容器,容器類也是基于注解的,和根容器類是一樣的,如下圖11:

 

 

 

 

使用Servlet容器去創(chuàng)建核心Servlet,如下圖12:

 

 

 

 

把核心Servlet注冊到ServletContext中,如下圖13:

 

 

 

 

最后就是注冊一些過濾器了,如下圖14:

 

 

 

 

號主提示:建議做Java開發(fā)且渴望優(yōu)秀的朋友一定要把這些東西搞清楚。

責任編輯:武曉燕 來源: 編程新說
相關(guān)推薦

2011-07-28 10:34:38

Cocoa 程序 啟動

2014-06-23 10:31:09

Android啟動過程

2011-09-05 17:35:18

MTK啟動過程RTOS

2021-07-02 06:34:53

Go語言sysmon

2011-06-28 13:27:13

ARM Linux

2009-12-03 10:00:46

Linux系統(tǒng)啟動

2010-07-05 17:38:39

IIS 7.0 FTP

2018-10-25 16:20:23

JavaSpring AOPSpringMVC

2012-02-20 14:47:08

JavaPlay

2012-08-16 09:07:57

Erlang

2018-03-13 13:00:03

Linux運維啟動分析

2009-12-30 10:49:26

MPLS VPN

2024-09-11 09:25:03

Tomcat組件PREP

2010-05-06 14:05:15

Unix系統(tǒng)

2021-09-28 15:03:06

Linux內(nèi)核arm

2022-10-19 23:28:55

Spring生命周期Bean

2018-10-18 14:06:15

Linux系統(tǒng)過程

2019-05-27 14:43:49

Tomcat架構(gòu)部署

2020-04-20 21:30:51

Tomcat部署架構(gòu)

2023-03-24 14:52:27

AbilityPage應(yīng)用
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 福利在线看 | 日韩欧美视频 | 免费一区二区三区 | 免费久久久久久 | 另类在线 | av福利网| 国产91色在线 | 亚洲 | 久久9精品 | 天天想天天干 | 国产乱码精品1区2区3区 | 羞羞视频在线观看 | 日韩精品成人 | 成人亚洲精品 | 久久免费精品 | 精品乱码久久久久 | 色综合网站 | 艹逼网| 日韩欧美在线观看 | 黄色一级片aaa | 午夜精品一区二区三区在线视频 | 欧美福利在线 | 天天影视网天天综合色在线播放 | 波多野结衣一区二区三区在线观看 | 亚洲精品日日夜夜 | 翔田千里一区二区 | 欧美男人天堂 | 欧美视频在线观看 | 精品一区二区三区在线视频 | 日韩国产欧美视频 | 黄色毛片在线观看 | 欧美成人激情 | av永久免费 | 日韩一区在线播放 | 午夜电影一区 | 国产精品久久久久久久久久久久 | 羞羞视频免费观 | 天天操天天插天天干 | 99精品亚洲国产精品久久不卡 | 三级免费毛片 | 欧美精品一区二区在线观看 | 一区在线观看 |