日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
淺析JSP頁(yè)面翻譯的原理

眾所周知,每一個(gè)JSP頁(yè)面都會(huì)被Web容器編譯成一個(gè)Java類(lèi),供Web容器調(diào)用,并且生成HTML葉面回饋給用戶(hù)。而了解其中的變異方法和規(guī)則,對(duì)我們學(xué)習(xí)JSP是非常有好處的,可以說(shuō)學(xué)習(xí)好了這個(gè)編譯原理,就已經(jīng)學(xué)習(xí)好了大部分的JSP知識(shí),剩下的工作就只剩下熟記一些tablib和反復(fù)應(yīng)用以使自己更加熟練而已了。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、重慶小程序開(kāi)發(fā)公司、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶(hù)創(chuàng)新互聯(lián)還提供了習(xí)水免費(fèi)建站歡迎大家使用!

先來(lái)看一下JSP頁(yè)面所對(duì)應(yīng)的Class的基本結(jié)構(gòu)。每一個(gè)JSP頁(yè)面都會(huì)被編譯成成如下的格式樣子,先給一個(gè)大致的印象,詳細(xì)的說(shuō)明在后面

這里面最重要的函數(shù)就是pageservice,web容器在編譯好一個(gè)JSP類(lèi)以后,就申請(qǐng)這個(gè)類(lèi)的對(duì)象,并且直接調(diào)用pageservice來(lái)獲得Response,最后返回給客戶(hù)。作為細(xì)節(jié),我們可以總結(jié)如下:

1.所有的JSP頁(yè)面翻譯出來(lái)的class,都從HttpJspBase繼承,并且命名為PageName$jsp。

2.在第一次調(diào)用pageservice函數(shù)的時(shí)候,該class會(huì)進(jìn)行一次初始化,而這個(gè)初始化函數(shù)是_jspx_init,如果我們想,我們還可以自定義這個(gè)函數(shù),來(lái)實(shí)現(xiàn)JSP頁(yè)面的初始化。

3.<% %> 這樣的代碼被轉(zhuǎn)換成什么了?
這樣的代碼被直接轉(zhuǎn)成Java代碼放到pageservice函數(shù)里面。

4.<%! %> 這樣的代碼被轉(zhuǎn)換成什么了?
這樣的代碼被翻譯成成員函數(shù)和成員變量,也就是說(shuō),這些聲明在JSP的生命周期內(nèi)都是存在的。

5.HTML代碼呢?
html代碼直接被寫(xiě)到PrintWriter里面回饋給用戶(hù),非常的直接。

6.為什么JSP頁(yè)面翻譯有那么多省寫(xiě)方式,比如說(shuō)session , out , page , context之類(lèi)。
這都是在pageservice里面定義的臨時(shí)變量,具體的初始化可以參看上面的例子代碼,每一次調(diào)用JSP頁(yè)面,這些變量都會(huì)被重新初始化一次。當(dāng)然我們也可以方便的聲明自己的變量。

7.省寫(xiě)方式<%= object.doSomething()%> 這么理解?
這種省寫(xiě)方式調(diào)用doSomething所得到的Object的toString(),然后直接寫(xiě)到out里面。相當(dāng)于:
out.print(object.doSomethiing().toString())

8.JavaBean 里面的scope定義了作用域范圍,這個(gè)范圍在這里的意思是?
這是Bean對(duì)象句柄保存的地方的意思。我們可以想象一下,一個(gè)page范圍的Bean只是pageservice里面的一個(gè)局部變量,當(dāng)一次處理結(jié)束后,這個(gè)變量就會(huì)被Java虛擬機(jī)回收。而session變量。而request級(jí)別的Bean就應(yīng)該是JSP頁(yè)面的成員變量。而session和 application則不能在JSP頁(yè)面class里面保存,而應(yīng)該保存在JSP頁(yè)面的調(diào)用對(duì)象里面。

9.關(guān)于<%@ page %>命令,這個(gè)就太簡(jiǎn)單了,只是一個(gè)一個(gè)的對(duì)應(yīng)為response.setContentType()的語(yǔ)句而已。

10.關(guān)于JSP頁(yè)面翻譯轉(zhuǎn)向問(wèn)題。這個(gè)語(yǔ)句被翻譯為getServletContext().getRequestDispatcher("/List.jsp").forward(req, res);語(yǔ)句。

11.<%@ include file="included.jsp" %> 遇到這個(gè)語(yǔ)句,JSP翻譯器就會(huì)把這個(gè)文件的代碼和現(xiàn)在文件的代碼混合然后一起編譯,生成JSP類(lèi)。這個(gè)方法很好,可以讓我們統(tǒng)一文檔的樣式,比如說(shuō)吧 header寫(xiě)成一個(gè)文件,,而把footer也寫(xiě)成一個(gè)JSP ,并且在index.html里面把這兩個(gè)文件包含近來(lái),這樣,不管Content怎么變,上下樣式都不會(huì)變,有利于樣式的統(tǒng)一。

以上是JSP頁(yè)面翻譯過(guò)程的簡(jiǎn)單探討,更加詳細(xì)的細(xì)節(jié)可以參考tomcat的源代碼,了解這些原理對(duì)于學(xué)習(xí)JSP來(lái)說(shuō),是非常重要的,能大大的提高學(xué)習(xí)的效率。


分享標(biāo)題:淺析JSP頁(yè)面翻譯的原理
地址分享:http://m.5511xx.com/article/cdjiojh.html