2021SC@SDUSC山东大学软件学院软件工程应用与实践 COCOON 第四篇

2021SC@SDUSC

sitemap:

该类共有四个类,分别为LinkGaherer,LinkTranslator,NotifyingGenerator,SitemapServlet,其中NotifyingGenerator已弃用,将不再分析。

LinkGatherer:

链接聚集器,该类直接继承了ExtendedXLinkPipe,并实现了Transformer和CacheableProcessingComponent接口。

该类提供了getKey方法生成唯一密钥,返回1,getValidity方法生成有效性对象,返回了空值.

通过setup方法设置SourceResolver,Map,source和sitemap来处理请求对象。

addLink方法可以给Link列表添加一个href,同时会对该网址进行判断,将不符合要求的返回。

simpleLink方法可将进行简单链接,startLocator开启定位器,两个方法都继承自XLinkPipe,都是为链表添加一个

  public void startLocator( String href, String role, String title, String label, String uri, String name, String raw, Attributes attr ) throws SAXException
    {
        AttributesImpl newattr = new AttributesImpl( attr );
        int hrefIndex = attr.getIndex( XLINK_NAMESPACE_URI, XLINK_HREF );
        int roleIndex = attr.getIndex( XLINK_NAMESPACE_URI, XLINK_ROLE );
        int titleIndex = attr.getIndex( XLINK_NAMESPACE_URI, XLINK_TITLE );
        int labelIndex = attr.getIndex( XLINK_NAMESPACE_URI, XLINK_LABEL );
        if ( hrefIndex > -1 )
            newattr.setValue( hrefIndex, href );
        if ( roleIndex > -1 )
            newattr.setValue( roleIndex, role );
        if ( titleIndex > -1 )
            newattr.setValue( titleIndex, title );
        if ( labelIndex > -1 )
            newattr.setValue( labelIndex, label );
        super.startElement( uri, name, raw, newattr );
    }

startLocator通过获取设置属性,并调用startElement方法。

 public void simpleLink( String href, String role, String arcrole, String title, String show, String actuate, String uri, String name, String raw, Attributes attr ) throws SAXException
    {
        AttributesImpl newattr = new AttributesImpl( attr );
        int hrefIndex = attr.getIndex( XLINK_NAMESPACE_URI, XLINK_HREF );
        int roleIndex = attr.getIndex( XLINK_NAMESPACE_URI, XLINK_ROLE );
        int arcroleIndex = attr.getIndex( XLINK_NAMESPACE_URI, XLINK_ARCROLE );
        int titleIndex = attr.getIndex( XLINK_NAMESPACE_URI, XLINK_TITLE );
        int showIndex = attr.getIndex( XLINK_NAMESPACE_URI, XLINK_SHOW );
        int actuateIndex = attr.getIndex( XLINK_NAMESPACE_URI, XLINK_ACTUATE );
        if ( hrefIndex > -1 )
            newattr.setValue( hrefIndex, href );
        if ( roleIndex > -1 )
            newattr.setValue( roleIndex, role );
        if ( arcroleIndex > -1 )
            newattr.setValue( arcroleIndex, arcrole );
        if ( titleIndex > -1 )
            newattr.setValue( titleIndex, title );
        if ( showIndex > -1 )
            newattr.setValue( showIndex, show );
        if ( actuateIndex > -1 )
            newattr.setValue( actuateIndex, actuate );
        super.startElement( uri, name, raw, newattr );
    }

simpleLink通过获取设置属性,并调用startElement方法。

LinkTranslator:

链接转换器,该类直接继承了ExtendedXLinkPipe,并实现了Transformer和CacheableProcessingComponent接口。方法与LinkGatherer中类,但是每个方法都是从链表中寻找是否存在,若存在则使用链表中的,若不存在则使用参数中提供的。

SitemapServlet:

在该文件中,提供了初始化创建一个已配置的TreeProcessor,启动服务使用Cocoon树处理器处理传入请求,销毁方法,同时定义了一个保护类来完成这些操作,并作为该类的一个成员变量。

保护类RequestProcessor中,继承了RequestProcessor,在该类中可以获取进程和url。

createTreeProcessorConfiguration方法获取站点地图位置的uri,并在当前servlet上下文中解析它,Treeprocessor接收已解决的问题是非常重要的,仅提供相对于当前上下文的uri是不够的,而且不起作用,最后返回一个configuration


版权声明:本文为qq_54049011原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。