|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
比如模式、敏捷方法什么的,这些思想好,但是实施的人没有理解而且没有正确运用这些知识导致了开发周期的延长。比如说对象,通过getName()方法不能获取对象的名字。js|web|程序JSP(JavaServerPages)手艺是对Servlet的进一步笼统,它由JCP(JavaCommunityProcess)开辟,是用于天生静态内容的开放式的、可收费猎取的标准,也是J2EE(Java2EnterpriseEdition)标准的主要构成部分。很多贸易使用服务器如BEAWebLogic、IBMWebSphere、LiveJrun和Orion都撑持JSP手艺。
从机票预订体系、银行体系到购物体系,Web上各处都在使用JSP手艺。新公布的2.0版是对JSP1.2的晋级,增添了一些风趣的新特征。JSP2的方针是使静态网页的计划加倍简单,并且无需进修Java编程言语。
本文内容包含:
供应具有丰厚示例代码的教程来使你熟习JSP2.0
先容JSP2.0的新特征
供应使用JSP2.0开辟使用程序的一些体味
给出了一些示例代码,对这些代码略加修正便可用于你本人的使用程序。
假如你还不熟习JSP,那末间接从JSP2.0动手是一个不错的主张。可是假如但愿进修JSP1.2,大概你必要从JSP教程入手下手进修。
JSP2.0
JSP2.0是对JSP1.2的晋级,增添了几个风趣的新特征,可使Web使用程序计划职员和开辟职员的事情更简单一些。JSP2.0的方针是比之前更容易于利用,更主要的是不必进修Java言语自己就能够利用它。它增添了一种称为SimpleTag的新扩大机制来简化标签API(TagAPI)。
除其他一些改善外,JSP2.0引进的最次要的新特征包含:
1.一种复杂的表达式言语(EL),可以用来简单地从JSP页面会见数据,这类表达式言语简化了基于JSP的不含剧本的使用程序的编写,不必要利用JavaScriptlet大概Java表达式;
2.用于间接利用JSP手艺来界说可重用的自界说举动的新语法,该语法利用.tag和.tagx文件,这类文件可由开辟职员大概网页作者编写;
3.3XML语法失掉了本色性的改善,增添了新的尺度文件扩大名(.tagx用于标签文件,.jspx用于JSP文件)。
本文次要会商表达式言语、简化的标签API和标签文件。信任今朝的JSP开辟职员将会发明这些主要的特征不仅风趣,并且十分有效。
为什么要从1.2超过到2.0?
在Java规格哀求(JSR152)中版本号最后定为1.3。可是正如你将在前面看到的那样,因为这些新特征对JSP使用程序的开辟模子发生了云云深入的影响,专家组感应有需要把主版本号晋级到2.0,如许才干充实反应这类影响。别的,新的版本号也有助于把开辟职员的注重力吸引到这些风趣的新特征下去。使人欣喜的是,一切正当的JSP1.2页面同时也是正当的JSP2.0页面。
JSP2.0起步
在动手进修JSP2.0之前,你必要一个撑持JSP2.0和JavaServlet2.4标准的JSP情况。侥幸的是,JakartaTomcat5.0(alpha测试版)撑持新的JSP2.0和Servlet2.4标准,能够从http://jakarta.apache.org/builds/jakarta-tomcat/release/v5.0.4-alpha/下载并安装Tomcat5.0。
JSP表达式言语
向JSP网页传送信息是经由过程JSPscoped属性和哀求参数完成的。专门为网页作者量身定做的一种表达式言语(EL)把JSPscoped属性提拔为从营业逻辑向JSP页面传送信息的尺度体例。可是要注重,只管这类表达式言语是JSP的一个主要特征,它并非一种通用的程序言语。它仅仅是一种数据会见言语,能够便利地会见和处置使用程序数据,而无需利用scriptlet大概哀求时(request-time)表达式的值。
在JSP2.0之前,网页作者只能利用表达式<%=aName%>会见体系的值,好比上面的例子:
<someTags:aTagattribute="<%=pageContext.getAttribute("aName")%>">
大概利用自界说JavaBeans组件的值:
<%=aCustomer.getAddress().getCountry()%>
表达式言语同意网页作者利用复杂的语法会见对象。好比要会见一个复杂变量,能够像上面如许写:
<someTags:aTagattribute="${aName}">
而会见嵌套的JavaBeans属性,则能够像上面如许写:
${aCustomer.address.country}
你大概会问,这不是JavaScript的语法吗?完整准确!假如你利用过JavaScript,就会感应十分轻松,由于表达式言语恰是借用了会见布局化数据的JavaScript语法。
--------------------------------------------------------------------------------
注重:表达式言语最后是作为JSP尺度标签库(JSTL)1.0的一部分而开辟的,JSTL是一种尺度标签库,它供应对通用的、布局化的义务的撑持,如迭代和前提、XML文档处置、国际化和使用SQL会见数据库等。JSTL标准是由JSR52专家组开辟的。关于JSTL的先容,请拜见FasterDevelopmentwithJSTL(利用JSTL减速开辟).
--------------------------------------------------------------------------------
会见使用程序数据
可使用点号运算符(.)会见作为对象属性的使用程序数据,也可以使用方括号运算符[‘name’]会见定名的数组元素。
表达式${data}暗示名为data的scoped变量。可使用点号(.)或方括号([])运算符从汇合中检索属性值:
点号运算符用于会见定名的属性,好比表达式${customer.name}暗示scoped变量customer的name属性;
方括号运算符可用于检索定名的属性,好比在${customer[“name”]}中。也能够经由过程${customers[0]}的情势来会见汇合customers中的第一项。
表达式言语一致了对点号和方括号运算符的处置,因而${customer.name}与${customer[“name”]}是等价的。正如你看到的那样,表达式必需利用${和}包抄起来。
EL的标识符求值体例是利用PageContext.findAttribute(String),把标识符作为一个属性来查找它的值。假如没有找到该属性,则前往null。
运算符
表达式言语撑持算术运算符、干系运算符和逻辑运算符,以完成年夜多半的数据处置操纵。别的,它还供应了一个用于测试一个对象是不是为空的特别运算符。运算符如表1所示。你可使用empty运算符判别某个汇合或字符串是不是为空。例如说,只要当请求的定名参数param没有给出时,表达式${emptyparam.name}才前往真。Empty运算符能够与“!”运算符一同利用,好比${!emptyparam.name}当请求的定名参数param存在时前往真。
表1:表达式言语运算符
运算符
申明
+
加
-
减
*
乘
/或div
除
%或mod
模(求余)
==或=
即是
!=或!=
不即是
<或lt
小于
>或gt
年夜于
<=或le
小于即是
>=或ge
年夜于即是
&&或and
逻辑与
||oror
逻辑或
!或not
逻辑非
empty
反省是不是为空值
a?b:c
前提运算符
隐含对象
除运算符外,表达式言语还界说了一些隐含对象以撑持网页作者会见必要的使用程序数据。表达式言语界说的隐含对象如表2所示,前面将给出利用这些隐含对象的一个例子。
表2:表达式言语中的隐含对象
隐含对象
内容
applicationScope
使用程序局限内的scoped变量构成的汇合
cookie
一切cookie构成的汇合
header
HTTP哀求头部,字符串
headerValues
HTTP哀求头部,字符串汇合
initParam
全体使用程序参数名构成的汇合
pageContext
以后页面的javax.servlet.jsp.PageContext对象
pageScope
页面局限内一切对象的汇合
param
一切哀求参数字符串构成的汇合
paramValues
一切作为字符串汇合的哀求参数
requestScope
一切哀求局限的对象的汇合
sessionScope
一切会话局限的对象的汇合
表达式言语的例子
如你所言,网页作者不必进修Java也可以利用这类表达式言语。示例代码1显现了一些表达式的例子和隐含对象的利用。
代码示例1:ex1.jsp
要运转这个例子,请参照以下步骤,这里我们假定Tomcat5.0安装在c: omcat5.0下。
1.切换目次到c:Tomcat5.0webappsjsp-examples
2.创立新目次,名字能够是恣意的,好比jsp2-tutorial
3.切换到jsp2-tutorial
4.把ex1.jsp复制并保留到该目次下
5.启动Tomcat5服务器:指向“入手下手”->“程序”->“ApacheTomcat5.0”,单击“ApacheTomcat5.0”来启动Tomcat
6.在扫瞄器中输出http://localhost:8080/jsp-examples/jsp2-tutorial/ex1.jsp
你将看到相似所示的画面。利用表达式言语就这么复杂!
:JSP表达式言语和隐含对象
--------------------------------------------------------------------------------
注重:在本文中,一切的JSP文件都保留在c:Tomcat5.0webappsjsp-examplesjsp2-tutorial目次下。
--------------------------------------------------------------------------------
添补表单例子
隐含对象$paran[var]可用于读取添补表单的数据。代码示例2给出了一个复杂的表单,该表单提醒用户输出一个名字。
代码示例2:form.jsp
<HTML>
<HEAD>
<TITLE>FormContent</TITLE>
</HEAD>
<BODY>
<H3>Fill-out-form</H3>
<P>
<FORMaction="form.jsp"method="GET">
Name=<inputtype="text"name="name"value="${param[name]}">
<inputtype="submit"value="SubmitName">
</FORM>
<P>
TheNameis:${param.name}
</BODY>
</HTML>
在本例中,当用户输出名字并单击“提交”按钮时,输出的名字就会显现统一页面中的“TheNameis:”字样前面,如所示。
一样,运转这个例子只必要把form.jsp复制到c:Tomcat5.0webappsjsp-examplesjsp2-tutorial下并用扫瞄器翻开它。
:表单处置
界说和利用函数
表达式言语同意你界说可在表达式中挪用的函数。函数必需作为public类中的publicstatic办法编写。函数一经界说,它的署名(signature)就映照到标签库形貌符(TLD)中。
为了申明函数的利用,我们举一个复杂的例子,把两个数相加。起首要编写求两数之和的Java办法代码,如代码示例3所示,这里界说了一个静态办法,它吸收两个字符串参数,把它们剖析成整数并前往它们的和。
代码示例3:Compute.java
packagejsp2.examples.el;
importjava.util.*;
publicclassCompute{
publicstaticintadd(Stringx,Stringy){
inta=0;
intb=0;
try{
a=Integer.parseInt(x);
b=Integer.parseInt(y);
}catch(Exceptione){}
returna+b;
}
}
用javac把这段代码编译乐成后,下一步就要把函数的署名映照到标签库。代码示例4申明了怎样把add函数映照到包括函数完成和函数署名的类。前面将申明把这段代码增加到哪儿。
代码示例4:函数形貌符
<function>
<description>addxandy</description>
<name>add</name>
<function-class>jsp2.examples.el.Compute
</function-class>
<function-signature>int
add(java.lang.String,java.lang.String)
</function-signature>
</function>
如今我们就能够编写一个JSP页面来利用这个函数。代码示例5是包括两个字段的一个表单,用户输出两个数字并按下“乞降”按钮,就会挪用下面的函数并把两个数相加,了局在统一个页面中显现出来。
代码示例5:math.jsp
<%@taglibprefix="my"
uri="http://jakarta.apache.org/tomcat/jsp2-example-taglib%>
<HEAD>
<TITLE>Functions</TITLE>
</HEAD>
<BODY>
<H3>AddNumbers</H3>
<P>
<FORMaction="math.jsp"method="GET">
X=<inputtype="text"name="x"value="${param["x"]}">
<BR>
Y=<inputtype="text"name="y"value="${param["y"]}">
<inputtype="submit"value="AddNumbers">
</FORM>
<P>
Thesumis:${my:add(param["x"],param["y"])}
</BODY>
</HTML>
要运转这个例子:
1.复制Compute.java并保留到C:Tomcat5.0webappsjsp-examplesWEB-INFclassesjsp2examplesel下;
2.利用javac编译Compute.java;
3.编纂文件C:Tomcat5.0webappsjsp-examplesWEB-INFjsp2jsp2-example-taglib.tld,把代码示例4中的代码段增加到文件中最初一个</function>标签以后,</taglib>标签之前;
4.复制math.jsp并保留到c:Tomcat5.0webappsjsp-examplesjsp2-tutorial下;
5.用扫瞄器翻开该文件。
假如统统一般,应当会看到相似如所示的窗口。
:利用函数
标签处置器
JSP1.2中传统的标签处置API因为同意标签体中包括scriptlet而变得庞大,可是如今使用表达式言语能够编写不含scriptlet的JSP网页。终极,JSP2.0引进了一种新的标签扩大机制,称为“复杂标签扩大”,这类机制有两种利用体例:
1.Java开辟职员能够界说完成接口javax.servlet.jsp.tagext.SimpleTag的类;
2.不懂Java的网页编写职员则可使用标签文件。
起首来看第一种体例,代码示例6给出了一个复杂的标签处置器,它的感化仅仅是打印“Thisismyfirsttag!”。
代码示例6:HelloTag.java
packagejsp2.examples.simpletag;
importjavax.servlet.jsp.JspException;
importjavax.servlet.jsp.tagext.SimpleTagSupport;
importjava.io.IOException;
/**
*SimpleTaghandlerthatprints"Thisismyfirsttag!"
*/
publicclassHelloTagextendsSimpleTagSupport{
publicvoiddoTag()throwsJspException,IOException{
getJspContext().getOut().write("Thisismyfirsttag!");
}
}
编译乐成后,下一步就要在TLD中界说一个标签形貌符,上面是标签形貌符的例子。
代码示例7:标签形貌符
<tag>
<description>Printsthisismyfirsttag</description>
<name>hello</name>
<tag-class>jsp2.examples.simpletag.HelloTag</tag-class>
<body-content>empty</body-content>
</tag>
最初再编写一个利用上述标签的JSP页面文件,见代码示例8。
代码示例8:helloworld.jsp
<%@taglibprefix="mytag"uri="/WEB-INF/jsp2/jsp2-example-taglib.tld"%>
<HTML>
<HEAD>
<TITLE>SimpleTagHandler</TITLE>
</HEAD>
<BODY>
<H2>SimpleTagHandler</H2>
<P>
<B>Myfirsttagprints</B>:<mytag:hello/>
</BODY>
</HTML>
要运转这个例子:
1.复制HelloTg.java并保留到C:Tomcat5.0webappsjsp-examplesWEB-INFclassesjsp2examplessimpletag下;
2.利用javac编译HelloTag.java;
3.把代码示例7中的标签形貌符增加到文件C:Tomcat5.0webappsjsp-examplesWEB-INFjsp2jsp2-example-taglib.tld中的</taglib>之前;
4.复制helloworld.jsp并保留到c:Tomcat5.0webappsjsp-examplesjsp2-tutorial目次中;
5.用扫瞄器翻开helloworld.jsp。
假如统统一般,应当会看到相似如所示的画面。
:复杂标签处置器
标签文件
利用复杂标签扩大机制的另外一种办法是经由过程标签文件。标签文件是一种资本文件,网页作者能够使用它抽取一段JSP代码,经由过程定制功效来完成代码的复用。换句话说,标签文件同意JSP网页作者利用JSP语法创立可复用的标签库。标签文件的扩大名必需是“.tag”。
为申明利用标签文件是何等简单,思索一下代码示例9。没错,这就是一个标签文件!
代码示例9:greetings.tag
Hellothere.Howareyoudoing?
一旦界说了标签文件,就能够在JSP网页的编写中利用这类定制的功效。好比代码示例10中的JSP网页。
代码示例10:chat.jsp
<%@taglibprefix="tags"tagdir="/WEB-INF/tags"%>
<HTML>
<HEAD>
<TITLE>JSP2.0Examples-HelloWorldUsingaTagFile</TITLE>
</HEAD>
<BODY>
<H2>TagFileExample</H2>
<P>
<B>Theoutputofmyfirsttagfileis</B>:<tags:greetings/>
</BODY>
</HTML>
要运转这个例子:
1.复制标签文件greetings.tags并保留在c:Tomcat5.0webappsjsp-examplesWEB-INF ags目次下;
2.复制JSP网页文件char.jsp并保留在c:Tomcat5.0webappsjsp-examplesjsp2-tutorial目次下;
3.用扫瞄器翻开chat.jsp文件。
假如统统一般,应当会看到相似如所示的窗口。
:复杂的标签文件
--------------------------------------------------------------------------------
注重:主要的是要注重到这里没无为问候标签编写TLD,而是创立了一个标签文件并放在特别的目次中,然后用taglib指令导进并间接利用它。
--------------------------------------------------------------------------------
另外一个标签文件的例子
标签文件能够作为模板利用。思索代码示例11中的标签文件display.tag,这个例子是依据Tomcat5.0中的面板的例子改写的。指令attribute相似于TLD中的<attribute>元素,同意声明自界说的举措属性。
代码示例11:display.tag
<%@attributename="color"%>
<%@attributename="bgcolor"%>
<%@attributename="title"%>
<TABLEborder="0"bgcolor="${color}">
<TR>
<TD><B>${title}</B></TD>
</TR>
<TR>
<TDbgcolor="${bgcolor}">
<jsp:doBody/>
</TD>
</TR>
</TABLE>
代码示例12给出了利用上述标签的一个复杂的JSP页面。
代码示例12:newsportal.jsp
<%@taglibprefix="tags"tagdir="/WEB-INF/tags"%>
<HTML>
<HEAD>
<TITLE>AnotherTagFileExample</TITLE>
</HEAD>
<BODY>
<H2>NewsPortal:AnotherTagFileExample</H2>
<TABLEborder="0">
<TRvalign="top">
<TD>
<tags:displaycolor="#ff0000"bgcolor="#ffc0c0"
title="Travel">
LastFrenchConcordeArrivesinNY<br/>
AnotherTravelHeadline<br/>
YetAnotherTravelHeadline<br/>
</tags:display>
</TD>
<TD>
<tags:displaycolor="#00fc00"bgcolor="#c0ffc0"
title="Technology">
Javaforin-flightentertainment<BR>
AnotherTechnologyHeadline<BR>
AnotherTechnologyHeadline<BR>
</tags:display>
</TD>
<TD>
<tags:displaycolor="#ffcc11"bgcolor="#ffffcc"
title="Sports">
AmericanFootball<BR/>
NBA<BR/>
Soccer<BR/>
</tags:display>
</TD>
</TR>
</TABLE>
</BODY>
</HTML>
要运转这个例子:
1.复制文件display.tag并保留在c:Tomcat5.0webappsjsp-examplesWEB-INF ag下;
2.复制文件newsportal.jsp并保留到c:Tomcat5.0webappsjsp-examplesjsp2-tutorial下;
3.用扫瞄器翻开newsportal文件。
了局应当会失掉与相似的画面。
:把标签文件用作模板
结论
JSP2.0使得疾速开辟和保护静态网页比之前加倍简单,只管“Java”一词呈现在JSP中,但利用JSP2.0,网页作者不必进修Java程序言语自己,就可以开辟出全新的静态网页。本文中的例子申明了利用JSP2.0的新特征开辟静态网页是何等简单。
更多信息
FastTrackJSP1.2
JavaServerPagesTechnology
JavaServerPagesSpecification(JSR152)
TheTomcat5Servlet/JSPContainer
JSPDevelopersForum
JavaServerPagesStandardTagLibrary(JSTL)
FasterDevelopmentwithJavaServerPagesStandardTagLibrary(JSTL1.0)
Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。Oracle收购Sun后Java前途未卜。 |
|