JSP学习笔记一(语法)

 

1。服务目录
必须将编写好的JSP页面文件保存到一个服务目录中。tomcat服务器的WEB服务的根目录是"webapps"Root
另外webapps下还有几个WEB服务目录
如果将JSP文件保存到Root目录中,应当在浏览器的地址栏中输入:
http://localhost:8080/XXXXX.jsp
如果将JSP文件保存到webapps目录下的子目录(如:exp)应当在浏览器的地址栏中输入:
http://localhost:8080/exp/XXXXX.jsp
也可以建立新的WEB服务目录。假设要将D:"text以及C:"redsun作为服务目录,并让用户分别使用test和moon虚拟目录访问服务目录下的JSP页面。首先用记事本打开tomcat根目录的conf文件夹中的主配置文件server.xml,找到</Host>的部分(server.xml文件尾部)。然后在<./Host>的前面加入:
<Context path="/test" docBase="d:/test" debug="0" reloadable="true">
</Context>
<Context path="/moon" docBase="c:/redsun" debug="0" reloadable="true">
</Context>

2。JSP的运行原理
当服务器上的一个JSP页面被第一次请求执行时,服务器上的SP引擎首先将JSP页面文件转译成一个JAVA文件,再将这个JAVA文件编译生成字节码文件,然后通过执行字节码文件响应客户的请求。而当这个JSP页面再将被誉为请求执行时,JSP引擎将直接执行这个字节码文件来响应客户。这也是JSP比ASP速度快的一个原因。JSP页面的首次执行往往由服务器管理者来执行,这个字节码文件的主要工作是:
A>把JSP页面中普通的HTML标记符号(页面的静态部分)交给客户的浏览器负责显示。
B>执行"<%"和"%>"之间的JAVA程序片(JSP页面中的动态部分),并把执行结果交给客户的浏览器负责显示。
当多个客户请求一个JSP页面时,JSP引擎为每个客户启动一个线程而不是启动一个进程,这些线程由JSP引擎服务器来管理,与传统的CGI为每个客户启动一个进程相比较,效率要高得多。

3。JSP页面的基本结构
在传统的HTML页面文件加入JAVA程序片和JSP标签就构成了一个JSP页面文件。一个JSP页面可由5种元素组合而成:
A>普通的HTML标记符
B>JSP标签,如指令标签、动作标签
C>变量和方法的声明
D>JAVA程序片
E>JAVA表达式
我们称后三部分为JSP的脚本部分。

4。变量和方法的声明
在"<%!"和"%>"标记符号之间声明变量和方法。
变量的声明,如:
<%!
       int x, y=100, z ;
       String tom = null, jerry = "love JSP" ;
       Date date ;
%>
"<%!"和"%>"之间声明的变量在整个JSP页面内都有效,因为JSP引擎将JSP页面转译成JAVA文件时,将这些变量作为类的成员变量,这些变量的内存空间直到服务器关闭才被释放。当多个客户请求一个JSP页面时,JSP引擎为每个客户启动一个线程,这些线程由JSP引擎服务器来管理。这些线程共享JSP页面的成员变量,因此任何一个用户对JSP页面成员变量操作的结果,都会影响到其他用户。
方法的声明
在"<%!"和"%>"之间声明方法,该方法在整个JSP页面有效,但是该方法内定义的变量只在该方法内有效。这些方法将在JAVA程序片中被调用,当方法被调用时,方法内定义的变量被分配内存,调用完毕即可释放所占的内存。当多个客户同时请求一个JSP页面时,他们可能使用方法操作成员变量,对这种情况应给予注意。
类的声明
可以在"<%!"和"%>"之间声明一个类,该类在JSP页面内有效,即在JSP页面的JAVA程序片部分可以使用该类创建对象。

