xmlQ可扩展标记语言Q看h可能像某Uw3c标准——现在没有什么实际媄响,即以后能派上用场,也是很久以后的事。但实际上,它现在已l得C应用。所以,不要{到xml已被加进了你最喜爱的html~辑器中才开始用它。它现在可以解军_U内部问题和b2bpȝ问题?
在sparks.comQ我们用xml来标准化从java对象到html数据昄{不同系l之间的数据表示?
特别需要指出的是,我们发现Q只要以非常基本的xmll构来实现标准化Q就可以更容易地׃n和操作数据。在q一q程中,我们发现了用xml的很多有效方法。下面详l介l我们现在的应用情况?
标准?BR>在用xml之前Q徏立与你要使用的信息不同的xml数据格式?
生成动态xml
从数据库中生成htmlq不新鲜Q但生成xml却很新鲜。这里我们介l具体的生成步骤?
用xsl作ؓ模板语言
xslQ可扩展样式表语aQ是定义xml数据昄格式的好ҎQ如果写成几个静态模板会更有效?
生成html
xml加上xslq于html。这听v来似乎不对,但用h见的我们的html面其实是xml和xsl共同产生的效果?
一、标准化
xml的能力来自于它的灉|性。但不幸的是Q它有时太灵zMQ以至于你会面对一个空白的面Q发愁该怎么解决问题?
在Q何xml的项目中Q第一步工作都是创建标准的数据格式。ؓ此你要作Z下决定:
?要涉及哪些数?BR>?是否要用dtdQ文件类型定义)
?是否要用domQ文档对象模型)或saxQxml的简化apiQ解?/P>
定数据Q?BR>因ؓ没有标准的xml格式Q开发者可以自由地开发自q格式。然而,如果你的格式只能被一个应用程序识别,那么你只能运行这个程序来使用该格式。如果还有其他程序也能读懂你的xml格式Q那昄会更有帮助。如果某个xml格式被修改,则用它的系l可能也需要被修改Q所以你应该建立可能完整的格式。因为大多数pȝ忽略它们无法识别的标{,所以改变一个xml格式的最安全的方法是d标签Q而不是修Ҏ{?
单击此处查看xml数据格式实例
在sparks.comQ我们查看了不同的品展C需要的所有品数据。尽ƈ不是所有的面都用全部数据,但我们还是由此开发出适用于所有数据的非常完整的xml数据格式。例如,我们的品明l信息页面显C的数据要比产品览面多。然而,我们在这两种情况下仍然用相同的数据格式Q因为每个页面的xsl模板都只使用它所需要的字段?
是否使用dtd
在sparks.comQ我们用组l良好的xmlQ而不使用仅仅是正的xmlQ因为前者不需要dtd。dtd在用Ld看到面之间加入了一个处理层。我们发现这一层需要太多的处理。当Ӟ在以xml格式与其他公叔R信Ӟ使用dtdq是很不错的。因为dtd能在发送和接受时能保证数据l构正确?
选择解析引擎
现在Q可以用的解析引擎有好几个。选择哪一个几乎完全取决于你的应用需要。如果你军_使用dtdQ那么这个解析引擎必能使你的xml被dtd验证。你可以验证另攑ֈ一个进E中Q但那样会媄响性能?
sax和dom是两个基本的解析模型。saxZ事gQ所以在xml被解析时Q事件被发送给引擎。接下来Q事件与输出文g同步。dom解析引擎为动态xml数据和xsl样式表徏立层ơ树状结构。通过随机讉Kdom树,可以提供xml数据Q就象由xsl样式表来军_一栗sax模型上的争论主要集中于对doml构的内存降低过度和加快xsl样式表解析时间羃短方面?
然而,我们发现使用sax的很多系lƈ没有充分发挥它的能力。这些系l用它来建立doml构q过doml构来发送事件。用q种ҎQ在Mxml处理之前必须从样式表中徏立domQ所以性能会下降?
二、生成动态xml
一旦徏立了xml格式Q我们需要一U能够将其从数据库中动态移植的Ҏ?
生成xml文档相对来说比较单,因ؓ它只需要一个可以处理字W串的系l。我们徏立了一个用java servlet、enterprise javabean server、jdbc和rdbmsQ关pd数据库管理系l)的系l?
?servlet通过把生成xml文档的Q务交lenterprise javabean (ejb)来处理品信息请求?BR>?ejb使用jdbc从数据库里查询所需的品详l信息?BR>?ejb生成xml文gq把它传递给servlet?BR>?servlet调用解析引擎Q从xml文g和静态的xsl样式表中创徏html输出?
Q有关xsl应用的其他信息,请参阅用xsl作ؓ模板语言。)
生成xml的例?BR>在java中创建xml文档字符串的真正代码可以分成几个Ҏ和类?
启动xml生成q程的代码放在ejbҎ里。这一实例会立卛_Z个stringbufferQ以便存储生成的xml字符丌Ӏ?
stringbuffer xml = new stringbuffer();
xml.append(xmlutils.begindocument("/browse_find/browse.xsl", "browse", request));
xml.append(product.toxml());
xml.append(xmlutils.enddocument("browse");
out.print(xml.tostring());
后面的三个xml.append()变元本n是对其他方法的调用?
产生文g?BR>W一个附加方法调用xmlutilscL产生xml文g头。我们的java servlet中的代码如下Q?
public static string begindocument(string stylesheet, string page)
{
stringbuffer xml = new stringbuffer();
xml.append("\n")
.append(" .append(stylesheet).append("\"")
.append(" type =\"text/xsl\"?>\n");
xml.append("<").append(page).append(">\n");
return xml.tostring();
}
q段代码生成了xml文g头??xml>标签把本文g定义为支?.0版本的xml文g。第二行代码指向用以昄数据的正样式表的位|。最后包括进ȝ是项U标{(本实例中?BROWSE>Q。在文g末尾Q只?BROWSE>标签需要被关闭?
填入产品信息
完成了文件头后,控制Ҏ会调用java对象来生它的xml。本例中调用的是product对象。product对象使用两个Ҏ来生它的xml表示。第一个方法toxml()通过产生
public string toxml()
{
stringbuffer xml = new stringbuffer("
xml.append(internalxml());
xml.append("
return xml.tostring();
}
public string internalxml()
{
stringbuffer xml = new
stringbuffer("\t")
.append(producttype).append("\n");
xml.append("\t").append(idvalue.trim())
.append("\n");
xml.append("\t").append(idname.trim())
.append("\n");
xml.append("\t").append(page.trim())
.append("\n");
?
xml.append("\t").append(amount).append("\n");
xml.append("\t").append(vendor).append("\n");
xml.append("\t\n");
xml.append("\t").append(pubdesc).append("\n");
xml.append("\t").append(vendesc).append("\n";
?
return xml.tostring();
}
关闭文g
最后,xmlutils.enddocument()Ҏ被调用。这个调用关闭xml标签Q本例中为)Qƈ最l完成架构好的xml文g。来自控制方法的整个stringbuffer也{换成字符Ԍq返回给处理最初httph的servlet?
三、用xsl作ؓ模板语言
Z得到html输出Q我们把生成的xml文g和控制xml数据如何表示的xsl模板相结合。我们的xsl模板q心组l的xsl和html标签l成?
开始徏模板
我们的xsl模板开始部分与下面q段代码cM。第一行代码ؓ必需代码Q将本文件定义ؓxsl样式表。xmlns:xsl=属性引用本文g所使用的xml名称I间Q而version=属性则定义名称I间的版本号。在文g的末,我们关闭标签?
??XML:NAMESPACE PREFIX = XSL />
接下来,我们来看一看组l良好的html。由于它被xml解析引擎处理Q所以必ȝ合组l良好的xml的所有规则。从本质上来Ԍq意味着所有的开始标{ֿL对应的结束标{。例如,通常不被l束?
标签Q必ȝ
关闭?在这个例子里Qwhen标签会ؓquantity标签查xml。如果quantity标签里含有gؓ真的error属性,quantity标签会昄列在下面的表格单元。如果属性的g为真Qxsl会昄otherwise标签间的内容。在下面的实例里Q如果error属性不真,则什么都不会被显C?
J2EE可以说指Java在数据库信息pȝ上实玎ͼ数据库信息系l从早期的dBase、到Delphi/VB{C/Sl构Q发展到B/S(Browser览?Server服务?l构Q而J2EE主要是指B/Sl构的实现?/P>
J2EE又是一U框架和标准Q框架类似API、库的概念,但是要超出它们。如果需要详l了解框Ӟ可先从设计模式开始学习?/P>
J2EE是一个虚的大的概念,J2EE标准主要有三U子技术标?WEB技术、EJB技术和JMSQ谈到J2EE应该说最l要落实到这三个子概念上?/P>
q三U技术的每个技术在应用旉涉及两个部分:容器部分和应用部分,Web容器也是指Jsp/Servlet容器Q你如果要开发一个Web应用Q无论是~译或运行,都必要有Jsp/Servlet库或API支持(除了JDK/J2SE以外)?/P>
Web技术中除了Jsp/Servlet技术外Q还需要JavaBeans或Java Class实现一些功能或者包装携带数据,所以Web技术最初裸体简UCؓJsp/Servlet+JavaBeanspȝ?/P>
谈到JavaBeans技术,涉及到lg构g技?component)Q这是Java的核心基部分Q很多Y件设计概?设计模式)都是通过JavaBeans实现的?/P>
JavaBeans不属于J2EE概念范畴中,如果一个JavaBeans对象被Web技?也就是Jsp/Servlet)调用Q那么JavaBeansp行在J2EE的Web容器?如果它被EJB调用Q它p行在EJB容器中?/P>
EJB(企业JavaBeans)是普通JavaBeans的一U提升和规范Q因Z业信息系l开发中需要一个可伸羃的性能和事务、安全机Ӟq样能保证企业系l^滑发展,而不是发展到一U规模重新更换一套Y件系l?/P>
xQJavaBeanslg发展到EJB后,q不是说以前的那UJavaBeans形式消׃Q这p然Ş成了两种JavaBeans技?EJB和POJOQPOJO完全不同于EJB概念Q指的是普通JavaBeansQ而且q个JavaBeans不依附某U框Ӟ或者干脆可以说:q个JavaBeans是你个应用程序单独开发创建的?/P>
J2EE应用pȝ开发工h很多:如JBuilder、Eclipse{,q些IDE首先?A class=bluekey target=_blank>Java开发工?/A>Q也是_它们首要基本功能是可以开发出JavaBeans或Java classQ但是如果要开发出J2EEpȝQ就要落实到要么是Web技术或EJB技术,那么有可能要一些专门模块功?如eclipse需要lomboz插g)Q最重要的是Q因为J2EEpȝ区分为容器和应用两个部分Q所以,在Q何开发工具中开发J2EE都需要指定J2EE容器?/P>
J2EE容器分ؓWEB容器和EJB容器Q?A class=bluekey target=_blank>Tomcat/Resin是Web容器;JBoss是EJB容器+Web容器{,其中Web容器直接使用Tomcat实现的。所以你开发的Web应用E序可以在上面两U容器运行,而你开发的Web+EJB应用则只可以在JBoss服务器上q行Q商业品Websphere/Weblogic{和JBoss属于同一U性质?/P>
J2EE容器也称为J2EE服务器,大部分时它们概念是一致的?/P>
如果你的J2EE应用pȝ的数据库q接是通过JNDI获得Q也是说是从容器中获得Q那么你的J2EE应用pȝ基本与数据库无关Q如果你在你的J2EE应用pȝ耦合了数据库JDBC驱动的配|,那么你的J2EE应用pȝ有数据库概念色彩,作ؓ一个成熟需要推q的J2EE应用pȝQ不推荐和具体数据库耦合Q当然这其中如何保证J2EE应用pȝq行性能又是体现你的设计水^了?/P>
衡量J2EE应用pȝ设计开发水q高低的标准是:解耦?你的应用pȝ各个功能是否能够dq?是否不相互依赖,也只有这P才能体现可维护性、可拓展性的软g设计目标?
...
<Host name="localhost" debug="0" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
...
<?xml version='1.0' encoding='utf-8'?>
<Context docBase="E:/eclipse3.1RC3/workspace/devOfferProject/web" path="/devoffer" useNaming="false" workDir="work\Catalina\localhost\devoffer">
</Context>
你能q关?J2EE面试题集?附答? |
/** 一、基问答 1.下面哪些cd以被l承? java.lang.Thread (T) 2.抽象cd接口的区?/STRONG> (1)接口可以被多重implements,抽象cd能被单一extends 3.Hashtable的原?q说出HashMap与Hashtable的区?/STRONG> HashTable的原?通过节点的关键码定节点的存储位|?即给定节点的关键码k,通过一定的函数关系H(散列函数),得到函数值H(k),此D释ؓ该节点的存储地址. 4.forward和redirect的区?/STRONG> forward: an internal transfer in servlet 5.什么是Web容器? 实现J2EE规范中web协议的应?该协议定义了webE序的运行时环境,包括:q发?安全?生命周期理{等. 6.解释下面关于J2EE的名?/P> (1)JNDI:Java Naming & Directory Interface,JAVA命名目录服务.主要提供的功能是Q提供一个目录系l,让其它各地的应用E序在其上面留下自己的烦引,从而满_速查扑֒定位分布式应用程序的功能. 7.EJB是基于哪些技术实现的Qƈ?出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区? EJB包括Session Bean、Entity Bean、Message Driven BeanQ基于JNDI、RMI、JAT{技术实? SessionBean在J2EE应用E序中被用来完成一些服务器端的业务操作Q例如访问数据库、调用其他EJBlg.EntityBean被用来代表应用系l中用到的数?对于客户机,SessionBean是一U非持久性对象,它实现某些在服务器上q行的业务逻辑;EntityBean是一U持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用E序实现的实? Session Bean q可以再l分?Stateful Session Bean ?Stateless Session Bean .q两U的 Session Bean都可以将pȝ逻辑攑֜ method之中执行Q不同的?Stateful Session Bean 可以记录呼叫者的状态,因此通常来说Q一个用者会有一个相对应?Stateful Session Bean 的实?Stateless Session Bean 虽然也是逻辑lgQ但是他却不负责记录使用者状态,也就是说当用者呼?Stateless Session Bean 的时候,EJB Container q不会找ȝ定的 Stateless Session Bean 的实体来执行q个 method.换言之,很可能数个用者在执行某个 Stateless Session Bean ?methods Ӟ会是同一?Bean ?Instance 在执?从内存方面来看, Stateful Session Bean ?Stateless Session Bean 比较Q?Stateful Session Bean 会消?J2EE Server 较多的内存,然?Stateful Session Bean 的优势却在于他可以维持用者的状? 8.XML的解析方?/STRONG> Sax,DOM,JDOM 9.什么是Web Service? Web Service是Z使原来各孤立的站点之间的信息能够怺通信、共享而提出的一U接口?BR>Web Service所使用的是Internet上统一、开攄标准Q如HTTP、XML、SOAPQ简单对象访问协议)、WSDL{,所以Web Service可以在Q何支持这些标准的环境QWindows,LinuxQ中使用?/P> 注:SOAP协议QSimple Object Access Protocal,单对象访问协议),它是一个用于分散和分布式环境下|络信息交换的基于XML的通讯协议。在此协议下QY件组件或应用E序能够通过标准的HTTP协议q行通讯。它的设计目标就是简单性和扩展性,q有助于大量异构E序和^C间的互操作性,从而存在的应用程序能够被q泛的用戯问?/P> 优势Q?/P> (1).跨^台?BR> (2).SOAP协议是基于XML和HTTPq些业界的标准的Q得C所有的重要公司的支持?BR> (3).׃使用了SOAPQ数据是以ASCII文本的方式而非二进制传输,调试很方便;q且׃q样Q它的数据容易通过防火墙,不需要防火墙ZE序而单独开一个“漏z”?BR> (4).此外QWebService实现的技术难度要比CORBA和DCOM得多?BR> (5).要实现B2B集成QEDI比较完善与比较复杂;而用WebService则可以低成本的实玎ͼ公怹可以用上?BR> (6).在C/S的程序中QWebService可以实现|页无整体刷新的与服务器打交道ƈ取数?/P> ~点Q?/P> (1).WebService使用了XMLҎ据封装,会造成大量的数据要在网l中传输?BR> (2).WebService规范没有规定M与实现相关的l节Q包括对象模型、编E语aQ这一点,它不如CORBA?/P> 10.多线E有几种实现Ҏ,都是什?同步有几U实现方?都是什? {:多线E有两种实现ҎQ分别是l承ThreadcM实现Runnable接口 11.JSP中动态INCLUDE与静态INCLUDE的区别? 动态INCLUDE用jsp:include动作实现 <jsp:include page="included.jsp" flush="true"/> 它L会检查所含文件中的变化,适合用于包含动态页面,q且可以带参?/P> 静态INCLUDE用include伪码实现,定不会检查所含文件的变化Q适用于包含静态页?/P> <%@ include file="included.htm" %>
|