JSP的运行原理.docx
- 文档编号:6576495
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:11
- 大小:271.71KB
JSP的运行原理.docx
《JSP的运行原理.docx》由会员分享,可在线阅读,更多相关《JSP的运行原理.docx(11页珍藏版)》请在冰豆网上搜索。
JSP的运行原理
JSP起源、JSP的运行原理、JSP的执行过程
2012-11-0720:
28 5609人阅读 评论(6) 收藏 举报
JSP起源
在很多动态网页中,绝大部分内容都是固定不变的,只有局部内容需要动态产生和改变。
如果使用Servlet程序来输出只有局部内容需要动态改变的网页,其中所有的静态内容也需要程序员用Java程序代码产生,整个Servlet程序的代码将非常臃肿,编写和维护都将非常困难。
对大量静态内容的美工设计和相关HTML语句的编写,并不是程序员所要做的工作,程序员对此也不一定在行。
网页美工设计和制作人员不懂Java编程,更是无法来完成这样的工作。
为了弥补Servlet的缺陷,SUN公司在Servlet的基础上推出了JSP(Java Server Pages)技术作为解决方案。
JSP是简化Servlet编写的一种技术,它将Java代码和HTML语句混合在同一个文件中编写,只对网页中的要动态产生的内容采用Java代码来编写,而对固定不变的静态内容采用普通静态HTML页面的方式编写。
建立对JSP的直观认识
JSP页面是由HTML语句和嵌套在其中的Java代码组成的一个普通文本文件,JSP 页面的文件扩展名必须为.jsp。
在JSP页面中编写的Java代码需要嵌套在<%和%>中,嵌套在<%和%>之间的Java代码被称之为脚本片段(Scriptlets),没有嵌套在<%和%>之间的内容被称之为JSP的模版元素。
JSP中的Java代码可以使用out.println语句将其他Java程序代码产生的结果字符串输出给客户端,也可以使用System.out.println语句将它们打印到命令行窗口。
JSP文件就像普通的HTML文件一样,它们可以放置在WEB应用程序中的除了WEB-INF及其子目录外的其他任何目录中,JSP页面的访问路径与普通HTML页面的访问路径形式也完全一样。
JSP
JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。
JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比html而言,html只能为用户提供静态内容,而Jsp技术允许在页面中嵌套java代码,为用户提供动态数据。
Jsp快速入门:
在jsp页面中输出当前时间。
不管是JSP还是Servlet,虽然都可以用于开发动态web资源。
但由于这2门技术各自的特点,在长期的软件实践中,人们逐渐把servlet作为web应用中的控制器组件来使用,而把JSP技术作为数据显示模板来使用。
其原因为,程序的数据通常要美化后再输出:
让jsp既用java代码产生动态数据,又做美化会导致页面难以维护。
让servlet既产生数据,又在里面嵌套html代码美化数据,同样也会导致程序可读性差,难以维护。
因此最好的办法就是根据这两门技术的特点,让它们各自负责各的,servlet只负责响应请求产生数据,并把数据通过转发技术带给jsp,数据的显示jsp来做。
JSP的运行原理
WEB容器(Servlet引擎)接收到以.jsp为扩展名的URL的访问请求时,它将把该访问请求交给JSP引擎去处理。
Tomcat中的JSP引擎就是一个Servlet程序,它负责解释和执行JSP页面。
每个JSP 页面在第一次被访问时,JSP引擎将它翻译成一个Servlet源程序,接着再把这个Servlet源程序编译成Servlet的class类文件,然后再由WEB容器(Servlet引擎)像调用普通Servlet程序一样的方式来装载和解释执行这个由JSP页面翻译成的Servlet程序。
Tomcat 5.x把为JSP页面创建的Servlet源文件和class类文件放置在“
JSP规范也没有明确要求JSP中的脚本程序代码必须采用Java语言,JSP中的脚本程序代码可以采用Java语言之外的其他脚本语言来编写,但是,JSP页面最终必须转换成Java Servlet程序。
可以在WEB应用程序正式发布之前,将其中的所有JSP页面预先编译成Servlet程序。
分析JSP所生成的Servlet代码
JSP页面翻译成的Servlet继承了org.apache.jasper.runtime.HttpJspBase类,HttpJspBase类是HttpServlet的一个子类,因此JSP页面翻译成的Servlet是HttpServlet的一个孙子类。
HttpJspBase类实现了javax.servlet.jsp.HttpJspPage接口中的部分方法,因此,HttpJspBase类是抽象的。
SUN公司为JSP的WEB容器开发商和JSP页面开发人员提供了一套专门应用于开发JSP程序的Java类,这套Java类被称为JSP API。
HttpJspPage接口和JspPage接口属于JSP API,在HttpJspPage接口中只定义了一个_jspService方法,但它继承了JspPage接口,JspPage接口中定义了两个方法:
jspInit()和jspDestroy()。
HttpJspBase的init方法调用了jspInit和_jspInit方法,destroy方法内部调用了jspDestroy和_jspDestroy方法,service方法内部调用了_jspService方法。
在HttpJspBase中实现的init、service和destroy方法都被声明成了final类型。
JSP页面中的位于<% %>外面的每行和紧临<%%>两边的每段文本被转换成以这些文本作为参数的一条条out.write语句,JSP脚本片断(位于<%%>内的一段java代码)中的java代码被原封不动地搬移进了_jspService方法中的相应位置处,JSP表达式(位于<%=和%>之中的内容)则是被转换成以其中的变量或表达式作为参数的out.print语句。
JSP的执行过程
JSP的执行过程主要可以分为以下几点:
客户端发出请求。
Web容器将JSP转译成Servlet源代码。
Web容器将产生的源代码进行编译。
Web容器加载编译后的代码并执行。
把执行结果响应至客户端。
过程介绍
客户端发出请求,请求为JSP,web容器就会找出相应的servlet进行处理
将servlet转成字节码文件
将字节码文件加载到web容器里
这时会在web容器里建立实例
进行初始化
通过service接受请求
然后web容器会自动产生两个对象servlet和service最后进行销毁
JSP文档中的元素语法
《JavaWeb开发详解--XML+DTD+XMLSchema+XSLT+Servlet3.0+JSP2.2深入剖析与实例应用》第18章JSP技术,本章将介绍JSP的运行机制、JSP的语法和JSP的隐含对象,以及JSP文档。
本节为大家介绍JSP文档。
18.8 JSP文档
在JSP规范中定义了两种语法,用于编写JSP页面。
一种是标准的JSP语法格式,在前面几节中介绍和使用的就是JSP语法格式,另一种是XML语法格式。
使用标准语法的JSP文件叫做JSP页面,使用XML语法的JSP文件叫做JSP文档。
下面,我们通过两个例子来看看采用标准JSP语法格式和采用XML语法格式的区别。
例18-13的greet.jsp使用标准的JSP语法格式编写,该页面向用户显示欢迎信息;例18-14的greet_xml.jsp完成相同的功能,不过是采用XML语法编写的。
例18-13 greet.jsp
1.① <%@ page contentType="text/html;charset=GB2312" %>
2.
3.
4. ②
5.
6. ③ <%!
String greeting="欢迎你!
"; %>
7. ④ <%
8. String user=request.getParameter("user");
9. StringBuffer sb=new StringBuffer();
10. sb.append(user);
11. sb.append(",");
12. sb.append(greeting);
13. %>
14.
15. ⑤
程序员之家留言板
16. ⑥ <%=sb.toString()%>
17.
18.
19.
例18-14greet_xml.jsp
1.
xml version="1.0" encoding="GB2312"?
>
2.
3. root xmlns: jsp=" version="2.0"> 4. ① directive.page contentType="text/html;charset=GB2312"/> 5. 6. ② 7.
8. ③ declaration>String greeting="欢迎你! ";
declaration>
9. ④ scriptlet> 10. String user=request.getParameter("user"); 11. StringBuffer sb=new StringBuffer(); 12. sb.append(user); 13. sb.append(","); 14. sb.append(greeting); 15.
scriptlet>
16.
17. ⑤
text>程序员之家留言板
text>程序员之家留言板
text>
18. ⑥ expression>sb.toString()
expression>
19.
20.
21.
22.
root>
在使用XML语法格式编写JSP文档时,一定要遵照XML格式良好的定义。
JSP文档可以直接由JSP容器解释运行,容器会检查JSP文档是否是格式良好的、结构化的文档。
18.8.2 JSP文档中的元素语法
(2)
而下面的代码:
1. root xmlns: jsp=" version="2.0"> 2. output omit-xml-declaration="no"/> 3. 4. expression>2+3 expression> 5. 6. root> 或者JSP文档(文件扩展名为.jspx或者在web.xml文件中将元素设为true): 1. jsp=" 2. expression>2+3 expression> 3. 将输出下面的XML文档: 1. xml version="1.0" encoding="UTF-8"? > 2. 输出的XML声明中的编码值是HTTP响应字符流的编码。 doctype-root-element 指定在输出的文档类型声明中的XML文档根元素的名称。 只有在指定了doctype-system属性时,才可以而且必须使用该属性。 doctype-system 指定在输出的文档类型声明中的系统标识符。 例如: 1. root xmlns: jsp=" version="2.0"> 2. output omit-xml-declaration="no" 3. doctype-root-element="number" 4. doctype-system="number.dtd"/> 5. 6. expression>2+3 expression> 7. 8. root> 将输出下面的XML文档: 1. xml version="1.0" encoding="UTF-8"? > 2. DOCTYPE number SYSTEM "number.dtd"> 3. 指定在输出的文档类型声明中的公共标识符。 只有在指定了doctype-system属性时,才可以使用doctype-public属性。 例如: 1. xml version="1.0" encoding="UTF-8" ? > 2. jsp=" 3. output doctype-root-element="html" 4. doctype-public="-//W3C//DTD XHTML Basic 1.0//EN" 5. doctype-system="http: //www.w3.org/TR/xhtml-basic/xhtml- basic10. 6.dtd" /> 7. 8. 9. 10. 将输出下面的XML文档: 1. xml version="1.0" encoding="UTF-8"? > 2. DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN" "http: //www. w3.org/TR/xhtml-basic/xhtml-basic10.dtd"> 3.Example XHTML Document
Example XHTML Document
18.8.2 JSP文档中的元素语法(3)
如果在JSP文档中没有指定响应内容的MIME类型和字符编码,那么默认情况下Tomcat将以text/xml类型和UTF-8编码向客户端发送响应。
可以通过 directive.page>指令元素来指定响应内容的MIME类型和字符编码,如下: 1. directive.page contentType="text/html;charset=GB2312"/> 3.指令与脚本元素 在JSP文档中可以使用page和include指令元素,它们的语法格式如下: 1. directive.page attr1="value1" attr2="value2" …/> 2. directive.include file="relativeURLspec"/> page和include指令元素的属性在标准JSP语法和XML语法中都是相同的。 在JSP文档中,不能使用taglib指令。 脚本元素包含三个部分: 声明、脚本段和表达式,它们在JSP文档中的语法格式如下所示: 1. declaration> declaration(s) declaration> 2. scriptlet> scriptlet scriptlet> 3. expression> expression expression> 例如: 1. declaration>int count=0; declaration> 2. scriptlet>count++; scriptlet> 3. expression>count expression> 在JSP页面中,对于请求时的属性值表示,可以使用表达式语法<%=expr%>,例如: 1.<% String url="2.jsp"; %> 2. include page="<%=url%>"/> 而在JSP文档中,则要使用%=expr%,例如: 1. scriptlet>String url="2.jsp"; scriptlet> 2. include page="%=url%"/> 不过要注意,在JSP文档中,这种语法仅仅适用于标准动作元素或者自定义的动作元素。 例如,HTML中的元素不是动作元素,语句 1.2.jsp 被转换后,仍然是 1.2.jsp 在JSP文档中,应该写为下面的形式: text> 2. expression>url expression> 3. text> [CDATA[">2.jsp]]> text> 4.动作元素 动作元素的语法在JSP页面和JSP文档中是一致的,参看第18.3.3节。 5.文本与注释 在JSP文档中也可以直接书写要输出的文本或XML片段,不过在书写这些内容时要符合XML文档格式良好的约定。 此外,还可以使用 text>元素来封装要输出的文本内容,该元素既可以用于输出固定的内容,也可以用于输出动态的内容。 text>元素的用法类似于XSLT中的 text>元素。 在JSP文档中,不能使用JSP注释,只能使用XML(HTML)类型的注释,即 1. -- comments … --> 18.9 小结 JSP是一种建立在Servlet规范提供的功能之上的动态网页技术,我们可以把JSP看成是运行时的Servlet。 本章主要从以下几个方面介绍了JSP技术。 首先介绍了JSP的运行机制,我们通过分析JSP页面转换后的Servlet类的代码,帮助读者更好地理解JSP实际上是Servlet更高层次的封装。 接下来介绍了JSP的标准语法。 一个JSP页面由元素和模板数据组成,元素有3种类型: 指令元素、脚本元素和动作元素。 我们还介绍了JSP的隐含对象以及对象的范围。 从转换后的Servlet类的代码中可以看到,JSP容器自动产生了这些隐含对象。 在JSP页面中,总共可以使用9个隐含对象,其中exception对象只能在错误页面(在page指令中指定属性isErrorPage=true的页面)中使用。 接着,我们通过一个完整的留言板程序,和读者一起感受了JSP的开发。 本章最后介绍了JSP文档的编写。 在JSP规范中允许使用XML语法格式来编写JSP页面,称为JSP文档。 可以使用XML编辑工具来编写JSP文档,也可以通过XSLT转换来产生JSP文档。 使用JSP文档,可以很方便地向客户端输出XML内容,当然,通过指定响应内容的MIME类型,也可以输出非XML的内容。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JSP 运行 原理