第4章JSP技术基础知识在前面已经说过,Web开发是面向网络开发的,所以网页是Web开发中不可缺少的一部分,前面讲过可以对网页进行编写的HTML语言,但遗憾的是它是静态的网页,在HTML中不能够和Java代码相结合。在很多程序中,需要在前台页面中嵌入Java代码,这时,就可以使用JSP。JSP是一种基于文本的程序,其特点是HTML代码与Java程序共同存在。本章重点:JSP技术的由来编写JSP的基本语法JSP的七大内置对象的作用将JSP技术运用到具体实例中4.1JSP技术简介JSP是由Sun公司领导开发的一种动态网页开发技术。它是在HTML语言基础上插入Java代码和JSP标签(tag),从而形成了*.jsp文件。在执行JSP文件时,首先它会向Web服务器发出请求,Web服务器在处理请求时,首先会执行其中的Java代码段,这些Java代码可以实现连接数据库和网页重定向的作用;然后执行HTML代码并将结果一起返回给用户。这样就实现了建立动态网页所需要的功能。这种动态网站开发技术主要有以下一些优点:将内容的生成和显示进行分离,并能够在任何Web或应用程序服务器上运行。可重用组件,简化了开发Web交互式应用程序的过程,能够进行快速的开发和测试。拥有自己的标签库,供开发者方便使用。可以提高开发的速度和维护的效率。在JSP页面中可以实现用JDBC连接数据库,既快捷又安全。4.2JSP的基本语法JSP是目前最为流行的动态网站开发技术,其作要原因是它结合了Java语言与HTML语言。那么如何使用混合体JSP呢?其实,它的使用方法很简单,HTML部分遵循HTML语法,Java部分遵循Java语法。当然,JSP也会拥有只属于它的语法,下面在本节中,就主要介绍JSP的基本脚本元素和只有JSP才会拥有的指令元素。4.2.1JSP的基本脚本元素JSP是由HTML和Java代码组成的,由于HTML代码既不会控制程序的流程,也不会影响程序的运行结果,它的内容是什么输出来就是什么,所以JSP中的HTML代码也称为模板数据。JSP中的元素则包括JSP中的Java代码和纯JSP部分,也就是JSP指令(Directive)与JSP标签(Tag)等。其中元素是决定着程序的流程的主要原因。1.JSP注释(1)HTML注释。HTML注释的作用是在网页中看不到被注释了的内容,但是查看网页的源文件时,用户是可以看到此注释的内容的,这就明说,浏览器解释了被注释掉的内容但又视该注释的不存在。在JSP中,它的语法如下:!--comment[%=expression%]--例如:HTML注释使用示例2!--Thetimeis%=(newjava.util.Date()).toLocaleString()%--在客户端的HTML源代码中显示为:!--Thetimeis2009-6-1314:46:42--注释中能够使用各种表达式,只要是合法的就行。表面看这种注释和HTML中的注释很像,但是从执行后的文件内容上就可以看出区别了,如上面的例子,开发者可以在这个注释将不确定的表达式的值求出,既可以看到结果,又不影响程序的运行,一举两得。(2)Java注释。该注释的使用方法与Java代码中使用方式相同,可以使用“/***/”和“//”,值得注意的是该注释与HTML注释不同,使用该注释的内容在页面的源文件中是看不到的。具体使用方法如下所示:%/***这是在JSP中的Java注释中的块注释**///Dated=newDate();Java注释中的行注释%(3)JSP注释注释是编程中常用的程序元素。它可以对部分代码进行解释和说明,JSP中除了可以使用Java注释HTML注释外,还可以使用JSP注释。JSP注释是指包含在%----%之间的内容,使用该注释的内容在JSP页面上是无法看到的,而且在源文件中也是看不到的。其语法如下:%--注释内容--%2.JSP输出元素在JSP中可以使用"%=%”的形式将Java代码输出,这种方式指的就是JSP中的输出元素,它的作用相当于Java程序中的System.out.print()。它可以int、double、boolean、char以及String和Object等类型的数据转化成字符串并显示在页面上。具体使用方法,可以参考下面的实例,具体代码如下所示:程序4-1DEO.jsp01%@pagelanguage=javaimport=java.util.*pageEncoding=GBK%02html03body04%!inta=100;%05h306输出从0到100之间的数07/h308%09for(inti=0;i100;i++){10%11%=i%12%13}14%15/body16/html第11行使用JSP输出元素%=%的形式将变量i的值输出。运行结果如图4.1所示:图4.1运行结果3.JSP声明元素在JSP中可以通过“%!%”形式对Java变量和方法的声明,声明后的变量和方法,可以适用于整个JSP程序中,相当于在Java类中声明的全局变量和方法,其JSP语法如下:%!声明变量或方法%在下面的代码中分别声明了一个变量和一个方法:%!Stringname=nihao;Datedate=newDate();%4.JSP程序代码JSP程序代码是JSP实现动态网页的主要因素,通过与Java代码结合使用,可以实现许多静态页面无法达到的效果,那么Java代码是如何被应用在JSP程序中呢?其实,JSP是通过“%%”标签对将Java代码加载进来的,其使用语法如下:%Java代码%以下代码在客户端输出一些内容:%@pagelanguage=javaimport=java.util.*pageEncoding=GBK%htmlbody%!inta=0;%%intb=0;a++;b++;%a:%=a%brb:%=b%/body/html4.2.2JSP的指令元素JSP指令用于设置和整个JSP页面相关的属性,例如:编码方式,文档类型。JSP指令包括page指令、include指令、taglib指令3种指令。本节将对这3种指令元素进行详细的介绍。1.page指令page指令定义jsp文件中的全局属性,例如脚本语言、编码方式、导入的Java包等。其语法形式如下:%@pagearribute=value%%@pagelanguage=javaimport=java.util.*,java.io.*session=false|trueautoFlush=false|trueisThreadSafe=false|trueinfo=texterrorPage=relativeURLcontentType=mimeType|;charset=characterSETisErrorPage=true|falsepageEncoding=pginfo%下面表4.1对page指令的常见属性的取值范围以及对每个属性的具本作用和使用方法做出了详细的介绍。表4.1page指令的常见属性属性名称取值范围描述languagejava指明解释该JSP文件时采用的语言。一般为Java语言。默认为Java。extends任何类的全名指明编译该JSP文件时继承哪个类。JSP为Servlet,因此当指明继承普通类时需要实现Servlet的init,destroy等方法。import任何包名,类名引入该JSP中用到的类,包等。import是唯一可以声明多次的page指令属性。一个import属性可以引用多个类,中间用英文逗号隔开,如%@pageimport=java.util.List,java.util.ArrayList%。JSP中下面四个包里的类可以直接使用:java.lang.*,javax.servlet.*,javax.servlet.jsp.*,javax.servlet.http.*sessiontrue,false指明该JSP内是否内置session对象。如果为true,则内置session对象,可直接使用。否则不内置session对象。默认为true。autoFlushtrue,false是否运行缓存。如果为true,则使用out.println()等方法输出的字符串并不是立刻到达客户端服务器的,而是暂时存在缓存里,缓存满或者程序执行完毕或者执行out.flush()操作时才到客户端。默认为true。buffernone或者数字+kb指定缓存大小。当autoFlush设为true时有效。例如:%@pagebuffer=10kb%isThreadSafetrue,false指定是否线程安全。如果为true,则运行多个线程同时运行该JSP程序,否则只运行一个线程运行,其余线程等待。默认false。isErrorPagetrue,false指定该页面是否为错误处理页面。如果为true,则该JSP内置有一个Exception对象exception,可直接使用,否则没有。默认false。errorPage某个JSP页面的相对路径指明一个错误显示页面,如果该JSP程序抛出了一个未捕捉的异常,则转到errorPage指定的页面。errorPage指定的页面通常isErrorPage属性为true,且内置的exception对象为未捕捉的异常。contentType有效的文档类型。客户端浏览器根据该属性判断文档类型。例如:HTML格式为text/html纯文本格式为text/plainJPG图像为image/jpegGIF图像为image/gifWORD文档为application/mswordinfo任意字符串指明JSP的信息。该信息可以通过Servlet.getServletInfo()方法获取到。trimDirectiveWhitespacestrue,false是否去掉指令前后的空白字符。默认为false。JSP指令的多个属性可以写在一个page指令里,也可以写在多个指令里。但是需要注意的是,无论在哪个page指令里属性,任何page允许的属性都只能出现一次,否则出现编译错误。import属性除外,因为import属性和Java中的import语句差不多,所以可以出现多次。例如:%@pagelanguage="java"contentType="text/html;charset=utf-8"import=”java.io.*”%//一个指令写多个属性%@pageimport="java.util.*"%//一个指令写一个属性2.include指令include指令用来将文件插入到JSP网页上,这些文件可以是文本文件、HTML文件或者是JSP文件。其语法形式如下:%@includefile=relativeURL%//file是指所要加载的文件路径下面的程序给出一个利用include指令将一个放入图片的head.jsp文件加载到include.jsp中,include.jsp的具体代码如下所示:程序4-2include.jsp01%@pagepageEncoding=GB2312%02%@pagecontentType=text/HTML;charset=gb2312%03%04request.setCharacterEncoding(GB2312);05%06html07head08titleinclue指令的使用/title09bodybgcolor=black10%@includefile=head.jsp%11fontsize=+1color=white12pre13相信自己,你将赢得胜利创造奇迹14相信自己,梦想在你手中这是你的天地15相信自己,你将超越极限超越自己16相信自己,当这一切过去你们将是第一17相信自己,你将超越极限超越自己18相信自己,