您好,登錄后才能下訂單哦!
1. 知識(shí)點(diǎn)
1) JSP頁(yè)面代碼的載入順序和執(zhí)行
a) 當(dāng)客戶第一次請(qǐng)求JSP頁(yè)面時(shí),JSP引擎會(huì)通過預(yù)處理把JSP文件中的靜態(tài)數(shù)據(jù)(HTML)和動(dòng)態(tài)數(shù)據(jù)(Java腳本)全
部轉(zhuǎn)換為Java代碼。這個(gè)轉(zhuǎn)換工作實(shí)際上是非常直觀的,對(duì)于HTML文本只是簡(jiǎn)單地用out.pringln()方法包裹起來,
對(duì)于Java腳本只是保留或簡(jiǎn)單地處理。
b) JSP引擎把生成的.java文件編譯成Servlet類文件(.class)。對(duì)于Tomcat服務(wù)器而言,生成的類文件默認(rèn)的情況下存放
在<Tomcat>\work目錄。
c) 編譯后的class對(duì)象被加載到容器中,并根據(jù)用戶的請(qǐng)求生成HTML格式的響應(yīng)頁(yè)面。
在執(zhí)行JSP頁(yè)面時(shí),通常可分為兩個(gè)時(shí)期:轉(zhuǎn)譯時(shí)期(Translation Time)和請(qǐng)求時(shí)期(Request Time)。在轉(zhuǎn)譯時(shí)期,JSP網(wǎng)頁(yè)被轉(zhuǎn)譯成Servlet類,然后被編譯成類文件;在請(qǐng)求時(shí)期,Servlet類執(zhí)行后,響應(yīng)結(jié)果至客戶端。
2. JSP頁(yè)面中的代碼加載執(zhí)行順序
1) java是在服務(wù)器端運(yùn)行的代碼,jsp在服務(wù)器的servlet里運(yùn)行,而javascript和html都是在瀏覽器端運(yùn)
行的代碼。所以加載執(zhí)行順序是java>jsp>js
2) js在jsp中的加載順序
頁(yè)面上的js代碼是html代碼的一部分,所以頁(yè)面加載的時(shí)候是由上而下加載。所以js加載的順序也就是
頁(yè)面中<script>標(biāo)簽出現(xiàn)的順序。<script>標(biāo)簽里面的或者是引入的外部js文件的執(zhí)行順序都是其語(yǔ)
語(yǔ)句出現(xiàn)的順序,其中js執(zhí)行的過程也是頁(yè)面裝載的一部分
3) 在js腳本中定義的全局變量和函數(shù),都可以在后面的腳本中調(diào)用。
變量的調(diào)用,必須是前面已經(jīng)聲明了的,否則變量返回的值是undefined。同一段腳本中,函數(shù)定義
可以出現(xiàn)在函數(shù)的調(diào)用后面;若函數(shù)的定義和調(diào)用在兩個(gè)腳本段中,函數(shù)調(diào)用在函數(shù)定義之前就會(huì)報(bào)
函數(shù)未定義錯(cuò)誤。
4) js中出現(xiàn)ajax的異步加載
由于ajax的異步加載可能會(huì)導(dǎo)致語(yǔ)句的執(zhí)行順序并不是按照語(yǔ)句的出現(xiàn)順序執(zhí)行的。例如,在頁(yè)面初
始加載的時(shí)候需要向jsp發(fā)送請(qǐng)求來獲得該頁(yè)面所需的數(shù)據(jù),在ajax成功函數(shù)中,對(duì)data的操作所需的
時(shí)間過長(zhǎng),就會(huì)導(dǎo)致在ajax函數(shù)外面的confirm與loadTree比data操作后面的語(yǔ)句先執(zhí)行。最終在
loadTree中使用data的值的時(shí)候就為空,此時(shí)全局變量openTab_Id就為空。
5) 控制js執(zhí)行順序
可以使用setTimeout(function(),time);來使function延遲加載。
6) js腳本必須放在head或body里面,不然提示invalid location of tag(script)
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。