JSP HTTP服务器对JSP的支持

开发 后端
本文介绍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文件中编译语句块的解释处理代码如下:

//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)  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.

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

//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 + "\");");  
}  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.

以上代码中,首先是将JSP表达式所在的行按照表达式前部分,表达式和表达式后部分提取出来,经过符号替换之后再合成java语句。本设计中,对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);  
}  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

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

【编辑推荐】

  1. 浅析JSP HTTP服务器支持CGI
  2. 使用JSP页面生成PDF报表
  3. JSP自定义标签定义步骤
  4. 详解测试JSP容器
  5. 介绍JSP HTTP服务器实现的以下特性
责任编辑:佚名 来源: IT168
相关推荐

2009-07-06 17:34:38

JSP HTTP服务器

2009-07-03 13:05:47

JSP HTTP服务器

2009-07-06 17:56:12

JSP HTTP服务器

2009-07-06 17:40:05

JSP HTTP服务器

2009-07-06 17:25:22

JSP HTTP服务器

2009-07-06 14:05:11

JSP服务器

2009-07-06 18:02:34

JSP服务器

2009-07-02 17:17:03

2009-06-27 21:35:50

Linux服务器

2009-07-01 14:34:03

2009-07-06 17:22:54

JSP服务器

2009-07-02 13:46:17

JSP引擎Web服务器

2009-03-17 15:10:50

2009-12-28 13:18:46

2011-08-29 15:23:11

Ubuntuapache

2009-07-01 14:43:23

支持JSP的虚拟主机

2011-08-05 09:37:45

2009-06-29 16:48:43

内置对象JSP

2010-09-08 13:31:24

2019-08-22 15:26:24

HTTP服务器Python
点赞
收藏

51CTO技术栈公众号