Tomcat是開源的實(shí)現(xiàn)了部分Java EE規(guī)范的Java Web應(yīng)用服務(wù)器滞乙。除了J2EE,還有其他技術(shù)也通過容器來實(shí)現(xiàn)鉴嗤,比如:EJB斩启,Java Mail,JPA醉锅,JTA兔簇,JMS。
值得注意的是硬耍,目前經(jīng)常接觸的java容器垄琐,tomcat和jetty只是實(shí)現(xiàn)了J2EE的部分規(guī)范,比如Servlet和JSP经柴。像XML,JMS,JTA,JTS,JAF,JDBC,JNDI,EJB,RMI,CORBA等其他規(guī)范會在Jboss狸窘,Glassfish等新興容器中首先實(shí)現(xiàn)。所以像Glassfish這種開源的的容器坯认,是研究Java EE最新技術(shù)的第一選擇翻擒。
下面針對Tomcat支持的Java EE的規(guī)范做個(gè)簡單的介紹:
Servlet:擴(kuò)展了Web服務(wù)器功能的小型的Java程序。
JSP:在HTML代碼中嵌入JAVA代碼牛哺,服務(wù)器在接收到客戶端的請求后對JAVA代碼進(jìn)行處理韭寸,然后將生成的HTML頁面返回給客戶端的瀏覽器。
Servlet容器
從tomcat的配置文件中可以看出荆隘,Servlet容器由Server恩伺,Service組成,其中Service又包含了很多的組件椰拒。
值得注意的是tomcat中conf路徑中的server.xml體現(xiàn)的Server就是指的Tomcat服務(wù)器晶渠,負(fù)責(zé)管理各個(gè)Service,同時(shí)監(jiān)聽shutdown鉤子燃观。
Service就是Tomcat封裝的支持WEB服務(wù)的組件褒脯,它包含許多的組件,其中有Connector和Container這兩個(gè)重要組件缆毁,和Loader(類加載器)番川,Realm(權(quán)限管理),JMX(提供遠(yuǎn)程監(jiān)控tomcat的功能),Jasper(JSP解析引擎)颁督,Pipeline(請求的管道)践啄,Naming(即JNDI命名服務(wù))等組件。
Container組件
Container由Engine(Servlet的主容器)沉御,Host(虛擬主機(jī)屿讽,負(fù)責(zé)部署web應(yīng)用和Context的創(chuàng)建),Context(負(fù)責(zé)配置解析吠裆,管理Web資源)伐谈,Wrapper(也就是每個(gè)Servlet的封裝)組成,Engine又由多個(gè)Host組成试疙,一個(gè)Host包含多個(gè)Wrapper诵棵。
Servlet的生命周期
- 初始化調(diào)用init()方法:當(dāng)請求到達(dá)Server,會被映射到相對應(yīng)的Servlet祝旷,如果不存在對應(yīng)的Servlet實(shí)例履澳,則加載和實(shí)例化,此時(shí)調(diào)用init()方法
- service()即是主方法缓屠,提供請求與返回
- 銷毀方法destory():當(dāng)Server不再需要Servlet時(shí),Server調(diào)用Servlet的destory()方法护侮。
JSP規(guī)范
JSP引擎的工作流程
- servlet容器編譯servlet源文件敌完,生成相應(yīng)的類
- 加載與JSP對應(yīng)的servlet類,創(chuàng)建實(shí)例羊初,并調(diào)用它的初始化方法滨溉,對應(yīng)_jspInit()
- 執(zhí)行servlet實(shí)例的服務(wù)方法,對應(yīng)_jspService()
- 銷毀servlet實(shí)例的銷毀方法,銷毀servlet實(shí)例长赞,對應(yīng)_jspDestory()