java小新人 帶著萌新看springboot原始碼
這節來說個大家都比較熟悉的東西,就是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。