第5章 JSP基础知识
JSP页面主要由HTML、CSS、Java代码段(脚本元素)、注释、JSP指令和JSP动作等构
成。本章主要讲解JSP页面的基本语法构成。
本章主要内容如下所示。
(1)JSP页面的基本结构。
(2)JSP的注释。
(3)JSP的脚本元素。
(4)JSP的指令。
(5)JSP的动作。
5.1 JSP页面的基本结构
一个JSP页面由以下基本元素组成。
(1)HTML标签。
(2)CSS。
(3)变量和方法。
(4)Java代码段。
(5)JSP动作和指令。
(6)其他脚本元素(如JavaScript)等。
本节通过一个JSP实例,了解JSP页面的基本语法构成。具体的JSP基本语法部分将
在以后的章节里详细介绍。
【例5-1】 JSP页面的基本结构实例(pageStructure.jsp)。 
1. <%@page contentType="text/html" pageEncoding="UTF-8"%> 
2. <html> 
3. <head> 
4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
5. <title>JSP 页面的基本结构实例</title> 
6. </head> 
7. <body> 
8. <%!int sum=0; 
9. int x=1; 
10. %> 
11. <% 
12. while (x <=10) 
13. { 
14. sum+=x; 
15. ++x; 
16. }

170 
17. %> 
18. <p>1 加到10 的结果是:<%=sum%></p> 
19. <p>现在的时间是:<%=new java.util.Date()%></p> 
20. </body> 
21. </html> 
本程序的功能是计算1加到10的结果并将结果在页面第一行中显示,在第二行显示当
前系统时间,如图5-1所示。
图5-1 页面运行效果
从例5-1中可以看到,JSP页面除了比普通的HTML页面多一些Java代码、指令和动
作外,两者的基本结构相似。实际上,JSP 基本元素是嵌入在HTML 页面中的,为了和
HTML的标签有所区别,JSP标记都以“<%”或“<jsp”开头,以“%>”或“>”结尾。下面
对该JSP文件进行详细介绍。
第1行是JSP的page指令,它描述JSP文件转换成JSP服务器所能执行的Java代码
的控制信息,如JSP页面所使用的语言、对处理内容是否使用缓存、是否线程安全、错误页
面处理、指定内容类型、指定页面编码方式等。例如,contentType="text/html"用于指定
内容类型,pageEncoding="UTF-8"用来指定页面的编码方式。
第2~7行是一些HTML常用的标签,在第3章中已介绍,这里不再赘述。
第8~10行是JSP中的声明。JSP页面中用到的变量和方法与Java程序中用到的变
量和方法的声明是相同的,不过在JSP页面中声明以“<%!”或者“<%”开头,以“%>”结尾。
本例中对两个整型变量的声明并初始化,也可以写成“<%!intsum=0;intx=1;%>”。
第11~17行是JSP中的程序代码,即JSP中的脚本。JSP的程序代码封装了JSP页面
的业务处理逻辑———Java代码程序,以“<%”开头,以“%>”结尾。
第12~16行是一段标准的Java程序,其功能是对1加到10的计算。
第18行,“<p>1加到10的结果是:<%=sum%></p>”中的“<%=sum%>”是表
达式,在JSP中表达式以“<%=”开头,以“%>”结尾。本行语句用于输出1加到10的结果。
第19行,“<p>现在的时间是:<%=newjava.util.Date()%></p>”中的“<%= 
newjava.util.Date()%>”是使用表达式以及Java类库中的Date类获取系统的当前时间。
第20、21行是HTML的基本标签。
通过上面典型的JSP页面可以看出,JSP页面就是在HTML 或者XML 代码中嵌入
Java语法或者JSP元素,从而实现系统的业务功能,这一点读者将会在以后的学习中有更

