java小新人 帶著萌新看springboot源碼
也許還會說一下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小新人 帶著萌新看springboot源碼