1、將WEB應用部署到TOMCAT容器,容器啟動讀取應用的部署文件web.xml,但不對.jsp文件做任何處理請求。
2、客戶點擊連接請求某個.jsp文件,容器開始將.jsp文件轉換為一個servrlet類的.java源代碼。查看指令,得到轉換的可能需要的信息。創建一個HttpServlet子類,對于Tomcat5所生成的servlet會擴展org.apache.jasper.runtime.HttpJspBase類。若有一個page指令有import屬性,生成的類文件的最上面會寫入import語句。例如在Tomcat5中加入包語句:package org.apache.jsp;若有聲明容器將這些聲明寫道類文件,通常放在服務方法的下面。Tomca5聲明了自己的一個靜態方法和一個實例方法。然后建立服務方法,方法名為_jspService()。所生成的servlet會覆蓋servlet超類的service()方法。_jspService()直接由service()調用,要接收HttpServletRequest和HttpServletResponse參數。在建立這個方法的時候,容器會聲明并初始化所有的隱式對象。將普通的HTML(模板文件)、scrptlet和表達式放到服務方法里,進行格式化,并寫至PrintWrite響應輸出。
3、容器嘗試將這個servlet.java源文件編譯為.class文件。
4、容器家在新生成的servlet類。
5、容器實例化servlet,并導致servlet的jspInit()方法運行。對象現在已成為一個完整的servlet準備就緒,接受客戶的請求。
6、容器創建一個新線程來處理客戶請求,servlet的service()方法運行。以后的處理同普通的servlet處理過程。最終servlet向客戶返回一個響應。
需要注意的是:在JSP生命周期中,JSP的轉換和編譯過程只發生一次。一旦第一次編譯完成,以后的調用同普通的servlet一樣。大多數容器開發商提供預轉化和編譯的辦法,是這些工作提前完成。
凡是有該標志的文章,都是該blog博主Caoer(草兒)原創,凡是索引、收藏
、轉載請注明來處和原文作者。非常感謝。