WEB开发网      濠电姷鏁告慨鐑藉极閸涘﹦绠鹃柍褜鍓氱换娑欐媴閸愬弶鎼愮痪鍓ф嚀閳规垿鎮╃€圭姴顥濋梺姹囧€楅崑鎾诲Φ閸曨垰绠涢柛顐f礃椤庡秹姊虹粙娆惧剳闁哥姵鍔欐俊鐢稿礋椤栨艾鍞ㄩ梺闈浤涙担鎻掍壕闁圭儤顨嗛埛鎺楁煕閺囥劌浜滄い蹇e弮閺屸€崇暆鐎n剛鏆犻柧浼欑到閵嗘帒顫濋悡搴d画缂佹鍨垮缁樻媴缁涘娈┑顔斤公缁犳捇銆佸鎰佹▌濠电姭鍋撳ù锝囩《閺€浠嬫煟濡鍤嬬€规悶鍎辫灃闁绘ê寮堕崯鐐电磼閸屾氨效鐎规洘绮忛ˇ瀵哥棯閹佸仮鐎殿喖鐖煎畷鐓庘槈濡警鐎崇紓鍌欑劍椤ㄥ棗鐣濋幖浣歌摕闁绘棃顥撻弳瀣煟濡も偓閻楀棗鈻撳Δ鍛拺閻犲洠鈧櫕鐏€闂佸搫鎳愭慨鎾偩閻ゎ垬浜归柟鐑樼箖閺呮繈姊洪棃娑氬婵☆偅鐟╅、娆掔疀閺冨倻鐦堥梺姹囧灲濞佳勭閿曞倹鐓曢柕濞垮劤閸╋絾顨ラ悙鏉戝妤犵偞锕㈤、娆撴嚃閳哄骞㈤梻鍌欐祰椤鐣峰Ο鑲╃煋妞ゆ棁锟ユ禍褰掓煙閻戞ɑ灏ù婊冪秺濮婅櫣绱掑Ο铏逛桓闂佹寧娲嶉弲娑滅亱闂佸憡娲﹂崹閬嶅煕閹达附鐓欓柤娴嬫櫅娴犳粌鈹戦垾鐐藉仮闁诡喗顨呴埥澶愬箳閹惧褰囩紓鍌欑贰閸犳牠顢栭崨鎼晣闁稿繒鍘х欢鐐翠繆椤栨粎甯涙繛鍛喘濮婄粯鎷呴悷閭﹀殝缂備浇顕ч崐鍨嚕缂佹ḿ绡€闁搞儯鍔嶅▍鍥⒑缁嬫寧婀扮紒瀣崌瀹曘垽鎮介崨濠勫幗闁瑰吋鐣崹濠氬煀閺囥垺鐓ユ慨妯垮煐閻撶喖鐓崶銉ュ姢缂佸宕电槐鎺旂磼濡偐鐣虹紓浣虹帛缁诲牆鐣峰鈧俊姝岊槺缂佽鲸绻堝缁樻媴缁涘娈愰梺鎼炲妺閸楀啿鐣烽鐐茬骇闁瑰濮靛▓楣冩⒑缂佹ɑ鈷掗柍宄扮墦瀵偊宕掗悙瀵稿幈闂佹娊鏁崑鎾绘煛閸涱喚鎳呮俊鍙夊姇铻i悶娑掑墲閺傗偓闂備胶绮崝鏇炍熸繝鍥у惞闁绘柨鐨濋弨鑺ャ亜閺冨洦顥夐柛鏂诲€濋幗鍫曟倷閻戞ḿ鍘遍梺鍝勬储閸斿本鏅堕鐐寸厱婵炲棗绻掔粻濠氭煛鐏炵晫效鐎规洦鍋婂畷鐔碱敆閳ь剙鈻嶉敐鍥╃=濞达絾褰冩禍鐐節閵忥絾纭炬い鎴濇川缁粯銈i崘鈺冨幍闁诲孩绋掑玻璺ㄧ不濮椻偓閺屻劌鈽夊Ο澶癸絾銇勯妸锝呭姦闁诡喗鐟╅、鏃堝礋椤撴繄绀勯梻鍌欐祰椤曟牠宕伴弽顐ょ濠电姴鍊婚弳锕傛煙椤栫偛浜版俊鑼额嚙閳规垿鍩勯崘銊хシ濡炪値鍘鹃崗妯侯嚕鐠囨祴妲堥柕蹇曞閳哄懏鐓忓璺虹墕閸旀挳鏌涢弬娆炬Ш缂佽鲸鎸婚幏鍛矙鎼存挸浜鹃柛婵勫劤閻挾鎲搁悧鍫濈瑨闁哄绶氶弻鐔煎礈瑜忕敮娑㈡煛閸涱喗鍊愰柡灞诲姂閹倝宕掑☉姗嗕紦 ---闂傚倸鍊搁崐鎼佸磹閻戣姤鍊块柨鏃堟暜閸嬫挾绮☉妯哄箻婵炲樊浜滈悡娑㈡煕濞戝崬骞樻い鏂挎濮婅櫣鎹勯妸銉︾彚闂佺懓鍤栭幏锟�
开发学院WEB开发Jsp Apache Cocoon and XSP 阅读

