JSP语法

来源:百度文库 编辑:神马文学网 时间:2024/04/25 13:01:48
一个JSP文件包括模板数据和JSP元素。模板数据是指JSP中存在的HTML或XML文本,Web容器在转换JSP时直接将模板数据作为响应输出。JSP元素分为以下几类:
Directive(指示符),Scripting Elements(脚本元素),Comments(注释)和Action(动作)。每类元素又可以进行细分。
JSP规定了一般JSP语法和符合XML格式的语法。对于Directive,Scripting Elements和Comments,存在XML格式的语法和一般JSP语法格式。以下逐一说明各类语法。
一、Directives
Driectives定义了JSP对应的servlet的整体结构。它包括Include Directive,Page Directive和Tablib Directive。它们都是以“<%@”开头,几种Directive分别对应servlet的几类宏信息。
1.Include Directive
Include Directive在当前JSP中包含另一个静态文件。其格式为:
<%@ include file = "relativeURL" %>
其对应XML格式为:

被包含的路径为相对URL。如果relativeURL以“/”打头,则表示相对于当前Web应用所在路径,若不以“/”打头,则表示相对于当前JSP目录。
Include Directive在JSP被转换和编译时将文本文件插入JSP中。被包含的文件可以是JSP文件,HTML文件,XML文件或TXT文件,甚至是Java编程语言代码。这个过程是“静态”的,也就是说在Web容器对JSP转换时直接插入到JSP中,不会在后来每次JSP调用时重新插入。下面是一个Include Directive的例子。
includejsp.jsp:

Include Date JSP


当前时间是:<%@ include file="date.jsp"%>



date.jsp:
<%@ page import="java.util.*"%>
<%=(new java.util.Date()).toLocaleString()%>
2.Page Directive
Page Driective定义了整个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"]
[pageEncoding="characterSet|ISO-8859-1"]
%>
共中粗体部分表示默认值。
XML语法格式为:

语法中各部分属性说明如下:
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"%>

3.Taglib Directive
Taglib Directive定义在JSP中使用的定制标记的标记库和前缀。Taglib是JSP中的拓展的技术,主要指编程人员可以编写自己定义的标记。在JSP中Taglib directive必须在定制标记之前使用。关于Taglib另起篇幅详细说明。
Taglib Directive的语法格式如下:
<%@ taglib uri="URIForLibrary" prefix="tagPrefix" %>
属性说明如下:
uri:通用资源标识符。定义了用来描述特定定制标记的TLD位置。URI可能是一个URL,URN,或者是一个绝对或相对路径。
prefix:定义了Tagbib前缀名称。例如,在标记中feytag。这个属性不能为空。编程开发人员开发的Taglib前缀不允许使用下列标记前缀名称:jsp,jspx,java,servlet,sun和sunw。
下例是一个Tablib Directive使用实例:
<%@ tablib uri="http://www.fey.com.cn/tags/" prefix="feytag" %>

...

二、Scripting Elements
Scripting Elements可以让编程者在JSP中使用动态编程语言,它可以在JSP中嵌入类似Java的程序。Scripting Elements包括Declaration,Expression和Scriptlet。它提供了灵活的编程机制,同时也会导致JSP结构混乱,不易被理解。JSP2.0版本提供了代替Scripting Elements的方法。
1.Declaration
Declaration定义了JSP脚本语言使用的变量和函数,这类似于Java中定义全局变量,或可以把它想像成pascal编程语言中的单元文件的interface部分。其语法格式为:
<%! declaration;[declaration;]...%>
XML格式为:

declaration;[declaration;]...

下面是Declaration的使用实例:
<%! int i = 0;%>
<%! int a,b,c; String s = newString();%>
2.Expression
Expression是JSP脚本语言中的表达式,它直接将处理过的文字结果输出到JSP响应中。Expression的格式为:
<%=expression%>
XML格式为:

expression

前面的例子中已经多处使用到了Expression。
3.Scriptlet
Scriptlet是指在JSP中嵌的程序片断,它使JSP直接使用Java的编程功能。其格式为:
<% code fragment %>
XML格式为:

code fragment

一个Scriptlet就是一段程序。可以在其中定义变量和方法,使用合法的表达式,以及使用JSP的隐藏对象。Scriptleg是JSP中的“动态”处理部分,在处理每次JSP请求时被执行,相当于JSP转换成servlet后的servlet代码。如果Scriptlet要输出响应文字,应调用out对象。
以下实例是是Scriptlet的一个使用实例。请注意该程序突出了下的Scriptlet的“动态”属性:
<%@ page import="java.util.*" %>
<% Calendar myCalendar = Calendar.getInstanse();
int currentHour = myCalendar.get(Calendar.HOUR_OF_DAY);%>
Welcome!


