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