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