<% if(currentHour <12){%>
Good Morning!
<% } else if((currentHour >12)&&(current<18)){%>
Good Afternoon!
<%} else {%>
Good Evening!
<%}%>
4.Comments
Comments是JSP的注释,就像Java代码中的注释一样。Comment的格式为:
<%-- coment --%>
三、Actions
Actions表示JSP中的一个具体操作,它使用规定的标签和用法,将具体的编程细节封闭成一个Action。
1.
将Web请求转交给另外的HTML文件、JSP或servlet。这相当于servlet中的RequestDispatcher.forward()功能(见前面的《servlet的协作一篇》)。它有两种格式:

可以在转交请求时增加请求参数(Request.parameters):

...

2.
在响应中包括静态文件或其他动态Web构件的处理结果。它相当于servlet中的RequestDispatcher.include()功能(见前面的《servlet的协作一篇》)。它的格式如下:


...

3.
根据设定的范围找到初始化JSP中使用的JavaBean(关于JavaBean在JSP中的用法将另起篇幅详细介绍)。其格式为:

scope="page|request|session|application"
{
class="package.class"[type="package.class"]|
beanName="{package.class|<%=expression%>}"
}
{/>|>other elements
}
会找到JSP使用的JavaBean的实体。如果这个JavaBean不存在,它会生成一个新实例。之中可以包含用来设置JavaBean的参数。
各属性说明如下:
id:定义了识别JavaBean的标识符。可以在JSP中的expression或Scriptlegs中通过这个id调用JavaBean。
scope:定义JavaBean存在的范围,默认值是“page”。若设为request,则可以通过request.getAttribute(beanInstanceName)方法获得JavaBean。
class:指JavaBean的类名
type:如果JavaBean已经在某个范围存在,type设定了其数据类型。数据类型可以是class的超类。
beanName:根据类名或序列化模板创建一个JavaBean。
下面是一些useBean的使用实例:





使用JavaBean的get方法得到一个属性值并将结果插入到JSP响应中。在使用之前必须先使用引入一个JavaBean。其格式如下:

使用JavaBean属性的set方法设定JavaBean属性的值。同样,在使用它之前也必须先使用引入JavaBean。其格式如下:
{
property="*"|
property="propertyname"[param="parameterName"]|
property="propertyname" value="{stringLiteral|<%=expression%>}"
}
/>
各个属性说明如下:
name:已经被创建或获得的JavaBean名称。这个属性要和的id一致。
property="*":将全部的Web请求参数(request parameter)存放到JavaBean的属生中(JavaBean属性的名称必须和请求参数的名称一致)。
property="propertyname"[param="parameterName"]:设定一个JavaBean属性为一个请求参数的值。
property="propertyname" value="{stringLiteral|<%=expression%>}":直接由一个字符串或表过式指定一个JavaBean的值。
4.
通过在浏览器的java插件上运行一个Java Applet或者JavaBean。其格式为:
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"]>
[
[
]
[ text message for user ]

各个属性说明如下:
type="bean|applet":表明对象是JavaBean还是Applet;
code="classFileName":指也Java Plug-in需要运行的程序的类名。文件应该是在codebase属生指定的目录中。
codebase="classFileDirectoryName":指出Java Plug-in需要运行的程序所在的目录名。如果没有指定这个属性,默认为当前JSP所在目录。
[name="instanceName"]:JavaBean或Applet的名称,可以供同一JSP内部的JavaBean或Applet对象之间的通信。
[archive="URIToArchive,..."]:需要加载的jar文件的路径。这些jar会通过Web安全地加载到客户机。
[align="bottom|top|middle|left|right"]:指定对象在浏览器中的位置。
[height="{displayPixels|<%=expression%>}"]:指定对象最初在浏览器中的宽度。
[width="{displayPixels|<%=expression%>}"]:指定对象最初在浏览器中的高度。
[hspace="leftRightPixels"]:指定对象周围空间的高度
[vspace="topBottomPixels"]:指定对象周围空间的宽度
[jreversion="JREVersionNumber|1.2"]:说明JRE的版本号。
[nspluginurl="URLToPlugin"]:提供Netscape下载JRE Plug-in的网址。
[iepluginurl="URLToPlugin"]>:提供IE下载JRE Plug-in的网址。
[
[
〕:指定可以供Applet或JavaBean使用的初始变量的值。
[ text message for user ]:当plug-in不能启动时用来显示的文本信息。如果plug-in启动了但不能运行,一般会有对话框弹出解释错误的信息。
5.两个与XML格式JSP有关的元素
定义了标准的JSP元素和Taglib的namespace。它的格式为:
xmlns:jsp="http://java.sun.com/JSP/Page"
[xmlns:taglibPrefix="URI"]...
version="1.2"
JSP Page

用来添加模板数据。格式为:

template data