Tomcat的簡單工作原理

weixin_34050427發表於2017-07-26

Tomcat是開源的實現了部分Java EE規範的Java Web應用伺服器。除了J2EE,還有其他技術也通過容器來實現,比如:EJB,Java Mail,JPA,JTA,JMS。

值得注意的是,目前經常接觸的java容器,tomcat和jetty只是實現了J2EE的部分規範,比如Servlet和JSP。像XML,JMS,JTA,JTS,JAF,JDBC,JNDI,EJB,RMI,CORBA等其他規範會在Jboss,Glassfish等新興容器中首先實現。所以像Glassfish這種開源的的容器,是研究Java EE最新技術的第一選擇。

下面針對Tomcat支援的Java EE的規範做個簡單的介紹:
Servlet:擴充套件了Web伺服器功能的小型的Java程式。
JSP:在HTML程式碼中嵌入JAVA程式碼,伺服器在接收到客戶端的請求後對JAVA程式碼進行處理,然後將生成的HTML頁面返回給客戶端的瀏覽器。

Servlet容器

從tomcat的配置檔案中可以看出,Servlet容器由Server,Service組成,其中Service又包含了很多的元件。

值得注意的是tomcat中conf路徑中的server.xml體現的Server就是指的Tomcat伺服器,負責管理各個Service,同時監聽shutdown鉤子。

Service就是Tomcat封裝的支援WEB服務的元件,它包含許多的元件,其中有Connector和Container這兩個重要元件,和Loader(類載入器),Realm(許可權管理),JMX(提供遠端監控tomcat的功能),Jasper(JSP解析引擎),Pipeline(請求的管道),Naming(即JNDI命名服務)等元件。

Container元件
Container由Engine(Servlet的主容器),Host(虛擬主機,負責部署web應用和Context的建立),Context(負責配置解析,管理Web資源),Wrapper(也就是每個Servlet的封裝)組成,Engine又由多個Host組成,一個Host包含多個Wrapper。

Servlet的生命週期

  • 初始化呼叫init()方法:當請求到達Server,會被對映到相對應的Servlet,如果不存在對應的Servlet例項,則載入和例項化,此時呼叫init()方法
  • service()即是主方法,提供請求與返回
  • 銷燬方法destory():當Server不再需要Servlet時,Server呼叫Servlet的destory()方法。

JSP規範

JSP引擎的工作流程

  • servlet容器編譯servlet原始檔,生成相應的類
  • 載入與JSP對應的servlet類,建立例項,並呼叫它的初始化方法,對應_jspInit()
  • 執行servlet例項的服務方法,對應_jspService()
  • 銷燬servlet例項的銷燬方法,銷燬servlet例項,對應_jspDestory()

相關文章