5。JAVA程序片
可以在"<%"和"%>"之间插入JAVA程序片。一个JSP页面可以有许多程序片,这些程序片将被JSP引擎按顺序执行,在一个程序片中声明的变量称做JSP页面的局部变量,它们在JSP页面内的所有程序片部分以及表达式部分内都有效。这是因为JSP引擎将JSP页面转译成JAVA文件时,将各个程序片的这些变量作为类中某个方法的变量,即局部变量。利用程序片的这个性质,有时可以将一个程序片分割成几个更小的程序片,然后在这些小的程序片之间再插入JSP页面的一些其他标记元素。当程序片被调用执行时,这些变量被分配内存空间。当所有的程序调用完毕,这些变量即可释放所占的内存。当多个客户请求一个JSP页面时,JSP引擎为每个客户启动一个线程,一个客户的局部变量和另一个客户的局部变量被分配不同的内存空间。因此,一个客户对JSP页面局部变量操作的结果,不会影响到其他客户的这个局部变量。

6。表达式
可以在"<%="和"%>"之间插入一个表达式(注意:不可插入语句。"<%="是一个完整的符号,"<%"和"="之间不要有空格),这个表达式必须能求值。表达式由服务器负责计算,并将计算结果以字符串形式发送到客户端显示。

7。JSP中的注释
HTML注释
<!-- 注释内容 -->
JSP引擎把HTML注释交给客户,客户通过浏览器查看JSP的源文件时,能够看到HTML注释。
JSP注释
<%-- 注释内容 --%>
JSP引擎忽略JSP注释,即在编译JSP页面时忽略JSP注释。

8。JSP指令标签
page指令
page指令用来定义整个JSP页面的一些属性和这些属性的值。例如,我们可以用page指令定义JSP页面的contentType属性的值是text/html;charset=GB2312,这样,我们的页面就可以显示标准汉语,如:
<%@ page contentType="text/html;charset=GB2312" %>
page指令的格式:<%@ page 属性1="属性1的值" 属性2="属性2的值" ... %>
如果为一个属性指定几个值的话,这些值用逗号分割。page指令只能给import属性指定多个值,其他属性只能指定一个值。例如:
<%@ page import="java.util.*","java.io.*","java.awt.*" %>
当你为import属性指定多个属性值时,JSP引擎把JSP页面转译成的JAVA文件中会有如下import语句:
import java.util.*;
import java.io.*;
import java.awt.*;
在一个JSP页面中,也可以使用多个page指令来指定属性及其值。需要注意的是:可以使用多个page指令指定import属性几个值,但其他属性只能使用一次page指令来指定该属性的一个值。
提醒:page指令对整个页面有效,与其书写的位置无关。习惯写在最前面。
page标签有如下属性

language

定义JSP页面使用的脚本语言,默认值是java

import

JSP页面引入JAVA核心包中的类。默认属性有

java.lang.*

javax.servlet.*

javax.servlet.jsp.*

javax.servlet.http.*

contentType

定义JSP页面响应MIME(Multipurpose Internet Mail Extention)类型和JSP页面字符的编码

session

用于设置是否需要使用内置的session对象。该属性的值可以是truefalse,默认的属性值是true

buffer

内置输出流对象out负责将服务器的某些信息或运行结果发送到客户端显示,buffer属性用来指定out设置的缓冲区(如:24kb)的大小或不使用缓冲区(none)

autoFlush

指定out的缓冲区被填满时,缓冲区是否自动刷新。可取truefalse,默认值是true。当取false时,如果out缓冲区被填满,就会出现缓存溢出异常。当buffer的值是none时,autoFlush的属性值就不能设置成false

isThreadSafe

用来设置JSP页面是否可多线程访问。当取true时,JSP页面能同时响应多个客户的请求,当取false时,JSP页面同一时刻只能处理响应一个客户的请求,其他客户必须排队等待。默认值是true

 

