分享

JSP语法

 凤舞天煌 2007-01-16
 一个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格式为:
<jsp: directive.include file="relativeURL"/>
被包含的路径为相对URL。如果relativeURL以/打头,则表示相对于当前Web应用所在路径,若不以/打头,则表示相对于当前JSP目录。
Include Directive在JSP被转换和编译时将文本文件插入JSP中。被包含的文件可以是JSP文件,HTML文件,XML文件或TXT文件,甚至是Java编程语言代码。这个过程是静态的,也就是说在Web容器对JSP转换时直接插入到JSP中,不会在后来每次JSP调用时重新插入。下面是一个Include Directive的例子。
includejsp.jsp:
<html>
<head><title>Include Date JSP</title></head>
<body bgcolor="white">
<font color="blue">
当前时间是:<%@ include file="date.jsp"%>
</font>
</body>
</html>
 
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语法格式为:
<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.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: inputcheck>标记中feytag。这个属性不能为空。编程开发人员开发的Taglib前缀不允许使用下列标记前缀名称:jsp,jspx,java,servlet,sun和sunw。
下例是一个Tablib Directive使用实例:
<%@ tablib uri="http://www./tags/" prefix="feytag" %>
<feytag:inputcheck>
...
</feytag:inputcheck>
 
二、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格式为:
<jsp:declaration>
 declaration;[declaration;]...
</jsp:declaration>
下面是Declaration的使用实例:
<%! int i = 0;%>
<%! int a,b,c; String s = newString();%>
 
2.Expression
 Expression是JSP脚本语言中的表达式,它直接将处理过的文字结果输出到JSP响应中。Expression的格式为:
<%=expression%>
XML格式为:
<jsp:expression>
 expression
</jsp:expression>
前面的例子中已经多处使用到了Expression。
 
3.Scriptlet
 Scriptlet是指在JSP中嵌的程序片断,它使JSP直接使用Java的编程功能。其格式为:
<% code fragment %>
XML格式为:
<jsp:scriptlet>
 code fragment
</jsp:scriptlet>
一个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!
<br>
<% 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.<jsp:forward>
 将Web请求转交给另外的HTML文件、JSP或servlet。这相当于servlet中的RequestDispatcher.forward()功能(见前面的《servlet的协作一篇》)。它有两种格式:
<jsp:forward page="{relativeURL|<%=expression%>"/>
可以在转交请求时增加请求参数(Request.parameters):
<jsp:forward page="{relativeURL|<%%=expression%>">
 <jsp:param name="parametername" value="{parametervalue|<%=expression%>}"/>...
</jsp:forward>
 
2.<jsp:include>
 在响应中包括静态文件或其他动态Web构件的处理结果。它相当于servlet中的RequestDispatcher.include()功能(见前面的《servlet的协作一篇》)。它的格式如下:
<jsp:include page="{relativeURL|<%=expression>}" flush="true|false" />
 
<jsp:include page="{relativeURL|<%=expression>}" flush="true|false" >
 <jsp:param name="parametername" value="{parameterValue|<%=expression%>}">...
</jsp:include>
 
3.<jsp:useBean>
 根据设定的范围找到初始化JSP中使用的JavaBean(关于JavaBean在JSP中的用法将另起篇幅详细介绍)。其格式为:
<jsp:useBean id="beanInstanceName">
 scope="page|request|session|application"
{
 class="package.class"[type="package.class"]|
 beanName="{package.class|<%=expression%>}"
}
{/>|>other elements</jsp:useBean>}
 
<jsp:useBean>会找到JSP使用的JavaBean的实体。如果这个JavaBean不存在,它会生成一个新实例。<jsp:useBean>之中可以包含<jsp:serProperty>用来设置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的使用实例:
<jsp:useBean id="cart" scope="session" class="fey.Login"/>
<jsp:setProperty name="login" property="*"/>
<jsp:useBean id="user" scope="session" class="fey.User">
<jsp:setProperty name="user" property="username" value="zhangsan"/>
</jsp:useBean>
 
<jsp:getProperty>使用JavaBean的get方法得到一个属性值并将结果插入到JSP响应中。在使用<jsp:getProperty>之前必须先使用<jsp:useBean>引入一个JavaBean。其格式如下:
<jsp:getProperty name="beanInstanceName" property="propertyname">
 
<jsp:setProperty>使用JavaBean属性的set方法设定JavaBean属性的值。同样,在使用它之前也必须先使用<jsp:useBean>引入JavaBean。其格式如下:
<jsp:setProperty name="beanInstanceName"
{
 property="*"|
 property="propertyname"[param="parameterName"]|
 property="propertyname" value="{stringLiteral|<%=expression%>}"
}
/>
各个属性说明如下:
name:已经被创建或获得的JavaBean名称。这个属性要和<jsp:useBean>的id一致。
property="*":将全部的Web请求参数(request parameter)存放到JavaBean的属生中(JavaBean属性的名称必须和请求参数的名称一致)。
property="propertyname"[param="parameterName"]:设定一个JavaBean属性为一个请求参数的值。
property="propertyname" value="{stringLiteral|<%=expression%>}":直接由一个字符串或表过式指定一个JavaBean的值。
 
4.<jsp:plugin>
 <jsp:plugin>通过在浏览器的java插件上运行一个Java Applet或者JavaBean。其格式为:
<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>
各个属性说明如下:
 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的网址。
 [<jsp:params>
    [<jsp:param name="parameterName" value="{parameterValue|<%=expression%>}"]...
 </jsp:params>〕:指定可以供Applet或JavaBean使用的初始变量的值。
 [<jsp:fallback> text message for user </jsp:fallback>]:当plug-in不能启动时用来显示的文本信息。如果plug-in启动了但不能运行,一般会有对话框弹出解释错误的信息。
 
5.两个与XML格式JSP有关的元素
 <jsp:root>定义了标准的JSP元素和Taglib的namespace。它的格式为:
<jsp:root
 xmlns:jsp="http://java./JSP/Page"
 [xmlns:taglibPrefix="URI"]...
 version="1.2"
    JSP Page
</jsp:root>
 
<jsp:text>用来添加模板数据。格式为:
<jsp:text>
 template data
</jsp:text>

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多