Tomcat是如何將JSP代碼編譯成Servlet代碼的?
要知道tomcat如何將JSP編譯成Servlet,還得從源代碼入手。
tomcat中,和jsp處理相關的功能都在org.apache.jasper包中,包中有一個JspC類,命名和java的編譯命令JAVAC有異曲同工之妙,我們在這個類里可以找到編譯JSP的相關代碼。
JspC.execute()方法是編譯的入口,我們來看看這個方法都是怎么做的。
首先是初始化工作,先初始化classloader 和 ServletContext,然后掃描所有的JSP文件。
接下來,就是將所有JSP文件編譯成Servlet了。processFile()方法,封裝了整個編譯過程,我們再來看看這個方法。
在這里,我們終于找到了編譯器(Compiler類),就要找到最終答案了!
org.apache.jasper.compiler.Compiler類是一個抽象類,它的核心方法是compile方法:
這里最重要的兩個步驟就是將JSP文件生成JAVA代碼,再將JAVA代碼編譯成class。
其中generateClass方法是抽象方法,由子類實現,tomcat中有兩個Compiler的實現:JDTCompiler和AntCompiler,這兩個類分別調用Eclipse JDT Compiler和Ant Compiler來編譯上一步生成的JAVA代碼。
以上就是tomcat將JSP文件編譯成Servlet的過程,希望能解答題主的疑惑。歡迎大家批評指正,如果喜歡請點贊,關注。