include指令标签
<%@ include file="文件的名字" %>
该指令标签的作用是在JSP页面出现该指令的位置处,静态插入一个文件。被插入的文件必须是可访问和可使用的,即该文件必须和当前JSP页面在同一WEB服务目录中。所谓静态插入,就是指当前JSP页面和插入的部分合并成一个新的JSP页面,然后JSP引擎再将这个新的JSP页面转译成JAVA类文件。因此,插入文件后,必须保证新合并成的JSP页面符合JSP语法规则,即能够成为一个JSP页面文件。比如,如果一个JSP页面使用include指令插入另一个JSP文件,被插入的这上JSP页面中有一个设置页面contentType属性的page指令。而当前JSP页面已经使用page设置了contentType属性的属性值,那么新合并的JSP页面就出现了语法错误,当转译合并的JSP页面到JAVA文件时就会失败。

9。JSP动作标签
include动作标签
<jsp:include page="文件名"/>或<jsp:include page="文件名"></jsp:include>
该动作标签告诉JSP页面动态包含一个文件,即JSP页面运行时才将文件加入。与静态插入文件的include指令标签不同,当JSP引擎把JSP页面转译成JAVA文件时,不把JSP页面中动作指令include所包含的文件与原JSP页面合并成一个新的JSP页面,而是告诉JAVA解释器,当这个文件在JSP运行时(JAVA文件的字节码文件被加载执行)才被包含进来。如果包含的文件是普通的文本文件,就将文件的内容发送到客户端,由客户端负责显示。如果包含的文件是JSP文件,JSP引擎就执行这个文件,然后将执行的结果发送到客户端,并由客户端负责显示这些结果。
include动作标签与静态插入文件的include指令标签有很大的不同,动作标签是在执行时才对包含的文件进行处理,因此JSP页面和它所包含的文件在逻辑和语法上是独立的。如果你对包含的文件进行了修改,那么运行时将看到所包含文件修改后的结果。而静态include指令包含的文件如果发生了变化,我们必须要重新将JSP页面转译成JAVA文件(可将该JSP页面重新保存,然后再访问,就可产生新的转译JAVA文件),否则只能看到所包含的文件修改前的内容。
param动作标签
<jsp:param name="名字" value="指定给param的值" />
param标签以“名字--值”对的形式为其他标签提供附加信息,这个标签与jsp:include、jsp:forward、jsp:plugin标签一起使用。
当该标签与jsp:include标签一起使用时,可以将param标签中的值传递到include指令要加载的文件中去,因此include动作标签如果结合param标签,可以在加载文件的过程中向该文件提供信息。
forward动作标签
<jsp:forward page="要转向的页面" ></jsp:forward>或<jsp:forward page="要转向的页面" />
该指令的作用是:从该指令处停止当前页面的继续执行,而转向其他的一个JSP页面。该指令也可以结合param指令,向要转到的页面传送信息。
plugin动作标签
<jsp:plugin type="applet" code="小应用程序的字节码文件"
     jreversion="java虚拟机版本号" width="小程序宽度值" height="小程序高度值" >
<jsp:fallback>
     提示信息:用来提示用户的浏览器是否支持插件下载
</jsp:fallback>
</jsp:plugin>
在页面中使用普通的HTML标记<apple ...></apple>可以让客户下载一个java applet小应用程序,但并不是所有的客户的浏览器都支持java applet小程序。而使用plugin动作标签可以保证客户能执行你的小应用程序。该动作标签指示JSP页面加载java plugin插件。该插件由客户负责下载,并使用该插件来运行java applet小应用程序。如果JSP页面和java applet小程序不在同一文件夹下,plugin动作标签中应增加codebase选项,指出小程序所在的位置。在plugin动作标签中还可以增加如下的选项,以便控制java applet的位置
align:取值是buttom、top、middle、left、right。例如,align取值是left时,小程序在页面的左边,页面的其他部分在右边。
Hspace:指定java applet与左右对象之间的距离
Vspace:指定java applet与上下对象之间的距离
useBean动作标签
该标签用来创建并使用一个JavaBean,是非常重要的一个动作标签Sun公司的倡导是:用HTML完成JSP页面的静态部分,用JavaBean完成动态部分,实现真正意义上的静态和动态分割。

posted @ 2009-08-14 21:59  suzihuy  阅读(851)  评论(0编辑  收藏  举报