171 
深刻的体会。
想一想:JSP页面设计要遵循既定的语法规则和开发规范。你对软件开发规范的重要
性有什么认识? 作为一名软件工程师,你认为应该遵循哪些工程职业道德规范? 
5.2 JSP的3种常用注释
程序中注释的作用是为了提高程序的可读性、可维护性和可扩展性,所以一个Java 
Web项目中需要各种各样的注释。在JSP中注释有3种类型:隐藏注释、HTML注释和
Java语言注释。下面分别介绍这3种注释的使用。
5.2.1 隐藏注释及其应用实例
隐藏注释是JSP的标准注释,写在JSP程序中,用于描述和说明JSP程序代码,在发布JSP 
网页时完全被忽略,也不会输送到客户浏览器上。当希望隐藏JSP程序的注释时是很有用的。
其语法格式为 
<%--注释语句--%> 
注释语句为要添加的注释内容。
【例5-2】 隐藏注释实例(hideNotes.jsp)。 
<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>隐藏注释实例</title> 
</head> 
<body> 
<h3>本页面是演示隐藏注释的功能,在JSP 页面中的隐藏注释不会发布到客户端! 
</h3> 
<hr> 
<%--这一行注释在发布网页时不会被看到--%> 
<hr> 
</body> 
</html> 
hideNotes.jsp运行效果如图5-2所示。在发布网页时看不到注释,在客户端浏览器源
文件中也看不到注释。在浏览器中查看源文件的方法:单击“查看”→“源文件”命令。
5.2.2 HTML注释及其应用实例
HTML注释在发布网页时可以在浏览器源文件窗口中看到,即注释的内容会被输送到
客户端的浏览器中。该注释中也可以使用JSP的表达式。
其语法格式为 
<!--注释语句[ <%=表达式%>] --> 
JSP常用
注释

172 
图5-2 hideNotes.jsp的运行效果以及源文件
其中,注释语句是文字说明,表达式为JSP表达式。
【例5-3】 HTML注释实例(HTMLNotes.jsp)。 
<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>HTML 注释实例</title> 
</head> 
<body> 
<h3>本页面是演示HTML 注释的功能,在JSP 页面中的HTML 注释会在客户端源文件中看
到,但是不会发布到页面上! 
</h3> 
<hr> 
<!--这一行注释在发布网页时不会被看到,在源文件中可以看到<% = new java.util. 
Date()%>--> 
<hr> 
</body> 
</html> 
HTMLNotes.jsp的运行效果如图5-3所示。在发布网页时看不到注释,但在源文件中
可以看到注释,而且表达式是动态的,即根据表达式的值输出结果。
5.2.3 Java注释及其应用实例
在JSP程序中,也可遵循Java语言本身的注释规则对代码进行注释,这样的注释和隐
藏注释相似,在发布网页时完全忽略,在浏览器的源文件窗口中也看不到注释内容。

173 
图5-3 HTMLNotes.jsp的运行效果以及源文件
其语法格式为 
<%/*注释语句*/%> 
或者 
<%//注释语句%> 
其中,注释语句为要添加的注释文本。
【例5-4】 Java注释实例(JavaNotes.jsp)。 
<%@p3age contentType="text/html" pageEncoding="UTF-8"%> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Java 注释实例</title> 
</head> 
<body> 
<h3>本页面是演示Java 注释的功能,在JSP 页面中的Java 注释不会发布到客户端! 
</h3> 
<hr> 
<%//这一行注释在发布网页时不会被看到,在源文件中也看不到%> 
<hr> 
</body> 
</html> 
JavaNotes.jsp的运行效果如图5-4所示。在发布网页时看不到注释,在源文件中也看
不到注释。

174 
图5-4 JavaNotes.jsp的运行效果以及源文件
5.3 JSP常用脚本元素
在JSP页面中,经常使用一些变量、方法、表达式以及脚本,下面分别介绍这些基本元
素的使用。
5.3.1 变量和方法的声明及其应用实例
在JSP页面中可以声明一个或者多个合法的变量和方法,声明后的变量和方法可以在
本JSP页面的任何位置使用,并将在JSP页面初始化时被初始化。
语法格式为 
<%!语句1; …;[ 语句n; ] %> 
其中,语句主要用来声明变量、方法。
在声明变量和方法时,需要注意以下几点。
(1)声明以“<%!”或者“<%”开头,以“%>”结尾。
(2)变量声明必须以“;”结尾。
(3)变量和方法的命名规则与Java中变量和方法的命名规则相同。
(4)可以直接使用在<%@ page%>中被包含进来的已经声明的变量和方法,不需要
重新声明。
(5)一个声明仅在一个页面中有效。如果想在每个页面都用到某些声明,最好把它们
写成一个单独的文件,然后用<%@include%>指令或<jsp:include>动作包含进来。
例如: 
<%! int i=0;%> 
JSP常用脚
本元素

175 
<%! int x ,y,z,a,b,c,sum;%> 
<%! String str="北京!";%> 
<%! Date date=new java.util.Date();%> 
【例5-5】 变量和方法的声明实例(declare.jsp)。 
<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>变量和方法的声明实例</title> 
</head> 
<body> 
<%! 
String str="JSP 技术带你走进动态网页开发时代!"; //变量声明 
%> 
<%! 
String print(){ //方法声明 
return str; 
} 
%> 
<%=print()%> 
</body> 
</html> 
declare.jsp的运行效果如图5-5所示。
图5-5 declare.jsp的运行效果
在declare.jsp中声明了一个字符串变量str和一个方法print(),该方法用来返回字符
串变量str的值。
5.3.2 表达式和脚本及其应用实例
1.表达式及其应用实例 
JSP中的表达式是由变量、常量和运算符组成,可以将数据转换成一个字符串并直接在
网页上输出。
表达式的语法格式为 
<%=表达式%> 
JSP的表达式中没有分号。

