盾怪网教程:是一个免费提供流行杀毒软件教程、在线学习分享的学习平台!

使用Java技术在Cocoon中完成商业逻辑

时间:2024/12/28作者:未知来源:盾怪网教程人气:

[摘要]resourceUrl == null) getLogger().error("Missing input parameters"); return null; Map ma...
resourceUrl == null) {
getLogger().error("Missing input parameters");
return null;
}

Map map = new HashMap();

DataSourceComponent dataSource = getDataSource(poolName);
Connection conn = null;
boolean status = false;

try {
conn = dataSource.getConnection();
Statement stmt = conn.createStatement();
String cmd = "insert into Resources values (´" +
resourceName + "´, ´" +
resourceUrl + "´)";
stmt.executeUpdate(cmd);

map.put("resource-name", resourceName);
map.put("resource-url", resourceUrl);

getLogger().debug("Resources insert completed by user " +
ses.getId());

status = true;
stmt.close();
} catch (Exception e) {
getLogger().error("Stmt failed: ", e);
} finally {
try {
if (conn != null) conn.close();
} catch (SQLException sqe) {
getLogger().warn("Error closing the datasource", sqe);
}
}

if (!status) return null;
return(map);
}

public void dispose() {
this.manager.release(dbselector);
}
}

这儿有大量的东西需要消化,特别是如果你不熟悉Cocoon的结构。我们一步步的来说明。

首先,Cocoon action的主方法是 act(),当在管道中使用Action时Cocoon将调用这个方法。
在这个示例中,act()得到Request参数、从连接池中得到数据库连接,执行插入,然后填充
HashMap对象,并将其返回。

在Act方法的开始是从ObjectModelHelper组件中取得Request对象,然后得到两个参数。这个
Action需要另外一个参数,pool;它将告诉我们使用哪个连接池。如果这个参数没有,那么
Action将返回null而且将错误写到日志里。有了pool的名称,我们就可以从连接池得到数据
库的连接。Avalon的Excalibur组件用来负责Cocoon的连接池。如果你不熟悉Avalon,可以
访问这里http://jakarta.apache.org/avalon/ 。

代码中的insert statement是直接的JDBC语法。在插入成功后,会将成功的信息写到日志里。
对于日志,如果按上面Action的写法,所有的日志信息都写到你的Web Application的
WEB-INF/logs/sitemap.log文件。

最后,我们将两个输入参数写到了Map对象,虽然它们都在Request对象中,这样做是多余的,
但我们这样做是为了示例Map对象的用法。

看一下这个Action在站点地图中的定义。我们必须首先在站点地图的<map:components>区定
义这个Action。

<map:components>
<!-- all other component definitions go here -->
<map:actions>
<map:action name="authenticator"
src="org.apache.cocoon.acting.DatabaseAuthenticatorAction"/>
<map:action name="add-resource" src="test.AddResourceAction"
logger="sitemap.action.AddResourceAction"/>
<!-- other actions definitions go here -->
</map:actions>
</map:components>


在管道中使用这个Action:


<map:match pattern="addresource">
<map:act type="add-resource">
<map:parameter name="pool" value="resources"/>
<map:read mime-type="text/html" src="examples/confirmation.html"/>
</map:act>

<map:read mime-type="text/html" src="examples/addresource.html"/>
</map:match>

可以看到,在<map:act> 行的下面,紧跟着的<map:parameter>标签为Action提供"pool"参数。
一切顺利的话,Action将返回一个Map对象,confirmation页面将被显示。


在浏览器中打开http://localhost:8080/cocoon/addresource,你会看到一个输入表单。
表单提交后,如果插入成功,将显示confirmation页面,如果出现错误,将再次返回到表单
页面。查看WEB-INF/logs/sitemap.log,错误信息会告诉你出现了什么错误。


如何有效的使用XSP和Action?


XSP和Action是在Cocoon中实现逻辑的两种不同的办法。选择哪一种更适合呢?

XSP在取数据或者创建结构化的数据方面是很有用的。Action被证明在控制数据流程
(并不产生或者影响数据)的逻辑实现上很有用。我们上面看到的用户验证和数据库
操作便是这样的两个例子。

然而,有一点需要说明的问题:XSP会将逻辑和内容混合。而Cocoon的一个基本的原则
就是逻辑、内容、表示的分离。

在使用XSP的时候,我们提出以下几点建议:

首先,尽可能的使用逻辑单,逻辑单会很好的将Java代码隐藏。

第二,尽量使用Cocoon的提供的功能,如:在做数据库的Select的时候,我们也可以用
SqlTransformer来实现。

第三,在决策方面的逻辑尽可能的使用Selector, Matcher或Action组件。

最后,当无法避免在你的XSP中插入Java逻辑的话,尽可能的让<xsp:logic>小,而且不要
把它们散布到各种你的标签中。


关键词:运用Java技术在Cocoon中完成商业逻辑




Copyright © 2012-2018 盾怪网教程(http://www.dunguai.com) .All Rights Reserved 网站地图 友情链接

免责声明:本站资源均来自互联网收集 如有侵犯到您利益的地方请及时联系管理删除,敬请见谅!

QQ:1006262270   邮箱:kfyvi376850063@126.com   手机版