《JSP程序设计教程》课件制作人:王国辉JSP程序设计教程第3章JSP语法课件制作人:王国辉第3章JSP语法3.1了解JSP的基本构成3.2JSP的指令标识3.3JSP的脚本标识3.4JSP的注释3.5动作标识√√√√√课件制作人:王国辉!--JSP中的指令标识--%@pagelanguage=javacontentType=text/html;charset=gb2312%%@pageimport=java.util.Date%!--HTML标记语言--htmlheadtitleJSP页面的基本构成/title/headbodycenter!--嵌入的Java代码--%Stringtoday=newDate().toLocaleString();%!--JSP表达式--今天是:%=today%!--HTML标记语言--/center/body/html3.1了解JSP的基本构成在学习JSP语法之前,首先来初步了解一下JSP页面的基本结构。请看下面的代码:在上面的代码中,并没有包括JSP中的所有元素,但它仍然构成了一个动态的JSP程序。访问包含了该代码的JSP页面后,将显示用户访问该页面的当前时间。暂且不对其功能实现进行讲解,先来介绍该页面的组成元素。课件制作人:王国辉3.1Java语言基础3.1.1JSP中的指令标识3.1.2HTML标记语言3.1.3嵌入的Java代码片段3.1.4JSP表达式√√√√课件制作人:王国辉3.1.1JSP中的指令标识利用JSP指令可以使服务器按照指令的设置来执行动作和设置在整个JSP页面范围内有效的属性。例如,上述代码中的第一个page指令指定了在该页面中编写JSP脚本使用的语言为Java,并且还指定了页面响应的MIME类型和JSP字符的编码;第二个page指令所实现的功能类似于Java中的import语句,用来向当前的JSP文件中导入需要用到的包文件。课件制作人:王国辉3.1.2HTML标记语言HTML标记在JSP页面中作为静态的内容,浏览器将会识别这些HTML标记并执行。在JSP程序开发中,这些HTML标记语言主要负责页面的布局、设计和美观,可以说是网页的框架。课件制作人:王国辉3.1.3嵌入的Java代码片段嵌入到JSP页面中的Java代码,在客户端浏览器中是不可见的。它们需要被服务器执行,然后由服务器将执行结果与HTML标记语言一同发送给客户端进行显示。通过向JSP页面中嵌入Java代码,可以使该页面生成动态的内容。课件制作人:王国辉3.1.4JSP表达式JSP表达式主要用于数据的输出。它可以向页面输出内容以显示给用户,还可以用来动态地指定HTML标记中属性的值。课件制作人:王国辉3.2JSP的指令标识指令标识在客户端是不可见的,它是被服务器解释并被执行的。通过指令标识可以使服务器按照指令的设置来执行动作和设置在整个JSP页面范围内有效的属性。在一个指令中可以设置多个属性,这些属性的设置可以影响到整个页面。在JSP中主要包含3种指令,分别是page指令(页面指令)、include指令和taglib指令。指令通常以“%@”标记开始,以“%”标记结束,以上3种指令的通用格式如下:课件制作人:王国辉3.2JSP的指令标识%@指令名称属性1=属性值属性2=属性值…%下面将分别介绍JSP的3种指令格式。3.2.1使用page指令3.2.2使用include指令3.2.3使用taglib指令√√√课件制作人:王国辉3.2.1使用page指令page指令即页面指令,可以定义在整个JSP页面范围内有效的属性,其使用格式如下:%@pageattribute1=value1attribute2=value2…%page指令可以放在JSP页面中的任意行,但为了利于程序代码的阅读,习惯上放在文件的开始部分。Page指令具有多种属性,通过这些属性的设置可以影响到当前的JSP页面。例如,在页面中正确设置当前页面响应的MIME类型为text/html,如果MIME类型设置不正确,则当服务器将数据传输给客户端进行显示时,客户端将无法识别传送来的数据,从而不能正确地显示内容。课件制作人:王国辉3.2.1使用page指令Page指令中除import属性外,其他属性只能在指令中出现一次。Page指令具有的属性如下:%@page[language=java][contentType=mimeType;charset=CHARSET][import={package.class|pageage.*},…][extends=package.class][session=true|false][buffer=none|8kb|sizekb][autoFlush=true|false][isThreadSafe=true|false][info=text][errorPage=relativeURL][isErrorPage=true|false][isELIgnored=true|false][pageEncoding=CHARSET]%虽然Page指令具有如此多的属性,但在实际编程过程中,并不是每个属性都必须一一列出,其中很多属性可以忽略,此时Page指令将使用这些属性的默认值来设置JSP页面课件制作人:王国辉3.2.1使用page指令language属性:设置当前页面中编写JSP脚本使用的语言,默认值为java,例如:%@pagelanguage=java%上述代码设置了当前页面中使用Java语言来编写JSP脚本,目前只能设置为Java。contentType属性:设置页面响应的MIME类型,通常被设置为text/html,例如:%@pagecontentType=text/html%如果该属性设置不正确,如设置为text/css,那么客户端浏览器在显示HTML样式时,不能对HTML标识进行解释,而直接显示HTML代码。课件制作人:王国辉3.2.1使用page指令在该属性中还可以设置JSP字符的编码,例如:%@pagecontentType=text/html;charset=gb2312%默认的编码为ISO-8859-1。import属性:import属性类似于Java中的import语句,用来向JSP文件中导入需要用到的包。在Page指令中可多次使用该属性来导入多个包。例如:%@pageimport=java.util.*%%@pageimport=java.text.*%或者通过逗号间隔,来导入多个包。%@pageimport=java.util.*,java.text.*%课件制作人:王国辉3.2.1使用page指令在JSP中已经默认导入了以下包:java.lang.*javax.servlet.*javax.servlet.jsp.*javax.servlet.http.*所以,即使没有通过import属性进行导入,在JSP页面中也可以调用上述包中的类。若要在页面中使用编写的JavaBean,也可通过import属性来导入。还可以通过jsp:useBean动作标识来创建一个JavaBean实例进行调用。课件制作人:王国辉3.2.1使用page指令extends属性:extends属性用于指定将一个JSP页面转换为Servlet后继承的类。在JSP中通常不会设置该属性,JSP容器会提供继承的父类。并且如果设置了该属性,一些改动会影响JSP的编译能力。session属性:该属性默认值为true,表示当前页面支持session,设为false表示不支持session。buffer属性:该属性用来设置out对象(JspWriter类对象)使用的缓冲区的大小。若设置为none,表示不使用缓存,而直接通过PrintWriter对象进行输出;如果将该属性指定为数值,则输出缓冲区的大小不应小于该值,默认值为8KB(因不同的服务器而不同,但大多数情况下都为8KB)。课件制作人:王国辉3.2.1使用page指令autoFlush属性:该属性默认值为true,表示当缓冲区已满时,自动将其中的内容输出到客户端。如果设为false,则当缓冲区中的内容超出其设置的大小时,会产生“JSPBufferoverflow”溢出异常。注意:若buffer属性设为none,则autoFlush不能设为false。isThreadSafe属性:该属性默认值为true,表示当前JSP页面被转换为Servlet后,会以多线程的方式来处理来自多个用户的请求;如果设为false,则转换后的Servlet会实现SigleThreadModel接口,该Servlet将以单线程的方式来处理用户请求,即其他请求必须等待直到前一个请求处理结束。课件制作人:王国辉3.2.1使用page指令info属性:该属性可设置为任意字符串,如当前页面的作者或其他有关的页面信息。可通过Servlet.getServletInfo()方法来获取设置的字符串。例如:访问页面后,将显示:Thisisindex.jsp!%@pageinfo=Thisisindex.jsp!%%=this.getServletInfo()%errorPage属性:该属性用来指定一个当前页面出现异常时所要调用的页面。如果属性值是以“/”开头的路径,则将在当前应用程序的根目录下查找文件;否则,将在当前页面的目录下查找文件。课件制作人:王国辉3.2.1使用page指令isErrorPage属性:将该属性值设为true,此时在当前页面中可以使用exception异常对象。若在其他页面中通过errorPage属性指定了该页面,则当前者出现异常时,会跳转到该页面,并可在该页面中通过exception对象输出错误信息。相反,如果将该属性设置为false,则在当前页面中不能使用exception对象。该属性默认值为false。【例3-1】errorPage属性及isErrorPage属性的应用isELIgnored属性:通过该属性的设置,可以使JSP容器忽略表达式语言“${}”。其值只能为true或false。设为true,则忽略表达式语言。课件制作人:王国辉3.2.1使用page指令pageEncoding属性:该属性用来设置JSP页面字符的编码。默认值为ISO-8859-1。课件制作人:王国辉3.2.2使用include指令该指令用于在当前的JSP页面中,在当前使用该指令的位置嵌入其他的文件,如果被包含的文件中有可执行的代码,则显示代码执行后的结果。该指令的使用格式如下:file属性:该属性指定被包含的文件,该属性不支持任何表达式,也不允许通过如下的方式来传递参数。%@includefile=文件的绝对路径或相对路径%如果该属性值以“/”开头,那么指定的是一个绝对路径,将在当前应用的根目录下查找文件;如果是以文件名称或文件夹名开头,那么指定的是一个相对路径,将在当前页面的目录下查找文件。%@includefile=welcome.jsp?name=yxq%课件制作人:王国辉3.2.2使用include指令使用include指令引用外部文件,可以减少代码的冗余。例如,有两个JSP页面都需要应用下图所示的网页模板进行布局。其中,这两个页面中的LOGO图片区、侧栏和页尾的内容都不会发生变化。如果通过基本JSP语句来编写这两个页面,会导致编写的JSP文件出现大量的冗余代码,不仅降低了开发进程而且会给程序的维护带来很大的困难。为了解决该问题,可以将这个复杂的页面分成若干个独立的部分,将相同的部分在单独的JSP文件中进行编写。LOGO图片区:top.jsp侧栏left.jsp内容显示区:main.jsp页尾:end.jsp课件制作人:王国辉3.2.2使用include指令这样在多个页面中应用上述的页面模板时,就可通过include指令在相应的位置上引入这些文件,从而只需对内