第2章 JSP基础
使用JSP开发动态网页是目前比较流行的。JSP技术是以Java为基础,因此同一个JSP应用可以部署运行在不同的平台上,同时,丰富的Java技术也给JSP的开发提供了不少特。所以,在这一章,用户要学习的东西是什么是JSP,JSP的工作机制,JSP语法规范等一些JSP的基础技术。
2.1 JSP简介
在传统的页面HTML文件中加入Java程序片段(Scriptlet)和JSP标记(Tag),就构成了JavaServer Pages(JSP)页面,JSP使得我们能够分离页面的静态HTML和动态部分,动态部分的代码放在特殊的 ”<%  %>” 标记之间。
JSP页面在用户第一次访请求时,会被编译成Servlet文件,然后由这个Servlet 来处理用户的请求,它会首先执行其中的程序片段和JSP标记中的操作,然后将执行结果以HTMl的形式返回。
在JSP页面中,除了普通的HTML代码,其他的重要有以下三种:脚本元素,指令,动作。脚本元素用来嵌入Java代码,这些Java代码将成为转换得到的Servlet的一部分;JSP指令用来从整体上控制Servlet的结构;动作用来引入现有的组件或者控制JSP引擎的行为。同时,JSP定义了一组可以直接使用的变量(预定义变量),如:request,response等。
图2-1是JSP技术生成成动态页面内容的过程。
图2-1 JSP技术生成动态页面
• 2 •
JSP&Servlet开发详解2.2 JSP语法概要
JSP文件包含如下内容:
z JSP指令(或叫做指示语句)
z JSP声明
z Java程序片断(Script)
z变量数据的Java表达式
z隐含对象
2.2.1 JSP指令
JSP指令(在<%@和%>之间)用来设置和整个JSP页面相关的属性,如网页的编码方式(pageEncoding)和脚本语言(language)等。JSP指令的一般语法形式为:<%@ 指令名属性=”值” %>
常用的三种指令为page、include和taglib。
Page指令可以指定所使用的脚本语言、JSP代表的Servlet实现的接口、Servlet 扩展的类以及导入的软件包。
JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML 文件或文本文件。如果被包含的是JSP文件,那么被包含的JSP文件中的Java程序也会被执行。Include指令语法为:<%@ include file=”fileURL”%>。
Taglib指令用于引入JSP页面中需要使用的标记库的定义,以便在页面中使用标记库中定义的标记。开发人员也可以定义自己的标签库以及其定义标签的前缀,格式为<% @ taglib %>。
2.2.2 JSP声明
JSP页面中可以声明变量和方法,所声明的变量和方法仅在当前页面内有效。声明不会产生任何输出内容。当JSP页面初始化时,就会初始化声明,从而可以被其他的脚本元素如:声明定义、脚本片段、表达式和表达式语言所使用。声明的语法格式如下:
< % ! 声明1;声明2;。。。%>
例如:
<% ! int I = 0; %>
<% ! String name = new String(“Tony”) %>
2.2.3 Java程序片段(Script)
在JSP文件中,可以在<% 和 %>标记间直接嵌入任何有效的Java语言代码。这样嵌入的代码片段称为
Script。如果在page指令中没有制定method属性,则生成的代码默认为service方法的主体,即等价于Servlet的service方法。
java修改html文件看下面这个Java程序片段:
<%
JSP&Servlet开发详解• 3 •
Int a = 0;
While(a<3) {
%>
a = <%=a%>
<%
a++;
}
%>
上面的代码中while语句由两段<% 和 %>之间的代码构成。分段的while语句可以循环的输出。该JSP的输出内容为:a = 0 a = 1 a =2。
2.2.4 数据变量的Java表达式
JSP表达式标记为<%= 和 %>。该表达式的值会显示在网页上。Int或float类型的值都会自动转换成字符串的形式显示出来。如:
<html>
<head>
<title>Java Expression</title>
</head>
<body>
<%! int hitcount = 0 ;%>
<%= hitcount++ %>times
</body>
</html>
在这个页面中,每次你刷新一次后,就会发现数字会增加1。如果从多个浏览器窗口同时访问这个页面,则访问的都是同一个hitcount变量。
2.2.5 隐含对象
在编写JSP程序时,可以直接使用Servlet/JSP容器提供的隐含对象。使用这些对象的引用变量时不需要做任何变量声明。其隐含对象包括request、response、pageContext、application、out、config、page、session、exception九个。我们将在后面的章节里面详细介绍这些对象。
2.3 JSP工作原理
一个JSP文件的执行过程可以分为以下几个步骤:
z浏览器客户端向JSP引擎发出对JSP页面的请求;
z JSP引擎将对应JSP页面转换成Java Servlet源代码;
z JSP引擎编译生成源代码,生成.class文件;
z JSP引擎加载运行对应的.class文件,生成响应的结果页面;
z JSP引擎把响应的输出结构发送到浏览器端;
步骤流程如图2-2所示。
• 4 •
JSP&Servlet开发详解
图2-2 JSP工作原理
JSP引擎管理JSP页面生命周期的两个阶段:转换阶段(translation phase)和执行阶段(execution phase)。当有一个对JSP页面的请求到来时,JSP引擎检验JSP页面的语法是否正确,将JSP页面转换为Servlet源文件,然后调用javac工具类编译Servlet源文件生成字节码文件,这一阶段是转换阶段。接下来,Servlet引擎加载转换后的Servlett类,实例化一个对象处理客户端的请求,在请求处理完成后,响应对象被JSP引擎吸收,引擎将HTML格式的响应信息发送到客户端,这一阶段是执行阶段。
从整个过程中我们可以知道,当第一次加载JSP页面时,因为要将JSP文件转换为Servlet类,所以响应速度较慢。当再次请求时,JSP引擎就会直接执行第一次请求时产生的Servlet,而不会再重新转换JSP文件,所以其执行速度和原始的Servlet执行速度几乎就一样了。在JSP执行期间,JSP引擎会查看JSP文件,看是否有更新或修改。如果有更新或修改,JSP引擎会再次编译JSP或Servlet;如果没有更新或修改,就直接执行前面产生的Servlet。
在转换阶段生成的页面实现类及对应的编译结果,在TOMCAT中是自动放置在Tomcat安装目录下的work\Catalina\localhost\应用名\org\apache\jsp下。
JSP&Servlet开发详解• 5 • 2.4 JSP基本规范
2.4.1 文件命名规则
JSP中使用的文档类型包括常规JSP页面、静态包含段和JSP文档等。
根据XML语法调整格式的JSP页成为JSP文档(JSP document)。此类文档的特殊性在于它们是识别“命名空间”的文档,不是普通的JSP页。
为此,可将JSP文档称为“XML视图”。JSP文档的另一个优势在于由识别XML 的工具操纵。JSP文档在语法中将JSP:root用作特殊元素,并作为JSP文档自身的根元素。JSP文档包含JSP指令元素、JSP脚本元素、JSP标准动作、JSP定制操作、jsp:text元素和其他XML部分。
JSP文档内部使用的其他元素如下:
z Jsp.directive.page
z Jsp.directive.include
z Jsp.declaration
z Jsp.scriptlet
pression
这些元素消除了非XML类型标记,代之以XML标记,从而有助于实现JSP页面的“XML化”。
JSP页面文件使用扩展名.JSP来表示。这些JSP页面可以由客户端直接请求,也可以被其他JSP页面或Servlet包含和重定向。
静态包含段也成为“JSP段”或“JSP碎片”,一般使用扩展名.jspf,也可以使用其他任何扩展名。
在JSP文档中,也就是以XML格式定义的JSP页面,默认使用文件扩展名.jspx。
在Web应用的配置描述文件l中元素jsp-property-group就可以对没有使用上述扩展名的文件定义定义具体的文档类型
2.4.2 空白和JSP空白元素
在HTML和XML中,空白通常都不起作用。JSP中同样遵循这个规定。在实际的开发中,有时候需要开发人员来控制JSP页面最终输出的HTML文档格式,空白有时候就会发挥作用。
JSP中空元素的表示遵循XML规范,表现为如下几种形式:
<x:foo></x:foo>
<x:foo/>
<x:foo><% -- 注释 -- %></x:foo>
2.4.3 注释
在JSP页面中,注释主要有两个作用:1、为代码作注释;2、将某段代码去掉。JSP页面的注释类型也有三种:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。