wiki应用 2:jspwiki

 
JSPWiki是一个基于JSP来实现的wiki系统,是一个相对比较简单的wiki系统,特别是你对JSP熟悉的时候。
 
运行环境
wiki的运行环境一般来说包含如下三部分:
web server <--> wiki engine <--> versioned storage
 
web server获得用户访问wiki页面的请求,该请求被传送到wiki engine。因为wikipage都是有版本的,所以wiki engine需要从支持版本控制的versioned storage取得相应版本(缺省是最新版本)的页面。然后wiki engine将页面从wiki格式转换为html返回给web server,再返回给用户。
 
因此一个wiki系统是否简单就看着三部分如何实现,web server的选择取决于wiki engine的实现,例如php实现的可以采用apache httpd,而jspwiki就采用支持jsp的tomcat。关于存储常见的情况是采用数据库自行实现版本控制,或者直接采用版本控制系统如cvs。JSPWiki之所以显得比较简单是因为它的versioned storage是直接基于文件系统自行实现,无需另外安装数据库或版本控制系统。我后面还会提到的一个wiki系统 fitnesse更加简单,它将三部分都集成在一起,直接部署就能够运行了。
 
Template
访问JSPWiki的首页,你会发现页面分为左右两部分,左边是一个菜单,右边为主页面。点击最下端的“Edit this page”,你就会发现只能编辑主页面,左边菜单是不能编辑的。所有wiki系统的情况都是类似的,能够编辑的只是整个页面的一部分,另外的诸如header, footer, menu不能通过wiki的方式来编辑。如果我们想更改左边菜单应该怎么做呢?更进一步我们还想更改包括整个页面的布局、颜色等等,又应该怎么做?先让我们来看看JSPWiki中一个页面是如何展现出来的。
 
访问一个jspwiki页面URL格式如下: http://www.jspwiki.org/Wiki.jsp?page=WikiPageName,因此可以从Wiki.jsp开始跟踪
./src/webdocs/wiki.jsp
    String pagereq = wiki.safeGetParameter( request, "page" );
    String skin    = wiki.safeGetParameter( request, "skin" );
      <wiki:Include page="templates/"+skin+"/ ViewTemplate.jsp" />
如果URL中没有设置skin,skin的缺省值为"default"。
 
./src/webdocs/templates/default/ViewTemplate.jsp
      <%@ include file=" LeftMenu.jsp" %>
 
      <wiki:CheckRequestContext context="view">
         <wiki:Include page=" PageContent.jsp" />
      </wiki:CheckRequestContext>
 
./src/webdocs/templates/default/PageContent.jsp
      <wiki: InsertPage/>
 
class com.ecyrd.jspwiki.tags.InsertPageTag
            switch(m_mode)
            {
              case HTML:
                out.print( engine.getHTML(m_wikiContext, page) );
                break;
 
通过上面的跟踪,可以知道wiki的内容是通过“<wiki:InsertPage />”产生的,其他部分则是由“./src/webdocs/templates/default”下面的JSP来控制,特别是一组XxxxTemplate.jsp文件。
 
这是网站系统的一种常用方法,提供一种机制来管理网站的布局、外观。JSPWiki中称这个机制为"Template",每一个Template实现称之为"skin",其他一些系统可能有其他名称如"Theme",比如blogbus.com就叫做“风格管理”。关于类似的机制我专门针对Portal的展现写过一篇blog“ Portal展现机制研究”。
 
因此,你可以自己增加新的Template实现并放置在"templates/skinname/"下,通过“http://myhost/Wiki.jsp?page=WikiPageName&skin=skinname”来访问,更换不同的skinname就可以得到不同的外观效果。通过对 LeftMenu.jsp的分析,你会发现其实左边菜单也是一个wikipage,可以通过 http://www.jspwiki.org/Wiki.jsp?page=LeftNMenu来查看和编辑它。
 
以上是对JSPWiki的运行环境和Template机制的一些分析,这些机制每个wiki都会有,了解这些部分能够知道一个wiki系统的主要采用了什么技术。接下我们来看看JSPWiki可以做什么功能增强?
 
Plugins
wiki的语法是简单的,一般来说只包含“连接”、“段落”、“字体效果”以及“表格”几部分内容,连颜色控制都没有。简单是wiki受欢迎的原因,但是(总会有但是),我们喜欢的是简单而 强大。如果wiki只能是干巴巴的文本那多无趣啊,怎样才能够增加一些动态的内容呢?比如在页面中写下“今天是星期X”,用户访问的时候能够自动根据当前时间来显示。
 
JSPWiki提供了"Plugins"机制来扩充wiki的功能,plugins的语法为:
[{INSERT <plugin class> WHERE <param1=value1>,<param2=value2>,...}]
 
这里的plugin class必须是继承于WikiPlugin接口,该接口十分简单:
interface WikiPlugin
package com.ecyrd.jspwiki.plugin;
public interface WikiPlugin
{
    public String execute( WikiContext context, Map params )
        throws PluginException;
}
 
很显然,plugin的机制就是通过Map获得用户设置的参数,然后返回相应的HTML代码。通过plugin机制,开发人员可以开发各种plugin来增强JSPWiki的功能,在 http://www.jspwiki.org/Wiki.jsp?page=JSPWikiPlugins上面列出了一系列已经开发好的plugins可供使用。
 
Filters
JSPWiki还提供了所谓的"Filters"机制,这个功能目前还处于alpha版本,不过从网页上的介绍可以知道它的功能主要用于wiki文本的替换。例如将文本":)"替换为一个笑脸图片的连接,就等于给JSPWiki增加了“表情”的功能。
 
小结
从上述的分析可以知道,JSPWiki的确是个比较简单的wiki系统,它着重于快速建立一个wiki网站,在功能扩充方面提供了了简单的Plugin机制。目前国内有一个网站( http://blogsite.3322.org:8080/jspwiki/Wiki.jsp?page=WikiPortal)在JSPWiki的基础上开发一个新系统。
 
JSPWiki成功地提供了一个简单易用的wiki系统,但如果要利用它来开发应用,则是远远不够的。如果要建立应用,最基本的一点就是要给wikipage增加属性,在属性的基础上进行管理。比如存在一系列描述各个城市的页面,希望找到城市人口最多的页面,在目前是很难做到的,因为人口数字也只是普通的文本。只有城市相关的wikipage存在“人口”属性,才能方便的做到这一点。从JSPWiki网站上的讨论来看,这方面的事情已经在考虑中,“ Ideas - Metadata”、“ Ideas - SubPages”讨论了相关的事宜。但显然要实现这个需求对JSPWiki的结构更改较大,在3.0版本后才会考虑这个事情。
 
虽然JSPWiki不适合用来开发应用,但它结构清晰,设计良好,是个不错的分析对象。通过分析JSPWiki可以知道一个wiki系统的基本要素,接下对其他wiki系统的分析,则主要着重于能否建立应用、如何做的部分。
 
下一个分析对象是 fitnesse.org

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值