|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
C#是盗用了Java的源代码,仿照开发的,原因是Java是开源的啊,盗了也白盗,还有一点,开发C#语言的团队是就是开发Java语言的团队,是微软重金挖过去的啊jsJSP最好理论:组合JavaBean组件和JSP手艺
利用JavaBean和JSP参数在Web页面之间传送数据
级别:进门
BrettMcLaughlin(brett@oreilly.com)
作家,OReillyandAssociates
2003年7月
Web架构计划师BrettMcLaughlin演示了JavaBean组件和JSP手艺的分离怎样使您可以在Web页面之间存储并传送数据,和如许做怎样能完成更加静态的站点计划。
到今朝为止,我们在JSP最好理论系列文章中侧重会商的都是较为基础的主题。在前两篇文章中,您进修了怎样利用JSPinclude机制来将内部内容引进到您的网站或Web使用程序。我们利用了两种分歧的include伪指令:静态include命令和静态jsp:include标志。
迄今为止,还无需创立父页面(在我们的示例中是一个网站主页面)和所包括内容之间的任何范例的通讯。可是这类计划过于复杂。当要对实践Web站点或Web使用程序接口举行编程时,您一般必要一种通讯机制在父页面和所包括文件之间传送数据。比方,您的网站大概有一个题目或动静是源自立页面的,并必要将它供应给页面头或页面尾。在这篇文章中,您将进修怎样在页面之间传送数据,和怎样在所包括的页面中利用该数据。
注:本系列文章中的一切最好理论都基于JavaServerPages手艺。要运转个中任何一个理论示例,必要在当地呆板或测试服务器上安装切合JSP手艺的Web容器。您还必要利用文本编纂器或IDE来对JSP页面举行编码。
用于存储数据的JavaBean组件
让我们研讨一下如许一个网站:个中的每一个页面都有冗长的“口号”(好比“Books:Ashelffulloflearning”或“CDs:Musicworthlisteningto”)和题目。父页面(偶然叫做主页面)断定了每一个页面的口号,而页面头(包括的页面)要处置HTML以输入该口号。为使该计划事情,主页面必需可以将口号传送到页面头,并且页面头必需可以承受页题目并按哀求显现它。
起首我们必要某种用于存储被传送数据的对象。可巧的是(并不是偶尔)JavaBean组件既合适该目标又与JSP手艺十分婚配。bean只必要用取值办法(accessor)和赋值办法(mutator)来处置数据。您大概从别的Java编程履历中得知,get()是个取值办法,由于它会见数据,而set()是个赋值办法,由于它修正数据。
清单1显现了我们所需的那种bean的代码。PageHeaderInfobean包括了有关网站页面头的信息。
清单1.PageHeaderInfoJavaBean
<![CDATA[
packagecom.newInstance.site.beans;
importjava.io.Serializable;
publicclassPageHeaderInfoimplementsSerializable{
/**Thetitleofthepage*/
privateStringpageTitle;
/**Thesloganofthepage*/
privateStringpageSlogan;
publicStringgetPageTitle(){
returnpageTitle;
}
publicvoidsetPageTitle(StringpageTitle){
this.pageTitle=pageTitle;
}
publicStringgetPageSlogan(){
returnpageSlogan;
}
publicvoidsetPageSlogan(StringpageSlogan){
this.pageSlogan=pageSlogan;
}
}
]]>
关于第一个实习,请将该文件保留为PageHeaderInfo.java,然后对它举行编译。接上去,将失掉的类文件PageHeaderInfo.class放进Web使用程序的WEB-INF/classes目次。请确保包含了包条理布局,可是可随便变动包名。这个已编译类的示例路径以下:
$<TOMCAT-ROOT>/webapps/$<WEB-APP-NAME>/WEB-INF/classes/com/newInstance/
site/beans/PageHeaderInfo.class
可使用相似于此的路径使该类可被Web使用程序中的servlet、JSP页面和别的类利用。假如到今朝为止您依照形貌的那样实行了一切步骤,那末如今能够将数据添补到PageHeaderInfobean中,然后在各个JSP页面中检索它。
传送已存储的数据
在我们的网站计划中,页面头包括了将各个口号传送给分歧页面的代码。您大概记得前一篇文章中提过,页面头(header.jsp)是个包括的文件,由jsp:include元素办理。由于我们利用的是静态jsp:include标志而非静态include伪指令,因而很简单将数据传送到页面头。jsp:param元素供应了这项功效,能够将该元素嵌套在jsp:include元素中。清单2演示了怎样利用这些元素将数据传送给站点主页面的header.jsp文件。
清单2.在JSP页面之间传送数据
<![CDATA[
<%@pagelanguage="java"contentType="text/html"%>
<html>
<head>
<title>newInstance.com</title>
<metahttp-equiv="Content-Type"
content="text/html;charset=iso-8859-1"/>
<linkhref="/styles/default.CSS"rel="stylesheet"type="text/css"/>
</head>
<body>
<jsp:includepage="header.jsp"flush="true">
<jsp:paramname="pageTitle"value="newInstance.com"/>
<jsp:paramname="pageSlogan"
value="JavaandXML::Turningtheoryintopractice"/>
</jsp:include>
<%@includefile="/navigation.jsp"%>
<jsp:includepage="bookshelf.jsp"flush="true"/>
<jsp:includepage="/mt-blogs/index.jsp"flush="true"/>
<%@includefile="/footer.jsp"%>
</body>
</html>
]]>
您能够看到,题目是作为口号传进的。
您也许已注重到:设置用于传送数据的页面时实践上不用利用JavaBean组件,由于bean只用于吸收数据。可是我老是先对bean举行编码,这是有事理的。JSP参数名必需与JavaBean特征名相婚配,先对bean举行编码确保了您在对JSP页面举行编码时能准确设置这些参数名。
吸收数据
对JSP参数和JavaBean特征举行编码而且将数据传送给header.jsp页面以后,该页面能够入手下手吸收数据了。清单3显现了header.jsp页面。个中年夜部分代码是HTML,可是请务必注重JSP语句,在您研讨了代码以后我将对此举行申明。
清单3.将数据传送给别的JSP页面
<![CDATA[
<!--Beginheadersection-->
<%@pagelanguage="java"contentType="text/html"%>
<jsp:useBeanid="pageHeaderInfo"
class="com.newInstance.site.beans.PageHeaderInfo">
<jsp:setPropertyname="pageHeaderInfo"property="*"/>
</jsp:useBean>
<tablewidth="100%"border="0"cellspacing="0"cellpadding="0">
<tr>
<tdwidth="91"height="50"align="right"valign="top"
bgcolor="#330066"><fontcolor="#FFFFFF"></font></td>
<tdcolspan="3"align="left"valign="top"
bgcolor="#000000"><tablewidth="100%"height="60"border="0"
cellpadding="0"cellspacing="0">
<tr>
<tdwidth="261"rowspan="2"></td>
<tdclass="pagetitle"width="249"height="55"align="right"
valign="bottom"><jsp:getPropertyname="pageHeaderInfo"
property="pageSlogan"/></td>
<tdwidth="10"height="55"></td>
</tr>
<tr>
<tdheight="5"></td>
</tr>
</table></td>
<tdwidth="141"bgcolor="#000000">
<fontcolor="#FFFFFF"></font>
</td>
</tr>
<!--Endheadersection-->
]]>
第一段代码将该页面标识为JSP页面,然后声明该页面必要会见PageHeaderInfobean,这是经由过程利用jsp:useBean标志完成的。id为JSP页面可使用的bean设置了一一般名,class是bean的全限制Java类名。jsp:useBean标志中嵌套的是jsp:setProperty标志,它指定了该bean(由其别号标识)应该利用任何哀求数据设置一切可用的特征。这意味着关于bean中的每一个特征(比方pageTitle和pageSlogan),都要有一个婚配的哀求参数。这些哀求参数能够来自利用Web扫瞄器的客户机,也能够来自包括此JSP页面的别的页面。在本例中,唯一的哀求数据就是由父页面创立的。关于我们的示例站点而言,主页面(index.jsp)发送pageTitle和pageSlogan,它们分离被设置成“newInstance.com”和“JavaandXML:Turningtheoryintopractice”。
添补了bean的特征值以后,该页就能够利用此数据了。关于header.jsp,这个用法是经由过程利用jsp:getProperty标志在该页面的下方完成的。jsp:getProperty带有一个name参数(标识从哪一个对象猎取数据)和一个property参数(指定应该轮询该对象的哪一个特征)。然后将该特征的值拔出到页面的输入,接上去将该输入拔出到父页面,了局发生了一个无缝的静态页面口号。就这么复杂,您能够在JSP页面之间传送数据了!您能够将恣意多的bean增加到JSP页面中,每一个bean都能够有没有限多的特征,连最庞大的哀求数据都能满意。
办理变动
每一个开辟职员最烦的就是举行变动。恰好当您依照但愿的体例对bean举行编码,准确地设置了一切特征,而且JSP页面筹办利用它们时,您的使用程序或站点需求却产生变更,就仿佛不成制止地要举行变动。假如这些变动请求增加新特征(它们一般会云云),那末您必需编纂JavaBean源代码,从头编译它,并确保JSP能够会见这个新的bean类。可是在某些情形下,您也许甚么都不必做。假如您的页面正在存储和吸收不再利用的特征(也就是说,您不再指向给定的页面组件,即便它仍旧存在于站点目次中),您也许可让代码保存原样。现实上,我就碰着了这类情形!
我团体Web页面的header.jsp页面之前经常输入HTML站点的页面头。之前,该页面引进题目以便在页面的head的title元素中利用它。可是厥后我对此做了变动,不再利用页面头JSP页面中的页题目。可是我不用操心地将pageTitle特征从PageHeaderInfobean中撤除;现实上,我乃至没有从年夜多半将该题目发送给头页面的JSP页面中撤除jsp:param元素。我以为不值得花工夫往做,并且我晓得让这些数据留在那也没甚么害处(再说我未来有一天大概还会必要它!)。因而,假如发明您的情形一样,请别严重-将工夫花在增加很酷的新功效比花在玩弄这类杂事上要风趣的多。
下一次
一旦您熟习了在JSP页面之间传送数据,就请亲身实验编写一些有效的JavaBean代码,并看看是不是能够在本人的站点上使它们运转。经由过程玩弄这些bean和jsp:useBean、jsp:param和jsp:get/setProperty机关,您应该能弄出一些很酷的工具!鄙人一篇“最好理论”文章中,我将申明利用JSP为您的主站点引进内部内容的另外一种办法。JSTL标志仿照了友爱的include标志,而且为JSP增加了更多的天真性和功效。在那之前请好好读一下这些文章,到时分我们网上见。
从一个编程语言的普及程度来将,一个好的IDE是至关中要的,而现在的java的IDE虽然已经很好了,但是和.net比起来还是稍微差一些的,这是个客观事实。java要想普及的更好。DE是必须加以改进的。 |
|