1. 程式人生 > >java小新人 帶著萌新看springboot原始碼01

java小新人 帶著萌新看springboot原始碼01

這節來說個大家都比較熟悉的東西,就是servlet三大元件,servlet、filter、listener,再說說springboot的內建tomcat。

也許還會說一下tomcat的執行原理,還有,springboot不是不支援jsp嗎(是因為嵌入式tomcat的原因),那我就讓springboot支援jsp,其他的還是一樣。

比較長,可能要分為兩節。

1.servlet配置

想必大家不會陌生servlet配置,寫個類繼承HttpServlet,然後在原來的web.xml檔案中配置<servlet-name><servlet-class>還有配置servlet的對映路徑<servlet-mapping>,忘記的小夥伴就回頭看看啊。

現在的springboot配置servlet,也差不多,寫個servlet,但是記住,springboot不能直接識別servlet,需要藉助一個工具ServletRegistrationBean(xxxBean在學spring的時候應該很常見,本質上還是一個Bean,但是有能夠生產bean的能力,類似一個簡單的工廠類)

 

我們接著隨意找個配置類(我圖方便,就在那個main方法的主配置類加了),加入如下程式碼:

 

ok,就這樣,然後執行,瀏覽器輸入網址

 

2.配置Filter

配置和上面差不多,寫個Filter實現類,利用FilterRegistrationBean往容器裡新增filter

 

 

然後執行springboot,輸入xxxxx/hehe就行了

 

3.配置listener

listener最容易,因為前面兩個還有配置url對映,這個listener不用配。寫個listener,利用ServletListenerRegistrationBean新增到容器裡。

 

 

啟動和關閉應用就能看到結果:

 

 

最後的就是注意ServletListenerRegistrationBean這個類要傳入泛型,開啟這個類,可以看到我們可以定製監聽器的型別

 

4,簡單說說嵌入式servlet容器(springboot預設當然是用tomcat)

springboot應用和以前的ssm等應用最大的不同是,springboot可以打成jar包,然後在裝有java執行環境的電腦,就能用java -jar xxx.jar就能夠直接執行一個springboot應用,非常方便,但是缺點是不支援jsp;

而ssm、ssh等的就要達成war包,然後在新的電腦上配置java環境,下載tomcat,再配置tomcat和java的版本,然後才能部署應用,執行,emmmm....估計要很久!

造成這種結果的最大原因就是springboot裝的是小tomcat(咳咳,這是我自己為了方便理解才說的,標準稱呼是嵌入式servlet容器,英文全程:EmbeddedServletContainer),以下假如看到小tomcat,就要理解是嵌入式servlet容器啊(EmbeddedServletContainer),這麼長的單詞一定要記下來,因為後面會有更長的.....

首先簡單說說servlet容器種類。常見的Tomcat(springboot預設),Jetty(適用於長連線,比如聊天這種),Undertow(不支援jsp,但是併發效能非常好),各有優勢。

開啟pom配置檔案,可以看到

 

然後將tomcat變為jetty就可以了,maven就會自動幫你下載對應的jar包

 

執行springboot,控制檯輸出如下所示,你就成功了。

 

到這裡,springboot配置servlet三大元件以及切換嵌入式servlet容器就講完了,接下來幹什麼想必都很清楚,當然是怎麼修改容器的預設配置以及執行原理啊!

不知道大家有沒有發現上圖埠是8081(預設8080),在配置檔案是怎麼配置的(以前說過,估計很多人都知道),為什麼會起作用?我能不能用@Bean的方式修改容器預設引數呢?以及其中的執行原理?當然,也會帶著大家一起走走從主配置類開始,通過一個run方法,逐漸的就執行容器的過程。

後面還會說說不用嵌入式servlet容器的方式,我就用我外界下載的tomcat和springboot應用一起用,並且還支援jsp。

歡迎工作一到八年的Java工程師朋友們加入Java高階交流群:854630135

本群提供免費的學習指導 架構資料 以及免費的解答

不懂得問題都可以在本群提出來 之後還會有直播平臺和講師直接交流噢

哦對了,喜歡就別忘了關注一下哦~