第4章JSP语法主要内容1.JSP页面的构成2.注释3.指令4.脚本元素5.动作元素6.错误处理结束1.JSP页面的构成JSP页面的构成:JSP原始代码中包含了Template(模板)数据和JSP元素两类。Templatedata指的是JSP引擎不处理的部分,即标记%……..%以外的部分,例如代码中的HTML的内容,这些数据会直接传送到客户端的浏览器。JSP元素则指的是由JSP引擎直接处理的部分,这一部分必须符合JSP语法,否则会导致编译错误实例:example.jspexample.jsppage指令jsp表达式2.注释2.1HTML注释静态HTML注释!--要注释的内容、文字、说明写在这里--动态HTML注释!--comment[%=expression%]--动态注释利用了JSP的表达式的语法,在客户端生成动态的注释。2.2JSP隐藏注释JSP隐藏注释在JSP源代码中,它不会被JSP引擎处理,也不会在客户端的Web浏览器上显示,格式如下:%--comment--%example1.jsp3.指令指令元素主要供JSP容器使用,为JSP容器提供相关的页面属性信息,用于指示JSP容器如何正确的翻译代码,或者执行特定的操作。JSP容器处理指令元素时,不直接产生可见的输出,如果遇到无法解释的元素则停止翻译,并报告错误。指令元素在JSP整个页面范围内有效。使用指令的格式如下:%@directivenameattribute=value%一个指令可以声明多个属性,如下所示:%@directivenameatttibute1=value1,……,atttibuteN=valueN%%@directivenameatttibute1=value1%@directivenameatttibute1=value2JSP语法规范定义了以下3种不同的指令。page指令:定义与JSP页面相关的属性,并和JSP引擎进行通信。include指令:定义JSP编译时需要插入的资源。taglib指令:定义JSP页面可以调用的一个客户标记库。3.1page指令page指令主要用来定义整个JSP页面的属性和相关功能,并由该指令和JSP引擎进行通信。一个JSP页面可以包含多个page指令,指令之间是相互独立的,并且指令中除import属性之外的每个属性只能定义一次,否则在JSP页面的编译过程中将出现错误。page指令可以运用于整个JSP文件,一般来说,page指令可以放在JSP页面的任何位置,但为了便于程序的阅读和格式规范,通常将page指令放在JSP页面的开始部分。page指令的格式为:%pageattribute1=“v1”,……,attributeN=vN%•page指令的详细格式如下:•%@page[language=scriptingLanguage]•[extends=className]•[import=importList]•[session=true|false]•[buffer=none|sizekb]•[autoFlush=true|false]•[isThreadSafe=true|false]•[info=info_text]•[errorPage=error_url]•[isErrorPage=true|false]•[contentType=ctinfo]•[pageEncoding=peinfo]•[isELIgnored=true|false]声明JSP页面中使用脚本语言的种类,目前只能用JAVA,默认值定义JSP页面产生的servlet所继承的父类需要导入的JAVA包的列表,这些包作用于程序段、表达式和声明。下面的包在JSP编译的时候就已经导入:java.lang.*javax.servlet.*javax.servlet.jsp.*javax.servlet.http.*指定JSP页面是否参与一个Http会话,默认值是true•page指令的详细格式如下:•%@page[language=scriptingLanguage]•[extends=className]•[import=importList]•[session=true|false]•[buffer=none|sizekb]•[autoFlush=true|false]•[isThreadSafe=true|false]•[info=info_text]•[errorPage=error_url]•[isErrorPage=true|false]•[contentType=ctinfo]指定到客户端的输出流的缓冲模式。Buffer属性为out对象定义输出流缓冲区,out.write()输出的信息会暂时存储在缓冲区中。取值为none将不缓冲,取值为数字表示缓冲,大小为“数字KB”。默认值是true,当缓冲区满时到客户端的输出将自动刷新;为false时若缓冲满时将出现溢出异常。默认值是true,可以使用多线程,运行JSP页面时可以响应多个客户的请求;取值为false时,JSP引擎一次处理客户请求。设置处理异常事件的JSP文件定义JSP面信息,如版权、开发日期等,用字符串来说明JSP中待说明的信息,将直接加入翻译好的页面中。可通过Servlet.gets.servletinfo()获得•page指令的详细格式如下:•%@page[language=scriptingLanguage]•[extends=className]•[import=importList]•[session=true|false]•[buffer=none|sizekb]•[autoFlush=true|false]•[isThreadSafe=true|false]•[info=info_text]•[errorPage=error_url]•[isErrorPage=true|false]•[contentType=“type;charset=CHARSET]设置此页是否为出错页,如果被设置为true,就可以使用exception对象。定义了JSP页面响应的MIME类型以及JSP页面的字符编码page.jspinclude指令用来指定JSP文件被编译时需要插入的资源,这个资源可以是文本、代码、HTML文件或JSP文件。在JSP容器把JSP网页翻译成Servlet程序时,会将指定的资源内容嵌入Servlet程序。指令格式:%@includefile=relativeURL%%@includefile=“相对位置%其中,relativeURL表示要包含的文件路径。如果路径以“/”开头,则表示该路径是参照JSP应用的上下关系路径,如果路径直接以目录名或文件名开头,则表示该路径是正在使用的JSP文件的当前路径。一旦JSP文件完成编译,该资源内容就不可变,要改变该资源内容,必须重新编译JSP文件。3.2include指令例如:计算某数据的平方根问题分析:在一个页面中使用指令标签”include”,调用另一页面文件完成计算功能。程序结构:程序包含两个文件:example2.jsp页面,Computer.jsp页面。程序算法example2.jsp:使用”include”指令标签静态包含页面Computer.jspComputer.jsp:1.创建表单,该表单包含一个文本框,从文本框获取正整数。2.计算整数的平方根3.输出平方根example2.jspComputer.jspComputer.jsp第二种程序结构直接将example2.jsp页面内容和Computer.jsp页面内容合并在一起,构成页面example3.jsptaglib指令是页面使用者用来调用自定义标记。可以把一些需要重复显示的内容自定义成为一个标记,以增加代码的重用程度,并使页面易于维护。格式如下:%@taglibtagdir=taglibURIprefix=tagPrefix%其中,tagdir用来表示标记描述符,也就是提供怎么知道标记描述文件和标签库的路径,可以是URL、绝对和相对路径、标记库描述文件;Prefix定义了JSP页面里要引用该标签时的前缀,需要注意的是,这些前缀不可以是jsp、jspx、java、javax、sun、servlet和sunw。3.3taglib指令•标记(Tag文件)是扩展名为.tag的文本文件,其结构几乎和JSP文件相同,一个Tag文件中可以有普通的HTML标记符、某些指令标记、Java程序片和Java表达式。JSP页面使用Tag标记动态执行一个Tag文件。当JSP页面调用一个Tag文件时可以使用带有标记体的Tag标记来执行一个Tag文件,Tag标记中的“标记体”就会传递给相应的Tag文件。标记体由Tag文件的jsp:doBody/标记负责处理,即jsp:doBody/标记被替换成处理“标记体”后所得到的的结果。•编写一个JSP页面:putImage.jsp和一个Tag文件Image.tag。JSP页面通过调用Tag文件来显示若干幅图像。Image.tag文件存放在当前目录的WEB-INF/tag文件夹下。•Image.tag使用jsp:doBody/处理标记体将图像显示在表格的单元中,要求表格每行有三个单元,重复显示一幅图像。4.脚本元素脚本元素(ScriptingElements)是JSP代码中使用最频繁的元素,它是用Java写的脚本代码。所有的脚本元素均是以“%”标记开始,以“%”标记结束,它可以分为如下三类:声明表达式Scriptlet声明是用来定义在程序中使用的实体,它是一段Java代码,可以声明变量也可以声明方法,它以%!标记开始,以%标记结束。声明格式%!declaration;[declaration;]……%声明变量%!inta,b;%%!Datedate%声明方法%!StringgetDate(){//返回当前时间Stringstr;str=(newjava.util.Date()).toString();returnstr;}%4.1声明每个声明仅在一个JSP页面内有效,如果要想在每个页面中都包含某些声明,可将这些声明包含在一个JSP页面中,然后利用前面介绍的include指令将该页面包含在每个JSP页面中。common.jspconnect.jsp表达式(Expression)以%=标记开始,以%标记结尾,中间的内容为Java一个合法的表达。表达式格式%=expression%表达式在执行时会被自动转换为字符串,然后显示在JSP页面中,表达式不能以;作为结束符号。例如:%=1+2+3%%=getDate()%4.2表达式Scriptlet是以“%”标记开始,以“%”标记结尾的一段Java代码,它可以包含任意符合Java语法标准的Java代码,格式如下:%Java代码%Scriptlet能做到以下事情:声明将要用到的变量和方法显示出表达式使用任何隐含对象和适用jsp:useBean声明过的对象编写JSP语句当JSP收到客户端的请求时,Scriptlet就会被执行,Scriptlet得显示内容就会被保存在out对象中,然后利用out对象中的println()方法显示出来。4.3Scriptlet4.4.1计算圆的面积和周长在客户端提供圆的半径,根据半径计算圆的面积和周长问题分析:可以先定义一个圆类,该类包含计算面积和周长的方法。通过表单获得用户输入的圆的半径r,然后以半径r为参数创建一个圆对象,计算圆的面积和周长,最后输出计算结果。程序算法:1.定义圆类Circle。2.使用表单创建用户输入界面,获得圆的半径r3.调用构造方法创建一个圆,计算圆的面积和周长4.输出圆的面积和周长4.4应用ex4_4.jsp5.动作元素(ActionElements)动作元素主要是在请求处理阶段起作用。JSP动作元素是利用XML(ExtensibleMarkupLa