新聞中心
1. 設(shè)計(jì)思路

通過JSP HTTP服務(wù)器對本地的JSP源文件進(jìn)行解釋,生成中間java源文件。繼而調(diào)用javac編譯工具將java源文件編譯成為class文件。JSP HTTP服務(wù)器對class文件中定義的類進(jìn)行載入并運(yùn)行。
2. 設(shè)計(jì)要點(diǎn)
(1)對JSP文件語法的定義
(2)將JSP文件轉(zhuǎn)換為java源文件
(3)編譯java源文件
(4)載入java class并執(zhí)行類對象的實(shí)例對象
3. 設(shè)計(jì)實(shí)施
(1)制定JSP文件語法,并根據(jù)JSP語法形式將代碼解釋為java源文件考慮到JSP文件解釋工作的簡化,設(shè)計(jì)中主要考慮三種JSP語法形式,本設(shè)計(jì)中,對JSP文件中編譯語句塊的解釋處理代碼如下:
- //Current line contain JSP compile block start flag
- if(line.indexOf("<%@") >= 0)
- {
- //file .jsp contains compiled header
- is_has_compiled_header = true;
- //Those statements in same line.
- if(line.indexOf("%>") >= 0) //JSP cimpile block end flag
- {
- int start = line.indexOf("<%@");
- int end = line.indexOf("%>");
- fout.println(line.substring(start + 3, end) );
- }
- else //Those statements no in same line.
- {
- while(true)
- {
- line = fin.readLine();
- if(line == null) //The compiled header is broken
- {
- return (false);
- }
- if(line.equals("%>") == true) //JSP compiled block end flag
- {
- break;
- }
- else
- {
- fout.println(line); //Output the middle statements of compiled header
- }
- }//while(true)
- }
- }//if(line.indexOf("<%@") >= 0)
以上處理代碼是將JSP文件中編譯語句塊解釋成java源文件。如果編譯語句存在于一行之中,則將語句開始標(biāo)志和結(jié)束標(biāo)志中間的編譯語句取出形成java代碼。如果編譯語句塊存在于多行之中,則將語句開始標(biāo)志行和結(jié)束標(biāo)志行之間的編譯語句行取出形成java代碼。 本設(shè)計(jì)中,對JSP表達(dá)式語句解釋處理代碼如下:
- //Current line contain JSP expression (mark "<%=" and "%>" must be in same line)
- if(line.indexOf("<%=") >= 0)
- {
- //Get start flag position
- int start = line.indexOf("<%=");
- //Get end flag position
- int end = line.indexOf("%>");
- //Get frontal part of JSP expression block
- String pre = line.substring(0, start);
- //Get expression from line
- String exp = line.substring(start + 3, end);
- //Get back part of JSP expression block
- String back = line.substring(end + 2);
- //Replace character " of frontal part and back part with character '
- prepre = pre.replace('\"', '\'');
- backback = back.replace('\"', '\'');
- //Output the new line (java statement)
- fout.println("outln(\"" + pre + "\" + " + exp + " + \"" + back + "\");");
- }
以上代碼中,首先是將JSP表達(dá)式所在的行按照表達(dá)式前部分,表達(dá)式和表達(dá)式后部分提取出來,經(jīng)過符號替換之后再合成java語句。本設(shè)計(jì)中,對JSP語句塊解析處理如下:
- //As to JSP statements block, mark "<%" and "%>" must be in sigle line
- while(true)
- {
- //Read next line
- line = fin.readLine();
- if(line == null || line.equals("%>") == true) //JSP statements block end flag is "%>"
- {
- break;
- }
- fout.println(line);
- }
以上JSP HTTP服務(wù)器代碼中,將語句塊開始標(biāo)志行(<%)和結(jié)束標(biāo)志行(%>)之間的編譯語句行取出形成java代碼。
【編輯推薦】
- 淺析JSP HTTP服務(wù)器支持CGI
- 使用JSP頁面生成PDF報表
- JSP自定義標(biāo)簽定義步驟
- 詳解測試JSP容器
- 介紹JSP HTTP服務(wù)器實(shí)現(xiàn)的以下特性
網(wǎng)頁名稱:JSP HTTP服務(wù)器對JSP的支持
本文鏈接:http://www.dlmjj.cn/article/dhpeehh.html


咨詢
建站咨詢