Apache Cocoon and XSP

 2008-01-05 18:49:20 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹妞嬪孩顐芥慨姗嗗厳缂傛氨鎲稿鍫罕闂備礁婀遍搹搴ㄥ窗閺嶎偆涓嶆い鏍仦閻撱儵鏌i弴鐐测偓鍦偓姘炬嫹闂傚倸鍊搁崐鎼佸磹妞嬪海鐭嗗〒姘e亾妤犵偛顦甸弫鎾绘偐閹绘帞鈧參姊哄Ч鍥х仼闁诲繑鑹鹃悾鐑藉蓟閵夛妇鍘甸梺瑙勵問閸犳牠銆傛總鍛婄厱閹艰揪绱曟牎闂侀潧娲ょ€氫即鐛幒妤€绠f繝闈涘暙娴滈箖鏌i姀鈶跺湱澹曟繝姘厵闁绘劦鍓氶悘杈ㄤ繆閹绘帞澧涚紒缁樼洴瀹曞崬螖閸愬啠鍓濈换娑樼暆婵犱胶鏁栫紓浣介哺閹瑰洤鐣烽幒鎴僵闁瑰吀鐒﹂悗鎼佹⒒娴g儤鍤€闁搞倖鐗犻獮蹇涙晸閿燂拷濠电姷鏁告慨鐑藉极閸涘﹥鍙忔い鎾卞灩缁狀垶鏌涢幇闈涙灈鐎瑰憡绻冮妵鍕箻鐎靛摜鐣奸梺纭咁潐濞茬喎顫忕紒妯肩懝闁逞屽墮宀h儻顦查悡銈夋煏閸繃鍋繛宸簻鎯熼梺瀹犳〃閼冲爼宕濋敃鈧—鍐Χ閸℃鐟愰梺鐓庡暱閻栧ジ宕烘繝鍥у嵆闁靛骏绱曢崢顏堟⒑閹肩偛鍔楅柡鍛⊕缁傛帟顦寸紒杈ㄥ笚濞煎繘鍩℃担閿嬵潟闂備浇妗ㄩ悞锕傚箲閸ヮ剙鏋侀柟鍓х帛閺呮悂鏌ㄩ悤鍌涘闂傚倸鍊搁崐鎼佸磹妞嬪孩顐芥慨姗嗗厳缂傛氨鎲稿鍫罕闂備礁婀遍搹搴ㄥ窗閺嶎偆涓嶆い鏍仦閻撱儵鏌i弴鐐测偓鍦偓姘炬嫹  闂傚倸鍊搁崐鎼佸磹閻戣姤鍤勯柤鍝ユ暩娴犳氨绱撻崒娆掑厡缂侇噮鍨堕妴鍐川閺夋垹鍘洪悗骞垮劚椤︻垶宕¢幎鑺ョ厪闊洦娲栨牎闂佽瀵掗崜鐔奉潖閾忓湱纾兼俊顖氭惈椤秴顪冮妶鍡楀闁告鍥х叀濠㈣泛谩閻斿吋鐓ラ悗锝庡厴閸嬫挻绻濆顓涙嫼閻熸粎澧楃敮鎺撶娴煎瓨鐓曢柟鎯ь嚟閳藉鏌嶇紒妯荤叆妞ゎ偅绻堥幊婊呭枈濡顏归梻鍌欑閹诧紕绮欓幋锔哄亼闁哄鍨熼弸鏃堟煛閸愶絽浜剧紓浣虹帛缁嬫挻绂掗敃鍌氱<婵﹩鍓﹂悗鎶芥⒒娴e摜锛嶇紒顕呭灦楠炴垿宕堕鍌氱ウ闁诲函缍嗘禍鏍绩娴犲鐓欓梺顓ㄧ畱婢ь垱銇勯弬鍨偓瑙勭┍婵犲洦鍊锋い蹇撳閸嬫捇寮借濞兼牕鈹戦悩瀹犲闁稿被鍔庨幉姝岀疀濞戞ḿ鐤呴梺鍦檸閸犳寮查幖浣圭叆闁绘洖鍊圭€氾拷
