JSP基本语法
- JSP基本语法的学习包括JSP页面的基本结构、JSP的脚本元素、JSP的指令和JSP的常用动作。
1. JSP页面的基本结构
- 一个JSP页面是通过在HTML标签的基础上嵌入JSP动作和指令、CSS、Java变量和方法(Java代码段)、其他脚本元素(如JavaScript)等组成的。实际上,JSP基本元素为了和HTML的标签进行区别,JSP标记都以
"<%"
或"<jsp"
开头,以"%>"
或">"
结尾。举个例子:
<%@ page contentType="text/html; charset=UTF-8" %>
<html>
<head>
<title>JSP页面的基本结构实例</title>
<meta http-equiv = "Content-Type" content = "text/html;charset = UTF-8">
</head>
<body>
<% !int sum = 0;
int x = 1;
%>
<%
while(x<=10){
sum += x;
++x;
}
%>
<p>1加到10的结果是:<%= sum %></p>
<!-- 注意,在上一句中%=之间不能有空格 -->
<p>现在的时间是:<%= new java.util.Date() %></p>
</body>
</html>
- 在上面代码示例中,第一行是JSP的 page 指令,他描述JSP文件转换成JSP服务器所能执行的 java 代码时使用的控制信息,如“contentType”用于指定内容类型,“pageEncoding”用于指定页面的编码方式。JSP中的声明以
"<%!"
或"<%"
开头,以"%>"
结尾。"<%= sum %>"
是表达式,在JSP中表达式以"<%="
开头,以"%>"
结尾。
2. JSP的脚本元素
- 在JSP页面中,经常使用JSP的变量、方法、表达式、脚本、注释来实现一些功能,下面分别介绍这些基本元素的使用。
(1)变量和方法的声明
- 在JSP页面中可以声明一个或多个符合java规范的合法变量和方法,声明的变量和方法将在JSP页面使用,并将在JSP页面初始化时被初始化。JSP中声明的语法格式如:
<%!语句1;语句2;...[语句n]%>
- 需要注意的是,声明以
"<%!"
或"<%"
开头,以"%>"
结尾;一个声明仅在一个页面中生效;可以直接使用在<%@ page%>
中被包含起来的已经声明的变量和方法,不需要对其重新声明;如果想在每个页面都使用某些声明,最好把他们写成一个独立的文件,然后用"<%@ include%>"
指令或"<jsp:include>"
动作包含起来。
(2)表达式
- JSP允许在
"<%="
和"%>"
之间插入一个表达式,表达式由变量、常量、运算符组成。表达式可以将数据转换成一个字符串并直接在网页上输出。表达式的语法格式为:<%=表达式%>
- JSP的表达式没有分号。表达式常用在向页面输出内容、生成动态链接地址、动态指定 form 表单处理页面。注意,在
"<%"
与"="
之间不能有空格。
(3)脚本
- JSP脚本是一段Java代码,在请求期间执行,可以使用JSP页面谁定义的变量、方法、表达式或者JavaBean。脚本定义的变量和方法在当前整个页面内有效,但不会被其他线程共享,用户对该变量的作用不会影响其他用户,当变量所在页面关闭时该变量就会被销毁。
(4)注释
- 程序中注释的作用是提高程序的可读性、可维护性和可扩展性。在JSP中注释有3种类型:隐藏注释、Java注释和HTML注释。
4.1:隐藏注释- 隐藏注释是JSP的标准注释,写在JSP程序中,用于描述和说明JSP程序代码,在发布JSP网页时完全被忽略,也不会输送到客户浏览器上,即JSP页面运行后页面上看不到注释内容,且查看源文件(在客户端上)也看不到注释内容。其语法格式为:
<%-- 注释语句 --%>
。 - 举个例子:
- 隐藏注释是JSP的标准注释,写在JSP程序中,用于描述和说明JSP程序代码,在发布JSP网页时完全被忽略,也不会输送到客户浏览器上,即JSP页面运行后页面上看不到注释内容,且查看源文件(在客户端上)也看不到注释内容。其语法格式为:
<body>
<h3>例子</h3>
<hr>
<%-- 注释内容,客户端页面与源文件不可见 --%>
<hr>
</body>
4.2:Java注释
- Java注释与隐藏注释相似,在发布网页时不会在页面上显示,在浏览器的源文件中也看不到注释内容。其语法格式为:
<%/* 注释内容 */%>
或<%// 注释内容 %>
4.3:HTML注释
- 在发布网页时可以在浏览器源文件窗口中看到HTML注释,即注释的内容会被诉讼到客户端浏览器中,但是不会在页面上显示。该类注释中也可以使用JSP表达式。其语法格式为:
<!-- 注释语句[<%= 表达式 %>] -->
。注意,在源文件上看到的是表达式结果,而不是表达式本身。 - 举个例子:
<body>
<hr>
<!-- 例子<%=new java.util.Date()%>-->
<hr>
</body>
- 在源文件中显示为:
<body>
<hr>
<!-- 例子Fri Feb 14 16:49:56 CST 2020-->
<hr>
</body>
3. JSP的指令
- 指令用来描述JSP文件转换成JSP服务器所能执行的Java代码时使用的控制信息,用于指定整个JSP页面的相关信息,并设置JSP页面的相关属性。常用的JSP指令有 page 指令、 include 指令和 taglib 指令。
(1)page 指令
- 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.1:language 属性
- language 属性用于指定JSP页面中使用的脚本语言,其默认值为Java。根据JSP 2.0规范,目前只可以使用Java语言,如果使用其他语言则会产生异常。
1.2:extends 属性
- extends 属性用于指定JSP编译器父类的完整限定名,此JSP页面产生的 Servlet 将由该父类扩展而来。例如:
<%@page extends = "javax.servlet.http.HttpServlet"%>
。一般不建议使用该属性。JSP容器可以提供专用的高性能父类,如果指定父类,可能会限制JSP容器本身具有的能力。
1.3:import 属性
- import 属性用于导入JSP页面使用的Java API类库。import 属性是所有 page 属性中唯一可以多吃设置的属性,用来指定JSP页面中所用到的类。如果需要在一个 JSP 页面中同时导入多个Java包,可以逐一说明,也可以使用逗号分隔。
1.4:session 属性
- session 属性用于指定是否可以使用 session 对象,若允许页面参与HTTP会话,就设置为true,否则设为false,其默认为 true。
1.5:buffer 属性
- buffer 属性用于设定页面的缓冲区大小(字节数),属性值为 none 时表示禁用缓冲区,其默认值为8KB。
1.6:autoFlush 属性
- autoFlush 属性用于指定JSP页面缓冲区是否自动刷新输出,默认值为true。如果该属性值为true,则页面缓冲区满时自动刷新输出;否则,当页面缓存区满时抛出一个异常。
1.7:isThreadSafe 属性
- isThreadSafe 属性用于指定JSP页面是否能够处理一个以上的请求,如果为 true,则该页面可能同时收到JSP引擎发出的多个请求;反之,JSP引擎会对收到的请求进行排队,当前页面在同一时刻只能处理一个请求。其默认值为 true。建议将该属性设置为 true,确保页面使用的所有对象都是线程安全的。
1.8:info 属性
- info 属性用于指定JSP页面的相关信息文本,无默认值。
1.9:errorPage 属性
- errorPage 属性用于指定错误页面。当页面出现一个未被捕获的异常时,错误信息将被 throw 语句抛出,而被设置为错误信息网页的JSP页面将利用 exception 隐含对象获取错误信息。relativeURL 默认设置为空,即没有错误处理页面。
1.10:contentType 属性
- contentType 属性用于指定内容 MIME 类型和JSP页面的编码方式。对于普通JSP页面,默认的contentType 属性值为“text/html;charset=ISO-8859-1”
1.11:pageEncoding 属性
- pageEncoding 属性用于指定JSP页面的编码方式,默认值为ISO-8859-1。
1.12:isErrorPage 属性
- isErrorPage 属性指定JSP页面是否为处理异常错误的页面,其默认值为 false。如果将 isErrorPage 属性设置为 true,则固有的 exception 对象脚本元素可用。
(2)include 指令
- include 指令用于在当前JSP页面中加载需要插入的文件代码,即为页面插入一个静态文件,如JSP页面、HTML页面、文本文件或一段Java程序,这些加载的代码和原有的JSP代码合并成一个新的JSP文件。include 指令的语法格式如下:
<%@include file="文件名"%>
。其中,文件名指被包含的文件,include 指令只有一个 file 属性,该属性用于指定插入的包含文件的相对路径,无默认值。 - 在JSP中用 include 指令包含一个静态文件,同时解析这个文件中的JSP语句。使用JSP的 include 指令有助于实现JSP页面的模块化。
(3)taglib 指令
- taglib 属性用来自动页面中使用的标签库以及自定义标签的前缀,taglib 指令语法格式为:
<@%taglib uri="tagLibraryURI" prefix="tagPrefix"%>
。
3.1:uri 属性
- uri(统一资源标识符)属性用于指定标记库的存放位置,并告诉JSP引擎在编译JSP程序时如何处理指定标签库中的标签,无默认值。uri 属性可以是 TLD(标记库描述符)文件或web.xml 文件中定义的标记库的符号,也可以是TLD 文件或 JAR 文件的相对路径。
3.2:prefix 属性
- prefix 属性用于指定标记库中所有动作元素名中使用的前缀,无默认值。
参考书籍:马军霞、张志锋、皇安伟等编著的《JSP程序设计实训与案列教程》第二版