1、第第3章章 JSP语法语法3.1 JSP通用语法 掌握一门编程语言要从它的语法开始。本章在介绍JSP的通用语法和脚本元素的基础上,详细介绍JSP的内置对象、指令和动作。3.1JSP通用语法 JSP是由Sun 公司在Java语言上开发出来的一种动态网页制作技术,可以将网页中的动态部分和静态的HTML相分离。用户可以使用平常惯用的工具(如Dreamweaver)并按照平常的方式来书写HTML语句。然后,将动态部分用特殊的标记嵌入即可,这些标记常常以“%”开始并以“%”结束。3.1.1 JSP基本语法3.1.2注释 JSP的注释可分为三种:HTML 注释、隐藏注释和标准Java注释。1.HTML注释
2、 HTML注释在客户端显示,其语法格式如下:!comment 2.隐藏注释HTML注释会被客户端利用“查看源代码”看到,如果用户不想被客户端看到注释的内容,就应该将其嵌入到“”标记中。JSP编译器会将隐藏注释标记中的字符忽略掉,而不对该语句进行编译。例如:Hidden Comment TestA Test of Hidden Comments 3.标准Java注释 标准Java注释只能包含在脚本代码中。JSP容器不对该部分内容编译,也不会发送到客户端浏览器。标准Java注释的JSP语法如下:/comment 或/*comment*/3.2 JSP脚本元素 单击“下一步”按钮,弹出“摘要”界面。
3、JSP脚本由三个元素组成,即JSP表达式、JSP脚本程序和JSP声明。JSP表达式包含在“”标签内,JSP脚本程序包含在“”内,JSP声明包含在“”内。3.2.1表达式 表达式是对数据的表示,系统将其作为一个值进行计算和显示。1.语法格式 表达式的语法格式如下:JSP表达式是一个值,包含在“”中,在运行后被自动转化为字符串,然后插入到这个表达式所在的位置中。因为这个表达式的值已经被转化为字符串,所以用户能在一行文本中插入这个表达式。2.注意事项(1)用户不能用分号(;)作为表达式的结束符。(2)一个表达式元素可以是任何一个符合Java 语言规范的表达式,也可以由多个表达式组成。(3)表达式也能
4、作为其他JSP元素的属性值。3.2.2脚本程序 JSP脚本程序就是在JSP页面里嵌入的一段Java代码。1.语法格式 JSP脚本程序的语法格式如下:3.2.2脚本程序 2.注意事项(1)在脚本程序中也可以像表达式那样随意定义变量。(2)在脚本程序中可以使用任何隐含的对象和任何用声明过的对象,可以编写JSP语句。(3)任何HTML文本标记必须写在脚本程序,即“”对之外。(4)当JSP编译器收到客户端的请求时,脚本程序就会被执行。如果脚本程序有显示内容,这些显示的内容被保存在out 对象中。3.2.3声明 JSP声明就是在JSP页面中声明Java方法或变量等。1.语法格式 JSP声明的语法格式如下
5、:3.2.2脚本程序 2.注意事项(1)用户可以一次性声明多个变量和方法,但一定要以分号(;)结束变量声明,因为任何内容都必须是有效的Java 语句。(2)用户可以直接使用在“”对中已经声明的变量和方法,不需要对它们重新进行声明。(3)一个声明仅在一个页面中有效。如果要使一些声明在每个页面中都可用,最好把它们写成一个单独的文件,然后用或元素包含进来。(4)声明不能产生任何输出,它通常用作JSP表达式和脚本代码之间的连接。3.3JSP指令 JSP指令是为JSP引擎设计的,JSP指令并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面的相关信息。JSP指令共有三种类型,即 page指令、in
6、clude指令和 taglib指令,包含在“”内。page 指令用于设置 JSP页面的属性;include 指令用于在 JSP页面嵌入其他文件;taglib 指令用于在JSP页面中创建和使用自定义标签。JSP指令的语法格式如下:3.3.1include指令 include指令用于在运行时将HTML文件或JSP页面嵌入到另一个JSP页面。其语法格式如下:其中,“relativeURL”表示要嵌入文件的路径,它可以是文档相对路径或站点相对路径。3.3.2page指令page指令用于设置 JSP页面的全局属性,其语法格式如下:3.3.3taglib指令 taglib指令的作用是将标签库描述符文件引入
7、到该页面中,并设置前缀。其语法格式如下:属性说明如下:(1)“URIToTaglibary”是指标签库表述符文件。“uri”是uniform resource identifier的缩写,即统一资源标记符,根据标签的前缀对自定义的标签进行唯一的命名。uri可以是URL(uniform resource locator)、URN(uniform resource name)以及一个相对或绝对路径。(2)“prefix”表示自定义标签前的前缀。3.4JSP内置对象 为了简化页面开发的复杂度,JSP提供了一些可在脚本中使用的内置对象,在使用这些内置对象之前不需要对它们进行声明。通过使用这些对象,可以
8、使用户更容易收集客户端发送的请求信息,并响应客户端的请求以及存储客户信息。内置对象的名称是 JSP的保留字,JSP使用内置对象来访问网页的动态内容,它一般分为输入/输出对象、作用域通信对象、Servlet对象和错误对象四类。3.4.1输入/输出对象输入/输出对象用于控制页面的输入和输出,访问同请求和响应有关的数据,它包括request、response和out对象。1.request对象request 对象主要用于接收客户端通过HTTP 协议传输到服务器端的数据。客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。2.response对象response对象
9、主要用来向客户端发送数据,如Cookie HTTP文件头信息等。response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。3.out对象 out对象创建输出流,用来向客户端输出显示信息,它是javax.servlet.jsp.JspWriter 类的实例,其主要方法如下:3.4.2作用域通信对象1.session对象Web服务器为每个用户发送的多个请求创建会话,会话状态的维持是Web应用开发者必须面对的问题。session对象用来在每一个用户之间分别保存用户信息,对于那些希望通过多个页面完成一个事务的应用是非常有用的。2.application 对象application对
10、象用来存储有关文档运行环境的信息。与session对象相比,application对象所保存的对象可以被所有用户共享,而session对象则是每个用户专用的。3.PageContext 对象PageContext对象的主要功能是让JSP容器控制其他隐含对象,如对象的生成与初始化、释放对象本身等。PageContext对象为JSP默认的隐含对象,以及其他可用的对象提供了基本的处理方法3.4.3Servlet对象JSP引擎为每个JSP生成一个Servlet,Servlet对象提供了访问Servlet信息的方法和变量。Servlet对象包括page对象和config对象。1.page对象page对象
11、是java.lang.Object类的一个实例,使用 page 对象可以访问 Servlet类的所有变量和方法。2.config对象config对象用于存储在编译JSP页面的过程中创建的Servlet的信息,它被封装为javax.servlet.ServletConfig 接口,当初始化一个Servlet时,容器把某些信息通过config对象传递到应用该Servlet的对象中。3.4.4错误对象错误对象用于处理JSP页面中产生的错误,常用的错误对象是exception对象。exception对象只能用于由page指令的isErrorPage属性指定的错误处理页。它是java.lang.Thro
12、wable类的实例,其主要方法如下:(1)getMessage():使用该方法可以返回错误信息。(2)printStackTrace():使用该方法可以以标准错误的形式输出一个错误和错误的堆栈。(3)toString():使用该方法可以以字符串的形式返回一个对异常的描述。3.5JSP动作JSP动作利用XML语法格式的标记来控制Servlet引擎的行为,利用JSP动作可以动态地插入文件。JSP中的动作使用“jsp”作为前缀,且动作中的属性区分大小写。3.5.1jsp:forward动作1.语法格式及说明动作将当前页面的执行过程终止,忽略它的输出,并重定向到一个静态资源、JSP页面,或者一个程序段
13、。其语法格式如下:jsp:forward page=relativeURL|/如果添加参数,则其语法格式如下:jsp:forward page=relativeURL|jsp:param name=parameterName value=parameterValue|/2.属性及用法(1)page 属性用于说明用户将要重定向的文件的文件名或URL,这个文件可以是JSP程序或者其他能够处理request 对象的文件(如asp、cgi、php文件等)。这个文件名可以是一个表达式或是一个字符串,它们描述了重定向文件的相对URL。(2)标签能够向目标文件传送参数名和值,“name”指定参数名,“val
14、ue”指定参数值。如果用户使用了标签,参数被发送到一个动态文件,参数可以是一个或多个值,而这个文件却必须是动态文件。要传递多个参数,则可以在一个JSP文件中使用多个将多个参数发送到一个动态文件中。3.5.2jsp:include动作1.语法格式及说明动作可以将外部的静态或动态资源(包括在当前页面中的资源)插入到JSP页面的特定位置。其语法格式如下:jsp:include page=relativeURL|flush=true/还可以使用动作元素设置参数,语法如下:jsp:include page=relativeURL|flush=true jsp:param name=parameterNa
15、me value=parameterValue|/2.属性及用法(1)page:指定被包含资源的相对路径,该路径相对于当前JSP页面的URL,它不能包含协议名、端口号和域名。(2)flush:设置是否刷新当前页面的缓冲区。(3)param:指定附加的request参数。3.5.3jsp:plugin动作1.语法格式及说明动作用于在JSP页面中嵌入在客户端运行的Java程序(如Applet和JavaBean等),其语法格式如下:jsp:param name=parameterName value=parameterValue|/text message for user 3.5.3jsp:plu
16、gin动作2.属性及用法(1)type=bean|applet:plugin 将要执行的对象的类型,用户必须指定bean 或者applet,因为这个属性没有缺省值。(2)code=classFileName:plugin 将要被Java 插件执行的Java类的名字,它的名字必须包含.class 扩展名,并且这个code 定义的Java 插件名必须保存在codebase 属性指定的目录中。(3)codebase=classFileDirectoryName:指定将要被执行的Java Class 文件的目录(或者是路径),如果用户没有提供此属性,那么将使用JSP文件的目录。(4)name=inst
17、anceName:这个属性给出了bean 或applet 实例的名字,以便JSP文件调用。(5)archive=URLToArchive,:archive的值是一些由逗号分开的文件名,这些文件名都是一些将要使用的class,将它们预装在codebase 目录下,可提高applet 程序的执行效率。3.5.3jsp:plugin动作(6)align=bottom|top|middle|left|right:定义了由applet 或bean 产生的图形在结果页面上的显示位置.(7)height=displayPixels 和width=displayPixels:指定applet 或bean 所要
18、显示图形大小的初始值,displayPixels为数字,单位为像素。(8)hspace=leftRightPixels积vspace=topBottomPixels:指定applet 或bean 所显示的图形在屏幕上下左右所需的余量,取值必须是一个很小的非零数字,单位为像素。(9)jreversion=JREVersionNumber|1.1:指定applet或bean运行所需的Java Runtime Environment(JRE)的版本号,缺省值是1.1。(10)nspluginurl=URLToPlugin:指定Netscape Navigator 用户能够使用的JRE 的下载地址,此
19、值为一个标准的URL,可以带有协议名、端口号或域名。(11)iepluginurl=URLToPlugin:IE用户能够使用的JRE 的下载地址,此值为一个标准的URL,可以带有协议名、端口号或域名。(12)jsp:param name=parameterName value=parameterValue|/:此属性向applet 或bean 传送参数名或参数值,特别是传送一个以上的参数名字和值时,可使用多个带有元素的标签。(13)text message for user:如果Java 插件不能启动时,提示给用户的信息。如果Java 插件能够启动,而applet 或bean 不能启动,那么浏
20、览器会弹出一个出错信息。3.5.4jsp:useBean动作1.语法格式及说明JavaBean是可以在多个应用程序中重复使用的组件(后续章节有详细介绍),JSP中对JavaBean的使用正是通过来完成的。寻找或者实例化一个JavaBean,可在JSP页面中提供 JavaBean 组件。其语法格式如下:jsp:useBeanid=beanInstanceNamescope=page|request|session|applicationclass=package.class|type=package.class|class=package.class type=package.class|bea
21、nName=package.class|type=package.class/2.属性及用法(1)id=beanInstanceName:id 属性定义了在用户所指定范围内,用户所要提取的Bean 的名字,用户能在后面的同一个JSP文件的表达式或脚本程序中看到这个变量名,它区别于不同的Bean。这个变量名对大小写敏感,一定要注意符合用户所使用的脚本语言的规定。如果用户用的是Java编程语言,那么就应该遵从Java 的语言规范。如果这个Bean 已经在别的中创建,那么这个id 的值必须与那个id 的值一致。(2)scope=page|request|session|application:sco
22、pe 定义了Bean 存在的范围以及id 变量名的有效范围。(3)class=package.class:使用new 关键字以及class 构造器从一个class 中示例一个Bean。这个class 不能是抽象的,必须有一个公用的、没有参数的构造器。这个package 的名字区别大小写。(4)type=package.class:如果这个Bean 已经在指定的范围中存在,那么给这个Bean指定一个新的数据库类型。如果用户没有使用class 或beanName 指定type,Bean 将不会被示例。package 和class 的名字区分大小写。(5)beanName=package.class
23、|type=package.class:使用java.beans.Beans.instantiate 方法从一个class 或连续模版中示例一个Bean,同时指定Bean 的类型。beanName 可以是package 和class 也可以是表达式,它的值会传给Beans.instantiate.type,其值可以和Bean 相同。package 和class 名字区分大小写。3.5.5jsp:setProperty动作1.语法格式及说明用来设置JavaBean在JSP页面中的属性,其语法格式如下:jsp:setProperty name=beanInstanceNameproperty=*|
24、property=propertyName param=parameterName|property=propertyName value=string|/2.属性及用法(1)name:描述了Bean实例的名字,而这个Bean实例已经存在或已经由标签创建完成。(2)property=*:储存用户输入的所有数据(被称为请求参数),用于匹配Bean 中的属性。Bean 中的属性的名字必须和request 对象中的参数名一致,这个参数名通常来自于HTML 元素和用户的输入。(3)property=propertyName param=parameterName:使用request 中的一个参数值来指
25、定Bean 中的一个属性值。其中,property指定Bean 的属性名,param 指定request 中的参数名。如果Bean 属性和request 参数的名字不同,那么就必须指定property 和param;如果相同那么就只需要指明property即可。如果参数值为空(或未初始化),那么对应的Bean 属性也不会被设定。(4)property=propertyName value=string|:使用指定的值来设定Bean 属性,这个值可以是字符串,也可以是表达式。如果值是字符串,那么它就会被转换成Bean 属性的类型,如果它是一个表达式,那么这个表达式的数据类型也必须和它将要设定的属
26、性值的类型一致。如果参数值为空,那么对应的属性值也不会被设定。3.5.6jsp:getProperty动作1.语法格式及说明动作用来获取Bean的属性的值并将之转化为一个字符串,然后将其插入到输出的页面中,与用来设置属性的动作相对应。其语法格式如下:2.属性及说明(1)name=beanInstanceName:name为必选属性,其值为Bean的名称,由动作标记中的id指出。(2)property=propertyName:property也为必选属性,其值为Bean属性的名字,可以显示。本 章 小 结本章在介绍JSP的通用语法规则和脚本元素的基础上,详细介绍了JSP的内置对象、指令和动作。通过本章的学习,要求对JSP的基本语法有一个较为全面的认识,能够利用相应的指令、内置对象和动作等进行基础的编程。