|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
主要缺点就是:速度比较慢,没有C和C++快js|servletJSP举措使用XML语法格局的标志来把持Servlet引擎的举动。使用JSP举措能够静态地拔出文件、重用JavaBean组件、把用户重定向到别的的页面、为Java插件天生HTML代码。
JSP举措包含:
jsp:include:在页面被哀求的时分引进一个文件。
jsp:useBean:寻觅大概实例化一个JavaBean。
jsp:setProperty:设置JavaBean的属性。
jsp:getProperty:输入某个JavaBean的属性。
jsp:forward:把哀求转到一个新的页面。
jsp:plugin:依据扫瞄器范例为Java插件天生OBJECT或EMBED标志。
13.1jsp:include举措
该举措把指定文件拔出正在天生的页面。其语法以下:
<jsp:includepage="relativeURL"flush="true"/>
后面已先容过include指令,它是在JSP文件被转换成Servlet的时分引进文件,而这里的jsp:include举措分歧,拔出文件的工夫是在页面被哀求的时分。jsp:include举措的文件引进工夫决意了它的效力要略微差一点,并且被援用文件不克不及包括某些JSP代码(比方不克不及设置HTTP头),但它的天真性却要好很多。
比方,上面的JSP页面把4则旧事择要拔出一个“WhatsNew?”页面。改动旧事择要时只需改动这四个文件,而主JSP页面却能够不作修正:
WhatsNew.jsp
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
<HTML>
<HEAD>
<TITLE>WhatsNew</TITLE>
</HEAD>
<BODYBGCOLOR="#FDF5E6"TEXT="#000000"LINK="#0000EE"
VLINK="#551A8B"ALINK="#FF0000">
<CENTER>
<TABLEBORDER=5BGCOLOR="#EF8429">
<TR><THCLASS="TITLE">
WhatsNewatJspNews.com</TABLE>
</CENTER>
<P>
Hereisasummaryofourfourmostrecentnewsstories:
<OL>
<LI><jsp:includepage="news/Item1.html"flush="true"/>
<LI><jsp:includepage="news/Item2.html"flush="true"/>
<LI><jsp:includepage="news/Item3.html"flush="true"/>
<LI><jsp:includepage="news/Item4.html"flush="true"/>
</OL>
</BODY>
</HTML>
13.2jsp:useBean举措
jsp:useBean举措用来装载一个将在JSP页面中利用的JavaBean。这个功效十分有效,由于它使得我们既能够发扬Java组件重用的上风,同时也制止了丧失JSP区分于Servlet的便利性。jsp:useBean举措最复杂的语法为:
<jsp:useBeanid="name"class="package.class"/>
这行代码的寄义是:“创立一个由class属性指定的类的实例,然后把它绑定到其名字由id属性给出的变量上”。不外,就象我们接上去会看到的,界说一个scope属性可让Bean联系关系到更多的页面。此时,jsp:useBean举措只要在不存在一样id和scope的Bean时才创立新的对象实例,同时,取得现有Bean的援用就变得很有需要。
取得Bean实例以后,要修正Bean的属性既能够经由过程jsp:setProperty举措举行,也能够在Scriptlet中使用id属性所定名的对象变量,经由过程挪用该对象的办法显式地修正其属性。这使我们想起,当我们说“某个Bean有一个范例为X的属性foo”时,就意味着“这个类有一个前往值范例为X的getFoo办法,另有一个setFoo办法以X范例的值为参数”。
有关jsp:setProperty举措的具体情形在前面会商。但如今必需懂得的是,我们既能够经由过程jsp:setProperty举措的value属性间接供应一个值,也能够经由过程param属性声明Bean的属性值来自指定的哀求参数,还能够列出Bean属性标明它的值应当来自哀求参数中的同名变量。
在JSP表达式或Scriptlet中读取Bean属性经由过程挪用响应的getXXX办法完成,大概更一样平常地,利用jsp:getProperty举措。
注重包括Bean的类文件应当放到服务器正式寄存Java类的目次下,而不是保存给修正后可以主动装载的类的目次。比方,关于JavaWebServer来讲,Bean和一切Bean用到的类都应当放进classes目次,大概封装进jar文件后放进lib目次,但不该该放到servlets下。
上面是一个很复杂的例子,它的功效是装载一个Bean,然后设置/读取它的message属性。
BeanTest.jsp
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
<HTML>
<HEAD>
<TITLE>ReusingJavaBeansinJSP</TITLE>
</HEAD>
<BODY>
<CENTER>
<TABLEBORDER=5>
<TR><THCLASS="TITLE">
ReusingJavaBeansinJSP</TABLE>
</CENTER>
<P>
<jsp:useBeanid="test"class="hall.SimpleBean"/>
<jsp:setPropertyname="test"
property="message"
value="HelloWWW"/>
<H1>Message:<I>
<jsp:getPropertyname="test"property="message"/>
</I></H1>
</BODY>
</HTML>
SimpleBean.java
BeanTest页面用到了一个SimpleBean。SimpleBean的代码以下:
packagehall;
publicclassSimpleBean{
privateStringmessage="Nomessagespecified";
publicStringgetMessage(){
return(message);
}
publicvoidsetMessage(Stringmessage){
this.message=message;
}
}
13.3关于jsp:useBean的进一步申明
利用Bean最复杂的办法是先用上面的代码装载Bean:
<jsp:useBeanid="name"class="package.class"/>
然后经由过程jsp:setProperty和jsp:getProperty修正和提取Bean的属性。不外有两点必需注重。第一,我们还能够用上面这类格局实例化Bean:
<jsp:useBean...>
Body
</jsp:useBean>
它的意义是,只要当第一次实例化Bean时才实行Body部分,假如是使用现有的Bean实例则不实行Body部分。正以下面将要先容的,jsp:useBean并不是老是意味着创立一个新的Bean实例。
第二,除id和class外,jsp:useBean另有其他三个属性,即:scope,type,beanName。下表扼要申明这些属性的用法。属性用法
id定名援用该Bean的变量。假如可以找到id和scope不异的Bean实例,jsp:useBean举措将利用已有的Bean实例而不是创立新的实例。
class指定Bean的完全包名。
scope指定Bean在哪一种高低文内可用,能够取上面的四个值之一:page,request,session和application。
默许值是page,暗示该Bean只在以后页面内可用(保留在以后页面的PageContext内)。
request暗示该Bean在以后的客户哀求内无效(保留在ServletRequest对象内)。
session暗示该Bean对以后HttpSession内的一切页面都无效。
最初,假如取值application,则暗示该Bean对一切具有不异ServletContext的页面都无效。
scope之以是很主要,是由于jsp:useBean只要在不存在具有不异id和scope的对象时才会实例化新的对象;假如已有id和scope都不异的对象则间接利用已有的对象,此时jsp:useBean入手下手标志和停止标志之间的任何内容都将被疏忽。
type指定援用该对象的变量的范例,它必需是Bean类的名字、超类名字、该类所完成的接口名字之一。请记着变量的名字是由id属性指定的。
beanName指定Bean的名字。假如供应了type属性和beanName属性,同意省略class属性。
13.4jsp:setProperty举措
jsp:setProperty用来设置已实例化的Bean对象的属性,有两种用法。起首,你能够在jsp:useBean元素的表面(前面)利用jsp:setProperty,以下所示:
<jsp:useBeanid="myName".../>
...
<jsp:setPropertyname="myName"
property="someProperty".../>
此时,不论jsp:useBean是找到了一个现有的Bean,仍是新创立了一个Bean实例,jsp:setProperty城市实行。第二种用法是把jsp:setProperty放进jsp:useBean元素的外部,以下所示:
<jsp:useBeanid="myName"...>
...
<jsp:setPropertyname="myName"
property="someProperty".../>
</jsp:useBean>
此时,jsp:setProperty只要在新建Bean实例时才会实行,假如是利用现有实例则不实行jsp:setProperty。
jsp:setProperty举措有上面四个属性:属性申明
namename属性是必须的。它暗示要设置属性的是哪一个Bean。
propertyproperty属性是必须的。它暗示要设置哪一个属性。有一个特别用法:假如property的值是“*”,暗示一切名字和Bean属性名字婚配的哀求参数都将被传送给响应的属性set办法。
valuevalue属性是可选的。该属性用来指定Bean属性的值。字符串数据会在方针类中经由过程尺度的valueOf办法主动转换成数字、boolean、Boolean、byte、Byte、char、Character。比方,boolean和Boolean范例的属性值(好比“true”)经由过程Boolean.valueOf转换,int和Integer范例的属性值(好比“42”)经由过程Integer.valueOf转换。
value和param不克不及同时利用,但可使用个中恣意一个。
paramparam是可选的。它指定用哪一个哀求参数作为Bean属性的值。假如以后哀求没有参数,则甚么事变也不做,体系不会把null传送给Bean属性的set办法。因而,你可让Bean本人供应默许属性值,只要当哀求参数明白指定了新值时才修正默许属性值。
比方,上面的代码片段暗示:假如存在numItems哀求参数的话,把numberOfItems属性的值设置为哀求参数numItems的值;不然甚么也不做。
<jsp:setPropertyname="orderBean"
property="numberOfItems"
param="numItems"/>
假如同时省略value和param,其效果相称于供应一个param且其值即是property的值。进一步使用这类借助哀求参数和属性名字不异举行主动赋值的头脑,你还能够在property(Bean属性的名字)中指定“*”,然后省略value和param。此时,服务器会检察一切的Bean属性和哀求参数,假如二者名字不异则主动赋值。
上面是一个使用JavaBean盘算素数的例子。假如哀求中有一个numDigits参数,则该值被传送给Bean的numDigits属性;numPrimes也相似。
JspPrimes.jsp
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
<HTML>
<HEAD>
<TITLE>在JSP中利用JavaBean</TITLE>
</HEAD>
<BODY>
<CENTER>
<TABLEBORDER=5>
<TR><THCLASS="TITLE">
在JSP中利用JavaBean</TABLE>
</CENTER>
<P>
<jsp:useBeanid="primeTable"class="hall.NumberedPrimes"/>
<jsp:setPropertyname="primeTable"property="numDigits"/>
<jsp:setPropertyname="primeTable"property="numPrimes"/>
Some<jsp:getPropertyname="primeTable"property="numDigits"/>
digitprimes:
<jsp:getPropertyname="primeTable"property="numberedList"/>
</BODY>
</HTML>
注:NumberedPrimes的代码略。
13.5jsp:getProperty举措
jsp:getProperty举措提取指定Bean属性的值,转换成字符串,然后输入。jsp:getProperty有两个必须的属性,即:name,暗示Bean的名字;property,暗示要提取哪一个属性的值。上面是一个例子,更多的例子能够在前文找到。
<jsp:useBeanid="itemBean".../>
...
<UL>
<LI>Numberofitems:
<jsp:getPropertyname="itemBean"property="numItems"/>
<LI>Costofeach:
<jsp:getPropertyname="itemBean"property="unitCost"/>
</UL>
13.6jsp:forward举措
jsp:forward举措把哀求转到别的的页面。jsp:forward标志只要一个属性page。page属性包括的是一个绝对URL。page的值既能够间接给出,也能够在哀求的时分静态盘算,以下面的例子所示:
<jsp:forwardpage="/utils/errorReporter.jsp"/>
<jsp:forwardpage="<%=someJavaExpression%>"/>
13.7jsp:plugin举措
jsp:plugin举措用来依据扫瞄器的范例,拔出经由过程Java插件运转JavaApplet所必须的OBJECT或EMBED元素。
附录:JSP正文和字符援用商定
上面是一些特别的标志或字符,你能够使用它们拔出正文或大概被视为具有特别寄义的字符。语法用处
<%--comment--%>JSP正文,也称为“埋没正文”。JSP引擎将疏忽它。标志内的一切JSP剧本元素、指令和举措都将不起感化。
<!--comment-->HTML正文,也称为“输入的正文”,间接呈现在了局HTML文档中。标志内的一切JSP剧本元素、指令和举措一般实行。
<\%在模板文本(静态HTML)中实践上但愿呈现“<%”的中央利用。
%\>在剧本元素内实践上但愿呈现“%>”的中央利用。
\利用单引号的属性内的单引号。不外,你既可使用单引号也能够利用双引号,而别的一种引号将具有一般寄义。
\"利用双引号的属性内的双引号。拜见“\”的申明。
诸如RMI,EJB等一些技术并不是你说的那么复杂,而是它们把一些复杂的工具封装成不复杂的工具了,理解这些工具是需要些时间。我问你,.net里有这些工具吗?要简单多少?。 |
|