核心提示:jc2cn 原创Apache Cocoon and XSP(bigmouse@peoplemail.com.cn)=一.介绍Apache Cocoon是一个纯java的网页内容发布框架,它答应内容(纯数据)、逻辑和表现形式分别放到不同的xml文件中,Apache Cocoon and XSP,然后用XSL来将它们组合并

jc2cn 原创

 Apache Cocoon and XSP
(bigmouse@peoplemail.com.cn)
=============================

一.介绍
 
 Apache Cocoon是一个纯java的网页内容发布框架,它答应内容(纯数据)、逻辑和表现形式分别放到不同的xml文件中,然后用XSL来将它们组合并显示出来。这种结构的好处是,表现与内容无关,例如,存放在一个XML文件中的一本书的内容,可以根据表现形式的不同要求,用XSL转换成Html格式、PDF格式甚至是WML(当然现在WAP不适合看书。。。呵)等不同的形式,而且由于XML的表现无关性,使之作为一种标准的传输交换数据格式在B2B(企业-企业)商务活动中以及分布式程序的传输交互(例如,SOAP)中有着广阔的应用。
 XSP即Extensible Server Pages的缩写,它通过在XML文件中加入Java程序来实现商务逻辑,由于XML文件中的数据是通过XSL来表现的,所以XSP做到了把内容与显示分开。想一想你熟悉的asp、php、jsp是怎么做的?它们是把逻辑代码插入到HTML页面中来工作的,也就是说内容与显示并没有分开。这很轻易造成麻烦,假如你用这些技术开发过网站就会有体会,必须先等美工人员给你做好了的HTML页面,然后你嵌入你的那些代码(假如做的够久,干脆Ctrl+C and Ctrl+V)。以后美工人员想改点什么还要先抓住你问:“老兄,我动动这块儿没事吧?!”。更糟糕的是网站要改版呢?
 在用Cocoon构建网站中,工作人员被分为三种:XML文件的编写者、XSP的编写者和XSL的编写者。XML文件的编写者主要是编写XML文件格式,DTD或者Schema,这工作相当于通常网站的内容编辑。XSP编写者就是负责往XML文件中加入Java逻辑代码,来动态控制内容,这工作相当于通常网站的ASP、PHP、JSP程序编写者。XSL编写者负责编写显示页面的XSL文件,也就是通常网站的美工人员,不过这比一般美工人员要求高,因为XSL由模板组成,就是一个个调用XML的相关元素而没有内容的空架子,这些模板也是有固定语法的,具体怎么回事以后部分能看到。

二.安装Cocoon

 虽然JBuilder6开发环境可以调试Cocoon Web程序,但也许你并不使用JBuilder6,所以下面我介绍一下在Windows2000 PRofessional中的安装配置过程(以我机器上的目录为例):

1.JDK

 我用的是JBuilder自带的JDK1.3.1,安装目录为c:\jbuilder6\jdk1.3.1\ 。假如你还没有JDK安装程序,请到http://java.sun.com去下载一份。
 直接安装。

2.Apache HTTP Server

 我用的是PHPTriad for Windows自带的Apache 1.3.12,安装目录为c:\apache\ 。假如你还没有Apache安装程序,请到http://www.apache.org去下载一份。
 直接安装,注重修改c:\apache\conf\httpd.conf文件中的port项(大约第211行),假如你有其他HTTP Server比如IIS,请修改此端口值,不要跟IIS冲突。我的port值设定为8000。

