┣1.declaration
Declaration定义了JSP脚本语言使用的变量和函数,这类似于Java中定义全局变量,或可以把它想像成pascal编程语言中的单元文件的interface部分。
声明的X
M L形式语法为:
<jsp:declaration> declaration goes here
< /jsp:declaration>
举例如下:
<%! public String f(int i) { if
(i<3) return("..."); ... } %>
相应的X M L语句为:
<jsp:declaration>
<![CDATA[ public String f(int i) { if (i<3) return("..."); }
]]>
</jsp:declaration>
下面是相关的D T D文件片断:
<!ELEMENT
jsp:declaration (#PCDATA) >
下面是Declaration的使用实例:
<%! int i =
0;%>
<%
System.out.println(i);
%>
或者可以定义如下形式:
<jsp:declaration>int i =
0;</jsp:declaration>
<%
System.out.println(i);
%>
┣2.directive
Page Driective定义了整个JSP的属性。其语法格式如下:
作为X M L文档的page指为:
<jsp:directive.page
page_directive_attr_list />
举例如下。
一般的page指为:
<%@
page info="my latest JSP Example V1.1" %>
相应的X M L相容语法:
<jsp:directive.page info="my
latest JSP Example V1.1" />
其详细语法格式如下:
<%@
page
[language="java"]
[extends="package.class"]
[import="{package.class|package.*},..."]
[session="true|false"]
[buffer="none|8kb|sizekb"]
[autoFlush="true|false"]
[isThreadSafe="true|false"]
[info="text"]
[errorPage="relativeURL"]
[contentType="mimeType[;charset=characterSet]"|"text/html;charset=ISO-8859-1"]
[isErrorPage="true|false"]
[pageEncoding="characterSet|ISO-8859-1"]
%>
共中粗体部分表示默认值。
XML语法格式为:
<jsp: directive.page pageDirectiveAttrilist
/>
语法中各部分属性说明如下:
language="java":定义JSP适用的编程语言,目前惟一允许的语言是java。
extends="package.class":定义这个JSP编译后生成类的超类,一般使用默认值。
[import="{package.class|package.*},..."]:相当于java语言的import指令。java.lang.*,javax.servlet.*,javax.servlet.jsp.*,java.servlet.htt.*已经被默认引入,不需要在JSP中再引入。
session="true|false":决定是否该客户在使用JSP时必须参加HTTP会话。若该属性值为true,JSP中的session对象定义为当前会话或新的会话;若为false,则在该JSP中不能使用session对象。
buffer="none|8kb|sizekb":定义JSP响应游览器输出out对象缓冲器大小。[autoFlush="true|false"]:设定当缓冲器满时缓冲器中的输出内容是否会被清空。如果该属性为false,当缓冲器满时就会有异常弹出。
isThreadSafe="true|false":定义JSP是否支持线程安全。若设为true,编程者必须在JSP代码中保证多个客户的线程安全;若设为false,则JSP容器保证同一时刻一个JSP只处理一个请求。
info="text":定义JSP的基本信息,信息可以使用Servlet.getServletInfo()方法得到。
errorPage="relativeURL":定义JSP对应的错误处理JSP的相对URL。如果relativeURL以“/”打头,则表示相对于当前Web应用所在路径,若不以“/”打头,则表示相对于当前JSP目录。
contentType="mimeType[;charset=characterSet]"|"text/html;charset=ISO-8859-1":定义JSP在Web响应中使用的MIME类型和字符编码。
isErrorPage="true|false":定义当前JSP对应的错误页。如果为true,JSP中可以使用exception对象;否则JSP中不能使用exception对象。
pageEncoding="characterSet|ISO-8859-1":定义Web容器对JSP响应的字符编码。
以下是几个Page Directive的使用实例:
<%@ page
import="java.io.*"%>
<%@ page
contextType="text/html;charset=gb2312" session="true"%>
<%@ page
buffer="12kb" autoFlush="false"%>
<jsp:directive.page
errorPage="error.jsp"/>
┣3.expression
Expression是JSP脚本语言中的表达式,它直接将处理过的文字结果输出到JSP响应中。
声明的X M L形式语法为:
<jsp:expression> expression goes here
< /jsp:expression>
举例如下:
<%= str + i + " " + date%>
相应的X M
L语句为:
<jsp:expression>
String str ="aasasda";
int i =
5;
java.util.Date date = new Date();
</jsp:expression>
下面是相关的D T
D文件片断:
<!ELEMENT jsp:expression (#PCDATA) >
例子如下:
<%! int i = 0;%>
<%=i%>
┣4.fallback
当plug-in不能启动时用来显示的文本信息。如果plug-in启动了但不能运行,一般会有对话框弹出解释错误的信息。
例子如下:
<jsp:plugin
type=applet code="Molecule.class"
codebase="/html">
<jsp:params>
<jsp:param
name="molecule" value="molecules/benzene.mol"
/>
</jsp:params>
<jsp:fallback>
<p>Unable
to load
applet</p>
</jsp:fallback>
</jsp:plugin>
┣5.forward
标签从一个JSP文件向另一个文件传递一个包含用户请求的request对象。<jsp:forward>标签以下的代码,将不能执行。你能够向目标文件传送参数和值,在这个例子中我们传递的参数名为username,值为scott,如果你使用了<jsp:param>标签的话,目标文件必须是一个动态的文件,能够处理参数。如果你使用了非缓冲输出的话,那么使用<jsp:forward>时就要小心。如果在你使用<jsp:forward>之前,jsp文件已经有了数据,那么文件执行就会出错。
属性:
page="{relativeURL
| <%= expression
%>}",这里是一个表达式或是一个字符串用于说明你将要定向的文件或URL。这个文件可以是JSP,程序段,或者其它能够处理request对象的文件(如asp,cgi,php)。
<jsp:param
name="parameterName" value="{parameterValue | <%= expression %>}"
/>+向一个动态文件发送一个或多个参数,这个文件一定是动态文件。如果你想传递多个参数,你可以在一个JSP文件中使用多个<jsp:param>。name指定参数名,value指定参数
简明的说将Web请求转交给另外的HTML文件、JSP或servlet。这相当于servlet中的RequestDispatcher.forward()功能。
它有两种格式:
<jsp:forward
page="{relativeURL|<%=expression%>"/>
可以在转交请求时增加请求参数(Request.parameters):
<jsp:forward
page="{relativeURL|<%%=expression%>">
<jsp:param
name="parametername"
value="{parametervalue|<%=expression%>}"/>...
</jsp:forward>
例子如下:
<jsp:forward
page="/do/login" />
<jsp:forward page="/do/login">
<jsp:param
name="username" value="test" />
</jsp:forward>
┣6.getProperty
获取Bean的属性值,用于显示在页面中
JSP 语法
<jsp:getProperty name="beanInstanceName" property="propertyName"
/>
例子:
<jsp:useBean id="calendar" scope="page"
class="employee.Calendar" />
<h2>
Calendar of
<jsp:getProperty name="calendar" property="username"
/>
</h2>
描述
这个<jsp:getProperty>元素将获得Bean的属性值,并可以将其使用或显示在JSP页面中.在你使用
<jsp:getProperty>之前,你必须用<jsp:useBean>创建它.
<jsp:getProperty>元素有一些限制:
你不能使用<jsp:getProperty>来检索一个已经被索引了的属性
你能够和JavaBeans组件一起使用<jsp:getProperty>,但是不能与Enterprise
Bean一起使用。
属性
name="beanInstanceName"
bean的名字,由<jsp:useBean>指定
property="propertyName"
所指定的Bean的属性名。
技巧:
在sun的JSP参考中提到,如果你使用<jsp:getProperty>来检索的值是空值,那么NullPointerException将会出现,同时如果使用程序段或表达式来检索其值,那么在浏览器上出现的是null(空).
┣7.include
作为X M L文档的i n c l u d e指为:
<jsp:directive.include file="
relativeURLspec" flush="true|false" />
举例如下。
一般的i n c l u d
e指令:
<%@ include file="copyright.hmtl" %>
相应的X M
L相容语法:
<jsp:directive.include file="htmldocs/logo.html" />
例如:
<html>
<head><title>Include Date
JSP</title></head>
<body
bgcolor="white">
<font
color="blue">
当前时间是:<%@
include file="date.jsp"%>
</font>
</body>
</html>
┣8.page
<%@ page %>指令作用于整个JSP页面,同样包括静态的包含文件。但是<% @ page
%>指令不能作用于动态的包含文件,比如 <jsp:include>
你可以在一个页面中用上多个<% @ page
%>指令,但是其中的属性只能用一次,不过也有个例外,那就是import属性。因为import属性和Java中的import语句差不多(参照Java
Language),所以你就能多用此属性几次了。
无论你把<% @ page
%>指令放在JSP的文件的哪个地方,它的作用范围都是整个JSP页面。不过,为了JSP程序的可读性,以及好的编程习惯,最好还是把它放在JSP文件的顶部。
语法
<%@ page
[
language="java" ]
[
extends="package.class" ]
[
import="{package.class | package.*}, ..." ]
[
session="true | false" ]
[
buffer="none | 8kb | sizekb" ]
[
autoFlush="true | false" ]
[
isThreadSafe="true | false" ]
[ info="text" ]
[
errorPage="relativeURL" ]
[
contentType="mimeType [ ;charset=characterSet ]" | "text/html ;
charset=ISO-8859-1" ]
[
isErrorPage="true | false" ]
例子
<%@
page import="java.util.*, java.lang.*" %>
<%@
page buffer="5kb" autoFlush="false" %>
<%@
page errorPage="error.jsp" %>
┣9.param
设置参数
param.jsp:
<%@ page
contentType="text/html;charset=GB2312" %>
<HTML>
<BODY>
<%
double i=Math.random();
%>
< jsp:forward page="proc.jsp" >
<jsp:param name="number" value="<%=i%>" />
< /jsp:forward>
</BODY>
</HTML>
proc.jsp:
<%@ page
contentType="text/html;charset=GB2312" %>
<HTML>
<BODY><FONT
Size=3>
<%String
str=request.getParameter("number");
double n=Double.parseDouble(str);
%>
< P>传递的随机数是:<BR>
< %=n%>
</BODY>
</HTML>
┣10.params
传递多个参数:
<jsp:plugin type=applet
code="Molecule.class" codebase="/html">
<jsp:params>
<jsp:param name="molecule"
value="molecules/benzene.mol" />
</jsp:params>
<jsp:fallback>
<p>Unable
to load applet</p>
</jsp:fallback>
</jsp:plugin>
┣11.plugin
<jsp:plugin>元素用于在浏览器中播放或显示一个对象(典型的就是applet和Bean),而这种显示需要在浏览器的java插件。当Jsp文件被编译,送往浏览器时,<jsp:plugin>元素将会根据浏览器的版本替换成<object>或者<embed>元素。注意,<object>用于HTML
4.0 ,<embed>用于HTML
3.2。一般来说,<jsp:plugin>元素会指定对象是Applet还是Bean,同样也会指定class的名字,还有位置,另外还会指定将从哪里下载这个Java插件。
具体如下:
属性:
type="bean |
applet".将被执行的插件对象的类型,你必须得指定这个是Bean还是applet,因为这个属性没有缺省值。
code="classFileName"将会被Java插件执行的Java
Class的名字,必须以.class结尾。这个文件必须存在于codebase属性指定的目录中。
codebase="classFileDirectoryName"将会被执行的Java
Class文件的目录(或者是路径),如果你没有提供此属性,那么使用<jsp:plugin>的jsp文件的目录将会被使用。
name="instanceName"这个Bean或applet实例的名字,它将会在Jsp其它的地方调用。archive="URIToArchive,
..."一些由逗号分开的路径名,这些路径名用于预装一些将要使用的class,这会提高applet的性能.
align="bottom | top | middle | left | right"图形,对象,Applet的位置,有以下值:
bottom、top、middle、left 、right
height="displayPixels" width="displayPixels"
Applet或Bean将要显示的长宽的值,此值为数字,单位为象素
hspace="leftRightPixels" vspace="topBottomPixels"
Applet或Bean显示时在屏幕左右,上下所需留下的空间,单位为象素。
jreversion="JREVersionNumber | 1.1" Applet或Bean运行所需的Java Runtime Environment
(JRE) 的版本,缺省值是 1.1。
nspluginurl="URLToPlugin" Netscape
Navigator用户能够使用的JRE的下载地址,此值为一个标准的URL,如http://www.aspcn.com/jsp
iepluginurl="URLToPlugin" IE用户能够使用的JRE的下载地址,此值为一个标准的URL,如http://www.aspcn.com/jsp
<jsp:params>
[ <jsp:param name="parameterName" value="{parameterValue | <%= expression
%>}" /> ]+ </jsp:params>
你需要向applet或Bean传送的参数或参数值。
<jsp:fallback> text message for user
< /jsp:fallback>一段文字用于Java 。
插件不能启动时显示给用户的,如果插件能够启动而applet或Bean不能,那么浏览器会有一个出错信息弹出。
其格式为:
<jsp:plugin
type="bean|applet"
code="classFileName"
codebase="classFileDirectoryName"
[name="instanceName"]
[archive="URIToArchive,..."]
[align="bottom|top|middle|left|right"]
[height="{displayPixels|<%=expression%>}"]
[width="{displayPixels|<%=expression%>}"]
[hspace="leftRightPixels"]
[vspace="topBottomPixels"]
[jreversion="JREVersionNumber|1.2"]
[nspluginurl="URLToPlugin"]
[iepluginurl="URLToPlugin"]>
[<jsp:params>
[<jsp:param name="parameterName"
value="{parameterValue|<%=expression%>}"]...
</jsp:params>]
[<jsp:fallback> text message for
user < /jsp:fallback>]
</jsp:plugin>
例子如下:
<jsp:plugin
type=applet code="Molecule.class"
codebase="/html">
<jsp:params>
<jsp:param
name="molecule" value="molecules/benzene.mol"
/>
</jsp:params>
<jsp:fallback>
<p>Unable
to load
applet</p>
</jsp:fallback>
</jsp:plugin>
┣12.root
<jsp:root>元素只能作为JSP文档的根元素使用,不过JSP文档也可以不使用<jsp:root>元素(JSP
1.2规范要求所有的JSP文档都以<jsp:root>作为它的根元素)。
<jsp:root>元素有两个作用,一个是用于标识JSP文件为JSP文档,另一个是用于包装非格式良好的XML文档。
<jsp:root>元素有一个必备的属性version,用于指明页面使用的JSP规范的版本,例如代码所示:
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0">
此外,<jsp:root>元素还可以有0个或多个xmlns属性,用于声明名称空间。在JSP文档中,不能使用taglib指令,取而代之的是使用xmlns属性,形式为xmlns:prefix="uri",uri标识要使用的标签库。在JSP1.2规范中,要求所有的标签库声明都要在<jsp:root>元素上,而JSP2.0规范则没有这个要求,我们可以在使用标签时再声明。例如,我们要使用JSTL中的标签<c:forEach>,可以直接在<c:forEach>上声明使用的标签库,如下:
<c:forEach xmlns:c="http://java.sun.com/jsp/jstl/core" var="counter"
begin="1" end="${3}">
<row>${counter}</row>
</c:forEach>
┣13.scriptlet
包含一个有效的程序段.
JSP 语法
<% code fragment %>
例子
<%
String name = null;
if
(request.getParameter("name") == null) {
%>
<%@ include file="error.html"
%>
<%
} else {
foo.setName(request.getParameter("name"));
if
(foo.getName().equalsIgnoreCase("integra"))
name
= "acura";
if
(name.equalsIgnoreCase( "acura" )) {
%>
描述
一个scriptlet能够包含多个jsp语句,方法,变量,表达式
因为scriptlet,我们便能做以下的事:
声明将要用到的变量或方法(参考
声明).
编写JSP表达式(参考 表达式).
使用任何隐含的对象和任何用<jsp:useBean>声明过的对象
编写JSP语句
(如果你在使用Java语言,这些语句必须遵从Java Language
Specification,).
任何文本,HTML标记,JSP元素必须在scriptlet之外
当JSP收到客户的请求时,scriptlet就会被执行,如果scriptlet有显示的内容,这些显示的内容就被存在out对象中
┣14.setProperty
设置Bean中的属性值.
JSP语法
<jsp:setProperty
name="beanInstanceName"
{
property=
"*" |
property="propertyName" [ param="parameterName" ]
|
property="propertyName" value="{string | <%= expression
%>}"
}
/>
例子
<jsp:setProperty
name="mybean" property="*" />
<jsp:setProperty name="mybean"
property="username" />
<jsp:setProperty name="mybean"
property="username" value="Steve"
/>
描述
<jsp:setProperty>元素使用Bean给定的setter方法,在Bean中设置一个或多个属性值。你在使用这个元素之前必须得使用<jsp:useBean>声明此Bean.因为,<jsp:useBean>和<jsp:setProperty>是联系在一起的,同时这他们使用的Bean实例的名字也应当相匹配(就是说,在<jsp:setProperty>中的name的值应当和<jsp:useBean>中id的值相同)
你能使用多种方法利用<jsp:setProperty>来设定属性值
:
通过用户输入的所有值(被做为参数储存中request对象中)来匹配Bean中的属性
通过用户输入的指定的值来匹配Bean中指定的属性
在运行时使用一个表达式来匹配Bean的属性
每一种设定属性值的方法都有其特定的语法,下面我们会来讲解
属性及其用法
name="beanInstanceName"
表示已经在<jsp:useBean>中创建的Bean实例的名字.
property="*"
储存用户在Jsp输入的所有值,用于匹配Bean中的属性。在Bean中的属性的名字必须和request对象中的参数名一致.
从客户传到服器上的参数值一般都是字符类型
,这些字符串为了能够在Bean中匹配就必须转换成其它的类型,下面的表中列出了Bean属性的类型以及他们的转换方法.
把字符串转化为其它类型的方法.
Property 类型
方法
boolean or
Boolean
java.lang.Boolean.valueOf(String)
byte or
Byte
java.lang.Byte.valueOf(String)
char or
Character
java.lang.Character.valueOf(String)
double or
Double
java.lang.Double.valueOf(String)
integer or
Integer
java.lang.Integer.valueOf(String)
float or
Float
java.lang.Float.valueOf(String)
long or
Long
java.lang.Long.valueOf(String)
如果request对象的参数值中有空值,那么对应的Bean属性将不会设定任何值。同样的,如果Bean中有一个属性没有与之对应的Request参数值,那么这个属性同样也不会设定.
property="propertyName"
[ param="parameterName"
]
使用request中的一个参数值来指定Bean中的一个属性值。在这个语法中,property指定Bean的属性名,param指定request中的参数名.
如果bean属性和request参数的名字不同,那么你就必须得指定property和param
,如果他们同名,那么你就只需要指明property就行了.
如查参数值为空(或未初始化),对应的Bean属性不被设定.
property
="propertyName"
value="{string | <%= expression
%>}"
使用指定的值来设定Bean属性。这个值可以是字符串,也可以是表达式。如果这个字符串,那么它就会被转换成Bean属性的类型(查看上面的表).如果它是一个表达式,那么它类型就必须和它将要设定的属性值的类型一致。
如果参数值为空,那么对应的属性值也不会被设定。另外,你不能在一个<jsp:setProperty>中同时使用param和value
技巧
如果你使用了property="*",那么Bean的属性没有必要按Html表单中的顺序排序
┣15.tablib
Taglib
Directive定义在JSP中使用的定制标记的标记库和前缀。Taglib是JSP中的拓展的技术,主要指编程人员可以编写自己定义的标记。在JSP中Taglib
directive必须在定制标记之前使用。关于Taglib另起篇幅详细说明。
Taglib Directive的语法格式如下:
<%@ taglib uri="URIForLibrary" prefix="tagPrefix"
%>
属性说明如下:
uri:通用资源标识符。定义了用来描述特定定制标记的TLD位置。URI可能是一个URL,URN,或者是一个绝对或相对路径。
prefix:定义了Tagbib前缀名称。例如,在<feytag:
inputcheck>标记中feytag。这个属性不能为空。编程开发人员开发的Taglib前缀不允许使用下列标记前缀名称:jsp,jspx,java,servlet,sun和sunw。
下例是一个Tablib Directive使用实例:
<%@taglib uri="http://struts.apache.org/tags-bean"
prefix="bean"%>
<bean:write>
...
</bean:write>
┣16.text
用来封装要输出的文本内容,该元素既可以用于输出固定的内容,也可以用于输出动态的内容,基本上是用不上。
例子:
<h1><jsp:text>dd</jsp:text></h1>
┣17.useBean
指的是创建一个Bean实例并指定它的名字和作用范围。
用于定位或示例一个JavaBeans组件。<jsp:useBean>首先会试图定位一个Bean实例,如果这个Bean不存在,那么<jsp:useBean>就会从一个class或模版中进行示例。
为了定位或示例一个Bean,<jsp:useBean>会进行以下步聚,顺序如下:
通过给定名字和范围试图定位一个Bean.
对这个Bean对象引用变量以你指定的名字命名.
如果发现了这个Bean,将会在这个变量中储存这个引用。如果你也指定了类型,那么这个Bean也设置为相应的类型.
如果没有发现这个Bean,将会从你指定的class中示例,并将此引用储存到一个新的变量中去。如果这个class的名字代表的是一个模版,那么这个Bean被java.beans.Beans.instantiate示例.
如果<jsp:useBean>已经示例(不是定位)了Bean,同时<jsp:useBean>和</jsp:useBean>中有元素,那么将会执行其中的代码.
<jsp:useBean>元素的主体通常包含有<jsp:setProperty>元素,用于设置Bean的属性值。正如上面第五步所说的,<jsp:useBean>的主体仅仅只有在<jsp:useBean>示例Bean时才会被执行,如果这个Bean已经存在,<jsp:useBean>能够定位它,那么主体中的内容将不会起作用
id="beanInstanceName"
在你所定义的范围中确认Bean的变量,你能在后面的程序中使用此变量名来分辨不同的Bean
这个变量名对大小写敏感,必须符合你所使用的脚本语言的规定,在Java
Programming Language中,这个规定在Java Language
规范已经写明。如果这个Bean已经在别的<jsp:useBean>中创建,那么这个id的值必须与原来的那个id值一致.
scope="page
| request | session |
application"
Bean存在的范围以及id变量名的有效范围。缺省值是page,以下是详细说明:
page -
你能在包含<jsp:useBean>元素的JSP文件以及此文件中的所有静态包含文件中使用Bean,直到页面执行完毕向客户端发回响应或转到另一个文件为止。
request
-
你在任何执行相同请求的Jsp文件中使用Bean,直到页面执行完毕向客户端发回响应或转到另一个文件为止。你能够使用Request对象访问Bean,比如request.getAttribute(beanInstanceName)
session
-
从创建Bean开始,你就能在任何使用相同session的Jsp文件中使用Bean.这个Bean存在于整个Session生存周期内,任何在分享此Session的Jsp文件都能使用同一Bean.注意在你创建Bean的Jsp文件中<%
@ page %>指令中必须指定session=true
application -
从创建Bean开始,你就能在任何使用相同application的Jsp文件中使用Bean.这个Bean存在于整个application生存周期内,任何在分享此application的Jsp文件都能使用同一Bean.
class="package.class"
使用new关键字以及class构造器从一个class中示例一个bean.这个class不能是抽象的,必须有一个公用的,没有参数的构造器.这个package的名字区别大小写。
type="package.class"
如果这个Bean已经在指定的范围中存在,那么写这个Bean一个新的数据库类型
。如果你没有使用class或beanName指定type,Bean将不会被示例.package和class的名字,区分大小写.
beanName="{package.class
| <%= expression %>}"
type="package.class"
使用java.beans.Beans.instantiate方法来从一个class或连续模版中示例一个Bean,同时指定Bean的类型。
beanName可以是package和class也可以是表达式,它的值会传给Beans.instantiate.tupe的值可以和Bean相同。
package
和 class 名字区分大小写.
例子:
<jsp:useBean id="cart" scope="session"
class="session.Carts" />
<jsp:setProperty name="cart" property="*"
/>
<jsp:useBean
id="checking" scope="session" class="bank.Checking" >
<jsp:setProperty
name="checking" property="balance" value="0.0" />
</jsp:useBean>