176 
JSP的表达式常用在以下几种情况。
(1)向页面输出内容。
(2)生成动态的链接地址。
(3)动态指定form 表单处理页面。
注意:在“<%”与“=”之间不要有空格。
【例5-6】 表达式实例(expression.jsp)。 
<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>表达式实例</title> 
</head> 
<body> 
<%! 
String name="清华大学出版社"; 
String urlAddress="www.tup.tsinghua.edu.cn"; 
String page="www.sohu.com"; 
%> 
<br> 
用户名: <%=name%> 
<br> 
<a href="<%=urlAddress%>">清华大学出版社网站</a> 
<br> 
<form action="<%=page%>"> 
</form> 
</body> 
</html> 
本例演示了表达式的几种常用方式,expression.jsp的运行效果如图5-6所示。
图5-6 expression.jsp的运行效果
2.脚本及其应用实例
JSP脚本即Script,也就是JSP中的代码部分,是一段Java代码,几乎可以使用任何
Java语法,它是在请求期间执行,可以使用JSP 页面所定义的变量、方法、表达式或者
JavaBean。脚本定义的变量和方法在当前整个页面内有效,但不会被其他线程共享,用户对
该变量的作用不会影响其他用户,当变量所在页面关闭时该变量就会被销毁。
脚本的语法格式为 
<%脚本语句%>

177 
【例5-7】 脚本实例(scriptlet.jsp)。 
<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>脚本实例</title> 
</head> 
<body> 
<%! 
int x=6; 
%> 
<table> 
<% 
if(x==1){ 
%> 
<tr> 
<td>欢迎登录,您的权限是管理员!<td/> 
</tr> 
<% 
} 
else{ 
%> 
<tr> 
<td>欢迎登录,您的权限是普通用户!<td/> 
</tr> 
<% 
} 
%> 
</table> 
</body> 
</html> 
scriptlet.jsp的运行效果如图5-7所示。
图5-7 scriptlet.jsp的运行效果
JSP中大部分功能的实现可以通过JSP脚本实现。使用脚本程序比较灵活,它所实现
的功能是JSP表达式无法实现的,所以脚本在JSP中非常重要。有关JSP脚本的内容在以
后的章节中涉及很多,读者可以在今后的开发中不断学习和应用。

178 
5.4 JSP常用指令
指令(Directive)描述JSP文件转换成JSP服务器所能执行的Java代码的控制信息,用
于指定整个JSP页面的相关信息,并设置JSP页面的相关属性。
常用的JSP指令有3种:page指令、include指令和taglib指令。
5.4.1 page指令及其应用实例
page指令用来定义JSP文件中的全局属性,它描述了与页面相关的一些信息,其作用
域为它所在JSP页面和其包含的文件。页面指令一般位于JSP页面的顶端,但是可以放在
JSP页面的任何位置,无论把<%@ page%>指令放在JSP文件的哪个地方,它的作用范
围都是整个JSP页面。为了JSP程序的可读性以及养成良好的编程习惯,最好把它放在
JSP文件的顶部。
在同一个JSP 页面中可以有多个page指令。在使用多个page指令时,其属性除
import属性外只能使用一次。
page指令的语法格式如下: 
<%@page 
[ language="java" ] 
[ extends="package.class" ] 
[ import="{package.class|package.*}, ..." ] 
[ session="true|false" ] 
[ buffer="none|8KB|sizeKB" ] 
[ autoFlush="true|false" ] 
[ isThreadSafe="true|false" ] 
[ info="text" ] 
[ errorPage="relativeURL" ] 
[ contentType="mimeType [ ;charset=characterSet ]" ] 
[ pageEncoding=" pageEncoding "] 
[ isErrorPage="true | false" ] 
%> 
下面分别对这些属性的含义和用法进行介绍。
1.language属性
【功能说明】 language属性用于指定JSP页面中使用的脚本语言,其默认值为Java。
根据JSP2.0规范,目前只可以使用Java语言。
例如: 
<%@page language="java" %> 
如果language属性指定了其他的脚本语言,将会产生异常。
2.extends属性
【功能说明】 extends属性用于指定JSP编译器父类的完整限定名,此JSP页面产生
的Servlet将由该父类扩展而来。
例如: 
JSP常用
指令