2021SC@SDUSC
我们三人在第一次会议时,一致认为core文件夹下的内容肯定属于核心代码,所以就对core文件夹进行了简单的划分。
这次博客我主要分析acting文件夹和component文件夹下的source文件夹。
一共包含了5个Java文件,对每个Java文件从作用到属性,再到方法一一进行了分析。
分析core文件夹(一)
- CopySourceAction.java
-
- LocaleAction.java
-
- CocoonSourceResolver.java
-
- SourceFactoryNotFoundException.java
- SourceUtil.java
-
CopySourceAction.java
1.总结
这个文件用于将它的“src”属性的内容复制到它的“dest”参数中,也就是目标源码,目的地必须解析为一个WriteableSource对象
继承自ServiceableAction,ServiceableAction继承自AbstractAction
实现了ThreadSafe接口
2.属性:
继承自类ServiceableAction的manager(服务管理器的一个实例)
继承自类AbstractAction的EMPTY_MAP(一个空的无法改变的Map对象)
继承自接口Action的ROLE
3.方法:
- public void service(ServiceManager manager)
- 使用当前ServiceManager实例,并寻找源解析器
- public Map act(Redirector redirector, org.apache.cocoon.environment.SourceResolver oldResolver, Map objectModel, String source, Parameters par)
- 先获取source和目标source,检查目标source是否可写,然后翻译所有内容,将“src”属性的内容复制到它的“dest”参数中。
4.其他说明:
从AbstractLogEnabled继承的方法:getLogger, setLogger
AbstractLogEnabled是util文件下的一个抽象类
setLogger创建日志,getLogger得到日志
LocaleAction.java
1.总结
这个文件是一种操作,用于定位并向管道提供通过各种方式查找到的语言环境信息。
继承自ServiceableAction
实现了ThreadSafe,Configurable接口
2.主要属性:
//默认区域设置属性名
public static final String LOCALE = "locale";
//区域设置属性名的配置元素名
public static final String LOCALE_ATTR = "locale-attribute";
//表示请求存储配置属性的常量
public static final String STORE_REQUEST = "store-in-request";
//表示会话创建配置属性的常量
public static final String CREATE_SESSION = "create-session";
//表示会话存储配置属性的常量
public static final String STORE_SESSION = "store-in-session";
//表示cookie存储配置属性的常量
public static final String STORE_cookie = "store-in-cookie";
3.方法:
- public void configure(Configuration config)
- 进行一些基本的配置,包括request,session,cookie等,调用日志,判断是否配置成功;然后配置了一些语言,国家等信息。
- public Map act(Redirector redirector, SourceResolver resolver, Map objectModel, String source, Parameters params)
- 该操作获取当前环境的语言环境信息,并将其放在objectModel中(也可以放在session/cookie中)。
- 从请求、会话、cookie或参数获取区域设置信息,为站点地图参数设置一个地图。
- public static String getLocaleAttribute(Map objectModel,String localeAttrName)
CocoonSourceResolver.java
1.总结:
这是Cocoon的SourceResolver(源解析器)的默认实现。该实现基于来自Excalibur项目的原始源解析器实现。
继承自AbstractLogEnabled
实现了SourceResolver, Contextualizable, Serviceable, Disposable,ThreadSafe接口
2.属性:
自定义属性:
//一个(可选的)自定义源解析器
protected org.apache.excalibur.source.SourceResolver customResolver;
//服务管理器
protected ServiceManager manager;
//一个默认地址
protected URL baseURL;
3.方法:
- protected String absolutize(SourceFactory factory, String baseURI, String systemID)
- public void contextualize(Context context)
- 无返回值,从上下文检索对象,给baseURL赋值,如果对象是URL就直接赋值,如果不是,先转为文件类型,再转为URL赋值。
- 如果抛出ContextException异常,则将当前路径赋值给baseURL,然后打印;否则抛出MalformedURLException异常,说明URL有误。
- public void dispose()
- 在组件生命周期结束时调用dispose操作。组件使用此方法来释放和销毁组件拥有的任何资源。
- protected ServiceManager getComponentLocator()
- 获取组件定位器,返回值为ServiceManager
- protected SourceFactory getSourceFactory(ServiceManager m, String scheme)
- 返回值SourceFactory,在服务管理器中进行寻找
- public void release(Source source)
- 释放已解析资源,传入参数source是要解析的资源
- public Source resolveURI(String location, String baseURI, Map parameters)
- location——要解析的URI。如果这是相对的,那么它要么是相对于基本参数(如果不是空的)进行解析,要么是相对于源解析器本身的基本设置进行解析。
- baseURI——用于解析相对位置的基本URI。这是可选的,可以为空。
- parameters——URI的附加参数。参数是特定于所使用的方案的。
- 如果有源解析器,就返回解析源对象。如果没有,就生成一个。
- (重载)public Source resolveURI(String location)
- 只有参数String location,调用上面那个同名函数,baseURI和parameters为空
- public void service(ServiceManager manager)
- 一个用于服务的函数,使用“/Cocoon”提示获取对SourceResolver的引用
4.其他说明:
-
在该文件中导入的一些其他Apache项目的文件
Avalon:一套面向组件的编程工程
Excalibur:主要产品是一个由java写成的,名字叫做Fortress的轻量级的可嵌入式反向控制容器。
SourceFactoryNotFoundException.java
一个用于处理SourceFactory对象没有找到的类
继承自CascadingRuntimeException
重载构造函数,一个参数为String message,另一个参数为String message, Throwable cause
SourceUtil.java
1.总结:
这个类包含源解析的一些实用程序方法。
继承自org.apache.cocoon.components.source.util.SourceUtil
2.方法:
- static private ServiceManager getSitemapServiceManager()
- 获取当前站点地图组件管理器。此方法返回当前站点地图组件管理器。这是保存当前处理(子)站点地图的所有组件的管理器。
- static public void toSAX(Source source, ContentHandler handler)
- static public void toSAX(Source source,String mimeTypeHint,ContentHandler handler)
- 使用XMLizer从给定的源生成SAX事件。当前的站点地图管理器将用于查找xml化器。
- static public void toSAX(Source source, ContentHandler handler,Parameters typeParameters,boolean filterdocumentEvent)
- static public document toDOM(Source source)
- 从给定源生成DOM文件。
- 声明一个DOMBuilder对象,生成一个SAX文件,然后根据DOMBuilder对象生成DOM文件,文件为空则抛出异常。
3.其他说明:
org.apache.cocoon.components.source.util.SourceUtil
这个类包含源解析的一些实用程序方法。
主要是重写了这个类的toSAX()方法和toDOM()方法