1、第二讲 JSP基本语法 教学目的本讲主要讲述JSP基本语法。 知识要点 1 程序片 2 表达式 3 JSP中的注释 4 JSP 指令标签 page 指令标签include 指令标签 5 JSP 动作标签include 动作标签param 动作标签forward 动作标签plugin 动作标签useBean 动作标签,2.1 Java 程序片,可以在“”之间插入Java程序片。一个JSP页面可以有许多程序片,这些程序片将被JSP引擎按顺序执行。在一个程序片中声明的变量称做JSP页面的局部变量,它们在JSP页面内的所有程序片部分以及表达式部分内都有效。这是因为JSP引擎将JSP页面转译成Java文
2、件时,将各个程序片的这些变量作为类中某个方法的变量,即局部变量。利用程序片的这个性质,有时候可以将一个程序片分割成几个更小的程序片,然后在这些小的程序片之间再插入JSP页面的一些其它标记元素。当程序片被调用执行时,这些变量被分配内存空间,所有的程序片调用完毕,这些变量即可释放所占的内存。当多个客户请求一个JSP页面时,JSP引擎为每个客户启动一个线程,一个客户的局部变量和另一个客户的局部变量被分配不同的内存空间。因此,一个客户对JSP页面局部变量操作的结果,不会影响到其它客户的这个局部变量。,下面例子1中的程序片负责计算1到100的连续和。 例子1,1到100的连续和:,下面的例子2将例子1中
3、的程序片分割成几部分。 例子 2,声明了一个long型变量sum:然后调用方法continueSum,, 将调用方法continueSum得到的值显示到客户:1到101的连续和是:=5050)%您计算的项数超过100项了。您计算的项数没有超过100项。,2.2 表达式,可以在“”之间插入一个表达式(注意:不可插入语句,“%=”是一个完整的符号,“%”和“=”之间不要有空格),这个表达式必须能求值。表达式的值由服务器负责计算,并将计算结果用字符串形式发送到客户端显示。下面的例子3 计算表达式的值。 例子3,Sin(0.9)除以3等于 3的平方是:12345679乘72等于5的平方根等于99大于1
4、00吗?回答:100%,2.3 JSP中的注释注释可以增强JSP文件的可读性,并易于JSP文件的维护。JSP中的注释可分为两种(1)HTML注释:在标记符号“”之间加入注释内容:JSP引擎把HTML注释交给客户,因此客户通过浏览器查看JSP的源文件时,能够看到HTML注释。(2)JSP 注释:在标记符号“”之间加入注释内容:JSP引擎忽略JSP注释,即在编译JSP页面时忽略JSP注释。,2.4 JSP 指令标签,2.4.1 page 指令,page 指令用来定义整个JSP页面的一些属性和这些属性的值。例如,我们可以用page指令定义JSP页面的contentType属性的值是“text/htm
5、l;charset=GB2312”,这样,我们的页面就可以显示标准汉语。如,,page 指令的格式:属性值总是用单引号或引号双号括起来,例如:如果为一个属性指定几个值话,这些值用逗号分割。page指令只能给import属性指定多个值;其它属性只能指定一个值。 例如: ,当你为import指定多个属性值时,JSP引擎把JSP页面转译成的java文件中会有如下的import语句: import java.util.*; import java.io.*; import java.awt.*;,在一个JSP页面中,也可以使用多个page指令来指定属性及其值。需要注意的是:可以使用多个page指令给属
6、性import几个值,但其它属性只能使用一次page指令指定该属性一个值。如:,注:下列用法是错误的尽管指定的属性值相同,也不允许2次使用Page 给contentType属性指定属性值.注:page指令的作用对整个页面有效,与其书写的位置无关,但习惯把page指令写在JSP页面的最前面。,language属性定义JSP页面使用的脚本语言,该属性的值目前只能取“java“。 为language属性指定值的格式:language属性的默认值是“java”,即如果你在JSP页面中没有使用page指令指定该属性的值的话,那么,JSP页面默认有如下page指令:,import 属性:该属性的作用是为J
7、SP页面引入Java核心包中的类,这样就可以在JSP页面的程序片部分、变量及函数声明部分、表达式部分使用包中的类。可以为该属性指定多个值,该属性的值可以是Java某包中的所有类或一个具体的类,例如:JSP页面默认import属性已经有如下的值: “ java.lang.*“、 “javax.servlet.*“、“javax.servlet.jsp.*“、“javax.servlet.http.*“。,contentType 属性:定义JSP页面响应的MIME(Multipurpose Internet Mail Extention)类型和JSP页面字符的编码。属性值的一般形式是: “MIME
8、类型”或 “MIME类型;charset=编码”,如:contentType 属性的默认值是“text/html ; charset=ISO-8859-1“。 application/msword;,session 属性:用于设置是否需要使用内置的session对象。session的属性值可以是true或false,session属性默认的属性值是true。,buffer 属性:内置输出流对象out负责将服务器的某些信息或运行结果发送到客户端显示,buffer属性用来指定out设置的缓冲区的大小或不使用缓冲区。buffer属性可以取值 “none”,设置out不使用缓冲区。Buffer属性的默
9、认值是8kb。例如:,auotFlush 属性:指定out的缓冲区被填满时,缓冲区是否自动刷新。auotFlush可以取值true或false。auotFlush属性的默认值是true。当auotFlush属性取值false时,如果out的缓冲区填满时,就会出现缓存溢出异常。当buffer的值是 “none”时,auotFlush的值就不能设置成false。,isThreadSafe 属性:用来设置JSP页面是否可多线程访问。isThreadSafe的属性值取true或false。当isThreadSafe属性值设置为true时,JSP页面能同时响应多个客户的请求;当isThreadSafe属
10、性值设置成false时,JSP页面同一时刻只能处理响应一个客户的请求,其他客户需排队等待。isThreadSafe属性的默认值是true。,info 属性:该属性为JSP页面准备一个字符串,属性值是某个字符串。例如:可以在JSP页面中使用方法:getServletInfo();获取info属性的属性值。,下面的例子4使用getServletInfo()方法获取info的属性值。 例子4,谁呀?“+s);%,2.4.2 include 指令标签,如果需要在JSP页面内某处整体嵌入一个文件,就可以考虑使用这个指令标签。该指令标签语法如下:该指令标签的作用是在JSP页面出现该指令的位置处,静态插入一
11、个文件。被插入的文件必须是可访问和可使用的,即该文件必须和当前JSP页面在同一Web服务目录中。所谓静态插入,就是当前JSP页面和插入的部分合并成一个新的JSP页面,然后JSP引擎再将这个新的JSP页面转译成Java类文件。,使用该指令标签插入文件后,必须保证新合并成的JSP页面符合JSP语法规则,即能够成为一个JSP页面文件。比如,如果一个JSP页面使用include指令插入另一个JSP文件,被插入的这个JSP页面中有一个设置页面contentType属性的page指令:而当前JSP 页面已经使用page指令设置了contentType的属性值,那么新合并的JSP页面就出现了语法错误,当转译
12、合并的JSP页面到Java文件时就会失败。,下面的例子5在JSP页面静态插入一个文本文件:Hello.txt,该文本文件的内容是:“你们好,很高兴认识你们呀!”。该文本文件必须和当前JSP页面在同一Web服务目录中。 例子5(Example2_5.jsp),注:上述例子5等价于下面的JSP文件:,你们好,很高兴认识你们呀!,注:在H.jsp被转译成Java文件后,如果你对插入的文件Hello.txt进行了修改,那么必须要重新将H.jsp转译成java文件(重新保存页面,然后再访问该页面即可),否则只能看到修改前的Hello.txt的内容。,2.5 JSP 动作标签,动作标签是一种特殊的标签,它
13、影响JSP运行时的功能。,2.5.1 include 动作标签,该动作标签告诉JSP页面动态包含一个文件,即JSP页面运行时才将文件加入。与静态插入文件的include指令标签不同,当JSP引擎把JSP页面转译成Java文件时,不把JSP页面中动作指令include所包含的文件与原JSP页面合并一个新的JSP页面,而是告诉Java解释器,这个文件在JSP运行时(Java文件的字节码文件被加载执行)才包含进来。如果包含的文件是普通的文本文件,就将文件的内容发送到客户端,由客户端负责显示;如果包含的文件是jsp文件,JSP引擎就执行这个文件,然后将执行的结果发送到客户端,并由客户端负责显示这些结果
14、。,注:include动作标签与静态插入文件的include指令标签有很大的不同,动作标签是在执行时才对包含的文件进行处理,因此JSP页面和它所包含的文件在逻辑和语法上是独立的;如果你对包含的文件进行了修改,那么运行时看到所包含文件修改后的结果,而静态include指令包含的文件如果发生了变化,我们必须要重新将JSP页面转译成java文件(可将该JSP页面重新保存,然后再访问,就可产生新的转译Java文件),否则只能看到所包含的修改前的文件内容。,下面的例子6动态包含两个文件:image.html和Hello.txt。我们把Example2_6.jsp页面保存到TomcatJakarta-to
15、mcat-4.0webappsroot,在root下又新建立了一个文件夹Myfile,Hello.txt存放在MyFile文件夹中,image.html存放在root下。,Hello.txt: 你好,祝学习进步! 学习JSP要有Java语言的基础。 要认真学习JSP的基本语法。image.html: ,加载的文件:加载的图象:,例子6(Example2_6.jsp),2.5.2 param动作标签,param标签以“名字值”对的形式为其它标签提供附加信息,这个标签与jsp:include、jsp:forward、jsp:plugin标签一起使用。 param动作标签:,当该标签与jsp:inc
16、lude标签一起使用时,可以将param标签中的值传递到include指令要加载的文件中去,因此include动作标签如果结合param标签,可以在加载文件的过程中向该文件提供信息。下面例子7动态包含文件:tom.jsp,当该文件被加载时获取param标签中computer的值(获取computer的值由JSP的内置对象request调用getParameter方法完成)。,加载文件效果:,例子7example22.jsp,从1到的连续和是:,tom.jsp:,2.5.3 forward 动作标签,forwar指令:或,该指令的作用是:从该指令处停止当前页面的继续执行,而转向其它的一个JSP页
17、面。,假设 A.jsp存放在d:/Tomcat/Jakarta-tomcat-4.0/webapps/root/Myfile下; B.jsp存放在d:/Tomcat/Jakarta-tomcat-4.0/webapps/root/下。 下面的Example2_8.jsp存放在d:/Tomcat/Jakarta-tomcat-4.0/webapps/root/下。,在下面的JSP页面中,首先随机获取一个数,如果该数大于0.5就转向页面 A.jsp;否则转向页面 B.jsp。,随机是: 0.5) %,例子8(Example2_8.jsp) / example23.jsp,2.5.4 plugin
18、动作标签,在页面中使用普通的HTML标记可以让客户下载运行一个java applet小应用程序,但并不是所有的客户的浏览器都支持java apple小程序,如果你的小应用程序使用了 JDK1.2以后的类,那么,目前的IE5.5并不支持这个Java小应用程序。而使用plugin动作标签可以保证客户能执行你的小应用程序。该动作标签指示JSP页面加载java plugin,该插件由客户负责下载,并使用该插件来运行Java applet。,Plugin 动作标签:提示信息:用来提示用户的浏览器是否支持插件下载,假设有一个java applet小程序,主类字节码文件是:B.class,该文件存放在Roo
19、t下。含有plugin标签的JSP文件Example2_9.jsp也存放在Root下。,例子9(Example2_9.jsp),Plugin tag OBJECT or EMBED not supported by browser. ,当客户访问上述JSP页面时,将导致登录sun公司的网站下载Java plugin,出现客户选择是否下载插件的界面.,2.5.5 useBean 动作标签,该标签用来创建并使用一个java beans,是非常重要的一个动作标签,我们以后再详细讨论。Sun公司的倡导是:用HTML完成JSP页面的静态部分,用javabeans完成动态部分,实现真正意义上的静态和动态分割。,