JSP语法基础一

来源:百度文库 编辑:神马文学网 时间:2024/03/29 12:59:15
 一个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 --%> 三、ActionsActions表示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。其格式如下:各个属性说明如下: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。其格式为:}"] [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。它的格式为:JSP Page 用来添加模板数据。格式为: template data