Tomcat加載JSP主要有以下幾個類:
JspServlet
JspServletWrapper
JspCompilationContext
JspRuntimeContext
JsperLoader
Compiler
這幾個類都在jasper.jar包中
1.Tomat將http請求通過servlet轉給JspServlet
2.JspServlet在JspRuntimeContext的上下文中查找JspServletWrapper,如果沒有找到就新建實例,找到了話就取出來用
3.JspServletWrapper初始化時也會初始化一個JspCompilationContext
4.JspServlet將請求轉給JspServletWrapper的service方法進行處理
5.JspServletWrapper將判斷系統是否允許重加載this.options.getDevelopment,如果允許將調用JspCompilationContext的編譯方法compile
6.JspCompilationContext的compile方法通過判斷jsp文件的時間戳來決定是否將類加載器JsperLoader的引用置null
7.JspServletWrapper通過getServlet方法從JspCompilationContext加載(load方法)jsp編譯后的class類,並實例化
8.JspCompilationContext類在load時,首先要獲得JsperLoader,如果它為null將新建一個實例,然后讓JsperLoader這個類加載器加載jsp的class
9.JspServletWrapper獲得實例化的servlet后,將把JspServlet轉過來的請求交由這個servlet處理