3.Tomcat

 我用的是JBuilder自带的Tomcat3.2.3,安装目录为c:\jbuilder6\jakarta-tomcat-3.2.3\ 。假如你还没有Tomcat安装程序,请到http://jakarta.apache.org去下载一份。
 下载 ApacheModuleJServ.dll (还是上面的那个网站),将文件拷贝到c:\apache\modules\ 目录中。
 修改c:\jbuilder6\jakarta-tomcat-3.2.3\conf\tomcat.conf文件,将"LoadModule jserv_module modules/ApacheModuleJServ.dll"前面的"#"去掉(大约第8行),并且将"LoadModule jserv_module libexec/mod_jserv.so"前面加上"#"(大约第13行)。
 修改c:\apache\conf\httpd.conf文件,在文件最后加上"include c:\jbuilder6\jakarta-tomcat-3.2.3\conf\tomcat.conf"
 右键单击"我的电脑"->"高级"->"环境变量",在"系统变量"中"新建"下面两个环境变量:"变量名"为"TOMCAT_HOME","变量值"为"c:\jbuilder6\jakarta-tomcat-3.2.3";"变量名"为"JAVA_HOME","变量值"为"c:\jbuilder6\jdk1.3.1"。

4.Cocoon

 我用的是JBuilder自带的Cocoon1.8,安装目录为c:\jbuilder6\cocoon\ 。假如你还没有Cocoon安装程序,请到http://xml.apache.org去下载一份。
 将c:\jbuilder6\cocoon\lib\ 目录下的所有*.jar文件拷贝到c:\jbuilder6\jakarta-tomcat-3.2.3\lib\目录下面。
 将c:\jbuilder6\cocoon\bin\ 目录下的cocoon.jar 文件拷贝到c:\jbuilder6\jakarta-tomcat-3.2.3\lib\目录下面。
注重:我用的Tomcat版本可以自动检查c:\jbuilder6\jakarta-tomcat-3.2.3\lib\目录下的*.jar文件,然后加入到$CLASSPATH中,假如你发现你的Tomcat不支持自动检查功能,你要手动向tomcat.bat中加入那些拷贝过去的*.jar文件。
 在c:\jbuilder6\jakarta-tomcat-3.2.3\webapps\下建立cocoon子目录,然后在c:\jbuilder6\jakarta-tomcat-3.2.3\webapps\cocoon\目录下建立WEB-INF子目录。
 将c:\jbuilder6\cocoon\conf\cocoon.properties文件拷贝到c:\jbuilder6\jakarta-tomcat-3.2.3\webapps\cocoon\WEB-INF\中。
 将c:\jbuilder6\cocoon\src\WEB-INF\web.xml文件拷贝到c:\jbuilder6\jakarta-tomcat-3.2.3\webapps\cocoon\WEB-INF\中。
 修改c:\jbuilder6\jakarta-tomcat-3.2.3\webapps\cocoon\WEB-INF\web.xml文件,将其中的conf/cocoon.properties改成WEB-INF/cocoon.properties
 修改c:\apache\conf\httpd.conf文件,在最后加上:
Alias /cocoon c:/jbuilder6/jakarta-tomcat-3.2.3/webapps/cocoon
 <Directory "c:/jbuilder6/jakarta-tomcat-3.2.3/webapps/cocoon">
   Options Indexes FollowSymLinks
 </Directory>
 ApJServMount /cocoon /cocoon
 <Location /cocoon/WEB-INF/ >
   AllowOverride None
   deny from all
 </Location>
 修改c:\jbuilder6\jakarta-tomcat-3.2.3\conf\server.xml文件,加上:
<Context path="/cocoon" docBase="webapps/cocoon" debug="0" reloadable="true" >
</Context>

最后重新启动Tomcat和Apache,让设置生效。
在IE中访问:http://localhost:8080/cocoon/Cocoon.xml
可以看到Cocoon的一些参数。

三.用java写XSP的逻辑标签

 先看一个XSP的例子,这是一个简单的计数器:

---------- counter.xml ----------

<?xml version="1.0" encoding="gb2312" ?>

<?cocoon-process type="xsp"?>
<?cocoon-process type="xslt"?>
<?xml-stylesheet href="counter.xsl" type="text/xsl"?>

<xsp:page language="java" xmlns:xsp="http://www.apache.org/1999/XSP/Core">
<xsp:logic>
  private static int nCounter = 0;
  private synchronized int getCounter()
  {
   return nCounter++;
  }
</xsp:logic>

<counter>
  <p>
     访问:<xsp:eXPr>getCounter()</xsp:expr>(次)
  </p>
</counter>

</xsp:page>

---------- counter.xsl ----------

