转载

JSP HTTP服务器对JSP的支持

1. 设计思路

通过JSP HTTP服务器对本地的JSP源文件进行解释,生成中间java源文件。继而调用javac编译工具将java源文件编译成为class文件。JSP HTTP服务器对class文件中定义的类进行载入并运行。

2. 设计要点

(1)对JSP文件语法的定义
(2)将JSP文件转换为java源文件
(3)编译java源文件
(4)载入java class并执行类对象的实例对象

3. 设计实施

(1)制定JSP文件语法,并根据JSP语法形式将代码解释为java源文件考虑到JSP文件解释工作的简化,设计中主要考虑三种JSP语法形式,本设计中,对JSP文件中编译语句块的解释处理代码如下:

  1. //Current line contain JSP compile block start flag   
  2. if(line.indexOf("<%@") >= 0)  
  3. {  
  4. //file .jsp contains compiled header   
  5. is_has_compiled_header = true;  
  6. //Those statements in same line.   
  7. if(line.indexOf("%>") >= 0) //JSP cimpile block end flag   
  8. {  
  9. int start = line.indexOf("<%@");  
  10. int end = line.indexOf("%>");  
  11. fout.println(line.substring(start + 3, end) );  
  12. }  
  13. else //Those statements no in same line.   
  14. {  
  15. while(true)  
  16. {  
  17. line = fin.readLine();  
  18. if(line == null) //The compiled header is broken   
  19. {  
  20. return (false);  
  21. }  
  22. if(line.equals("%>") == true) //JSP compiled block end flag   
  23. {  
  24. break;  
  25. }  
  26. else  
  27. {  
  28. fout.println(line); //Output the middle statements of compiled header   
  29. }  
  30. }//while(true)   
  31. }  
  32. }//if(line.indexOf("<%@") >= 0)  

以上处理代码是将JSP文件中编译语句块解释成java源文件。如果编译语句存在于一行之中,则将语句开始标志和结束标志中间的编译语句取出形成java代码。如果编译语句块存在于多行之中,则将语句开始标志行和结束标志行之间的编译语句行取出形成java代码。 本设计中,对JSP表达式语句解释处理代码如下:

  1. //Current line contain JSP expression (mark "<%=" and "%>" must be in same line)   
  2. if(line.indexOf("<%=") >= 0)  
  3. {  
  4. //Get start flag position   
  5. int start = line.indexOf("<%=");  
  6. //Get end flag position   
  7. int end = line.indexOf("%>");  
  8. //Get frontal part of JSP expression block   
  9. String pre = line.substring(0, start);  
  10. //Get expression from line   
  11. String exp = line.substring(start + 3, end);  
  12. //Get back part of JSP expression block   
  13. String back = line.substring(end + 2);  
  14. //Replace character " of frontal part and back part with character '   
  15. prepre = pre.replace('/"', '/'');  
  16. backback = back.replace('/"', '/'');  
  17. //Output the new line (java statement)   
  18. fout.println("outln(/"" + pre + "/" + " + exp + " + /"" + back + "/");");  
  19. }  

以上代码中,首先是将JSP表达式所在的行按照表达式前部分,表达式和表达式后部分提取出来,经过符号替换之后再合成java语句。本设计中,对JSP语句块解析处理如下:

  1. //As to JSP statements block, mark "<%" and "%>" must be in sigle line   
  2. while(true)  
  3. {  
  4. //Read next line   
  5. line = fin.readLine();  
  6. if(line == null || line.equals("%>") == true) //JSP statements block end flag is "%>"   
  7. {  
  8. break;  
  9. }  
  10. fout.println(line);  
  11. }  

以上JSP HTTP服务器代码中,将语句块开始标志行(<%)和结束标志行(%>)之间的编译语句行取出形成java代码。

正文到此结束
Loading...