|
1、注释 JSP中有两种注释方式,概要的来讲可分为可见、不可见。 可见就是我们HTML中经常使用的方式,不过在这里注释中可以加入我们的JSP的表达式或者是代码段,例如:<!--comment<%=eXPression%>-->。
不可见的方式是JSP特点的一种注释方法,形如:<%--comment--%>的注释方式,当然这里的注释内容也可以是JSP的表达式或代码段。
2、JSP声明 注:JSP的声名语句必须以“;”结束,可以是变量声名,也可以是函数或类的声名,例:<%!int I;%>其中的“!”号是必须的。
3、JSP的语法 1、表达式。形如:<%=expression%>,注:表达式不能以“;”结束,在运行后表达式自动转换为字符串,但是如果表达式出现在代码段中则必须以“;”结束。 2、代码段。代码段可包括如下几个部分:JSP语句、方法(函数)、变量声名、表达式 例: <% String name=null; if(request.getParameter("name")==null) {%> <%@include file="error.htm"%> <%}else{ foo.setName(request.getParameter("name")); if(foo.getName().equalsIgnoreCase("integer")) name="acura"; if(name.equalsIgnoreCase("acura")) …… %>
4、JSP的指令 1、INCLUDE指令。作用:包含并解析静态文件,语法:<%@include file=filename%>。 这个被包含文件可以是html文件,jsp文件,文本文件,或者只是一段Java代码,但是你得注意在这个包含文件中不能使用< html>、</html>、<body>、</body>标记,因为这将会影响在原JSP文件中同样的标记,这样做有时会导致错误。 2、page指令。定义JSP文件中的全局属性,作用范围上整个JSP页面。 主要的属性参数:language="java"、extends="supper class"、import="{引入java 类库}"、buffer=none/8kb/sizekb(其中8KB为默认值)、isThreadSafe=true/false、 isErrorPage=true/false、session=true/false、autoflush="true/false"、info= "information(可通过serverlet.getServerletInfo()得到"、errorPage="filename"、 contentType="mimetype" 注:PAGE指令是页作用级的,不能在动态载入页面中使用,例:<%jsp:include%> 其中的每一个属性(除IMPORT外)在页面中只能出现一次,其位置可以在页面的任何位置,但推荐放在页首。下面的包在JSP编译时已经导入了,所以你就不需要再指明了: java.lang.*; javax.servlet.*; javax.servlet.jsp.*; javax.servlet.http.*; 3、taglib指令。定义一个标签库及自定义标签的前缀。 语法:<%@ taglib uri="URIToTagLibrary" prefix="tagPrefix" %> 例子:
<%@ taglib uri="http://www.jspcentral.com/tags" prefix="public" %> <public:loop> …… …… </public:loop> 描述: <% @ taglib %>指令声明此JSP文件使用了自定义的标签,同时引用标签库,也指定了他们的标签的前缀。
这里自定义的标签含有标签和元素之分。因为JSP文件能够转化为XML,所以了解标签和元素之间的联系很重要。标签只不过是一个在意义上被抬高了点的标记,是JSP元素的一部分。JSP元素是JSP语法的一部分,和XML一样有开始标记和结束标记。元素也可以包含其它的文本,标记,元素。比如,一个 jsp:plugin元素有<jsp:plugin>开始标记和</jsp:plugin>结束标记,同样也可以有< jsp:params>和<jsp:fallback>元素。
你必须在使用自定义标签之前使用<% @ taglib %>指令,而且你可以在一个页面中多次使用,但是前缀只能使用一次。
属性: uri="URIToTagLibrary" Uniform Resource Identifier (URI)根据标签的前缀对自定义的标签进行唯一的命名。 4、FORWARD指令。自动转向到其他页面静态或者动态。 语法:<jsp:forward page=”url”/> 或 <jsp:forward page=”url”> <jsp:parameter name=”parametername” value={“parametervalue”/<%=expression%>}/> </jsp:forward> <jsp:include page=filename%>包含一个静态或动态文件,对应的有两种引入方式: <1>、<jsp:include page=”url” flush=true/> <2>、<jsp:include page=”url” flues=true> <jsp:parameter name=”parametername” value=”parametervalue<%=expression%>”/> </jsp:include> 例子: <jsp:include page="scripts/login.jsp" /> <jsp:include page="copyright.html" /> <jsp:include page="/index.html" /> <jsp:include page="scripts/login.jsp"> <jsp:param name="username" value="jsmith" /> </jsp:include> <jsp:include>元素允许你包含动态文件和静态,这两种包含文件的结果是不同的。如果文件仅是静态文件,那么这种包含仅仅是把包含文件的内容加到jsp文件中去,而如果这个文件动态的,那么这个被包含文件也会被Jsp编译器执行(这一切与asp相似)。 6、<jsp:getproperty>和JAVABEAN合用来获得JAVABEAN的属性值。 用法: <jsp:usebean id=”example” scope=”request/page/session/application” class=”packagename.classname”/> <jsp:getproperty name=”example” property=”name”/> 在获取属性之前必须利用JAVABEAN来创建它 7、<jsp:plugin>执行一个APPLET或BEAN 语法:jsp:plugin type="bean / applet" code="classFileName" codebase="classFileDirectoryName" [ name="instanceName" ] [ archive="URIToArchive, ..." ] [ align="bottom / top / middle / left / right" ] [ height="displayPixels" ] [ width="displayPixels" ] [ hspace="leftRightPixels" ] [ vspace="topBottomPixels" ] [ jreversion="JREVersionNumber / 1.1" ] [ 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> 8、<jsp:useBean> 创建一个Bean实例并指定它的名字和作用范围.
语法:
<jsp:useBean id="beanInstanceName" scope="page request session application" { class="package.class" type="package.class" class="package.class" type="package.class" beanName="{package.class <%= expression %>}" type="package.class" } { /> > other elements </jsp:useBean> }
例子 <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>
描述: <jsp:useBean>用于定位或示例一个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 名字区分大小写。
5、JSP隐含对象 与JSP语法相关的最后的元素是一些叫做“隐含对象”的东西。在JSP代码片段中,你可以利用这些隐含对象与JSP页面的代码片段执行环境产生互动。应尽量少访问这些内置隐含对象。但是,在一某些情况下,访问隐含对象是可被接受的。若要充分利用隐含对象,就需了解最新的Java Servlet API。 下表列出可用的隐含对象集合。
隐含对象说明 request 客户端请求,包括从GET/POST请求传递过来的参数 response 网页传回客户端的反应 pageContext 在此管理网页属性 session 与请求关联的会话 application 代码片段的运行环境 out 传送响应的输出流 config 代码片段配置对象 page JSP网页本身 exception 有错的网页中未被捕获的例外
这些都是用来做什么的,你又如何来使用它们呢?基本上说,在你的脚本片段里,你可以用它们进入执行JSP代码的代码片段。用不着深入了解太多的Servlet API细节,我们来看看能用它们来做到的某些事情:
你可以不用表达式,直接进入“Out”隐含对象,将某些内容输出到响应中: <% out.println("Hello"); %>。 用不着把一个参数直接送到JavaBean,你可以从请求对象获取参数值: <% String name=request.getParameter("name"); out.println(name); %>.
在你用JSP进行开发的过程中,进行更多的开发的过程中,如果创建了JavaBeans或发现JSP文件中加入了太多的Java源代码,你就需要创建起支持作用的Java分类(class)了,它可以协助你重复利用源代码并减少JSP网页编译时间。当你需要创建Java分类文件时,你必须:
将JDSWK installation\bin目录添加到PATH中。在autoexec.bat文件PATH行的末尾,加入“C:1.2.2/bin”。 用这个命令将JAR文件复制到“\jre\lib\ext:”目录中: copy c:\jswdk-1.0.1\lib\servlet.jar c:\jdk1.2.2\jre\lib\ext.
创建一个JSP网站 现在该是把所有这些JSP语法派上用场的时候了。我们将创建一个网页,它有一个输入表单,可以使用户输入一个股票代号以获得出当前股价(有20分钟)。如果输入有误,则显示报错网页。
quote.jsp 首先,用 这个代码 创建一个quote.jsp网页并将其保存在JSWDK安装目录下的网页目录中。大多数的网页是标准的HTML,其间散布着JSP代码。第六行是一个网页指示,表示将把所有错误发送到“errorPage.jsp”文中。第13到15行是一个脚本片段,主要说明只有提供“符号”参数才会显示表格。 “If”代码段在32到34行结束。第17行定义了要用的JavaBean,第18行从参数加载JavaBean的符号属性。第27行到29行显示 Bean的属性。除了"if "代码段,实际上并不涉及其它Java代码。
errorPage.jsp 下一步,将下列JSP源代码保存到网页目录中的“errorPage.jsp”文件中。“这是一个错误网页”的提示为第一行,它将isErrorPage 网页提示属性设置为真。上一页说了明错误网页的位置,本页则说明这就是错误网页。其它JSP文件中的JSP专用代码只有访问隐含例外对象才用到。网页只显示其值:
<%@ page isErrorPage="true" %> <html> <head> <title>Error Page</title> </head> <body>
<h1>Our Error Page</h1></font>
<!-- Print Exception --> We got ourselves an exception: <%= exception %> <a href="quote.jsp">Restart</a> </body> </html>
Quotes.java Quotes JavaBean 利用Yahoo资源来获得股票价格。需要将此 资源保存到JSWDK安装目录下“classes\com\jguru”目录中的“quotes.java”文件中。请在此用JSDK中的Javac编辑器来编辑它。
你的第一个JSP网页。 创建了这两个JSP文件,建立了JavaBean资源文件并编辑了它后,你就可以从http://localhost:8080/quote.jsp 载“quote.jsp”文件以查看结果,假设你没有更改JSWDK安装设置,转而使用别的端口。这个网页当然能做得更漂亮,但是它已实现了需要实现的功能,并且很好地展示了JSP的功能。
|