<?xml version="1.0"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:template match="counter">
  <xsl:copy>
  <xsl:apply-templates/>
  </xsl:copy>
 </xsl:template>
</xsl:stylesheet>

下面分析一下上面counter.xml文件中每条语句的意思:

<?xml version="1.0" encoding="gb2312"?>
 这个就不用说了吧?XML文件都必须包含的部分,XSP是一个XML文件,当然也不能少了它。这里使用GB2312字符集,以便在代码中显示中文字符。

<?cocoon-process type="xsp"?>
 这个处理指令指示cocoon使用XSP来处理此XML文件。

<?cocoon-process type="xslt"?>
<?xml-stylesheet href="counter.xsl" type="text/xsl"?>
 这个处理指令指示cocoon使用counter.xsl文件来转换显示此XML文档,对XML文件进行XSLT不是必需的。

<xsp:page language="java" xmlns:xsp="http://www.apache.org/1999/XSP/Core">
 每个XSP文件都必须包含xsp:page,这是XSP的根元素。同时也必须指定名字空间。而language属性不是必需的,它指定处理逻辑部分使用的语言,默认值为java语言。注重:xsp:page必须包含一个XML文件的根元素,上面代码它包含的根元素是counter。

<xsp:logic></xsp:logic>
 这个标签包含的就是XSP的逻辑部分。XSP默认的引入(import)了很多常见的java类(具体是什么看后面的说明),所以你可以直接写java代码,而不必import需要的包和类了。但是假如想引入某个类,可以在xsp:strUCture中嵌套xsp:include来实现,比如:
<xsp:structure>
  <xsp:include>java.util.Vector</xsp:include>
</xsp:structure>
这就相当于import java.util.Vector

<xsp:expr>getCounter()</xsp:expr>
 这个标签是求表达式的值,然后显示出来,这是自动做类型转换的。它将此值作为输出XML文件中一个节点的text值存放的。另外,有时候需要在xsp:logic中嵌套着使用xsp:expr,以使xsp:expr输出的内容作为一个节点,这时候你不能直接把xsp:expr放到xsp:logic中,而是将xsp:expr放到xsp:context中,然后再嵌入到xsp:logic中,像下面这样:
<xsp:logic>
 <td>
 for (int i = 0; i < parameterValues.length; i++) 
 {
  <xsp:content>
   <xsp:expr>parameterValues[i]</xsp:expr>
  </xsp:content>
  <br/>
 }
 </td>
</xsp:logic>
 注重:其中"<"需要转换成<以避免XML解析错误。这通常在写程序时候很麻烦,因为你会经常用到">","<"等等需要转换的符号。你可以将要转换的内容放到<![CDATA ]]> 标签中,这样XML就会不处理其中的内容,所以上面代码可以这么写:
<xsp:logic>
 <td>
 <![CDATA[ for (int i = 0; i < parameterValues.length; i++) ]]>
 {
  <xsp:content>
   <xsp:expr>parameterValues[i]</xsp:expr>
  </xsp:content>
  <br/>
 }
 </td>
</xsp:logic>
还要注重的是,一个非空元素不能被xsp:logic截断。比如上面的代码,假如<td>写到xsp:logic外面,就是不正确的:
<!-- 这个td元素是非空的,而且被xsp:logic截断了 -->
<td>
<xsp:logic>
 <![CDATA[ for (int i = 0; i < parameterValues.length; i++) ]]>
 {
  <xsp:content>
   <xsp:expr>parameterValues[i]</xsp:expr>
  </xsp:content>
  <br/>
 }
</xsp:logic>
</td>

 这只是非常简单的应用,Cocoon附带了很多例子,建议你看看。上面是用java代码在逻辑标签中实现动态内容的,也许你并不熟悉java语言,这并不代表你不能使用XSP。因为XSP还提供了标签库功能,通过使用标签库这样你甚至不懂编程语言也能用标签库来建立XSP页面。关于标签库的使用和XSP其他一些问题下次介绍吧!

--------- 附 -------------
下面这些java类被自动引入:

java.io.*; 
java.util.*; 
org.w3c.dom.*; 
org.xml.sax.*; 
javax.servlet.*; 
javax.servlet.http.*; 
org.apache.cocoon.parser.*; 
org.apache.cocoon.producer.*; 
org.apache.cocoon.framework.*; 
org.apache.cocoon.processor.xsp.*; 


Tags:Apache Cocoon and

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接