使用Java技术在Cocoon中实现商业逻辑(3) 这个标记定义XSP的language(可以是Java或者JavaScript)和用到的逻辑单的namespace。 接着是我们定义了两个Java变量的<xsp:logic>块。 这些<xsp:logic>块可以有多个,可以出现在你希望的任何地方,而且可以包含各种Java代码。 最后,是我们自己的内容,从用户自己的跟标签开始,在上面的示例中是<content>。在内容部分里, 我们可以用<xsp:expr>这个标签得到在前面定义的变量。 记住,一个XSP实际上就是一个生成器Generator。Cocoon将其转换成Java源文件然后编译、执行它。 (如果想看XSP转换成的Java源文件,到你的servlet容器的工作路径下去找。例如, 如果你使用Tomcat 4.0.4,那么路径就是下面这样: $CATALINA_HOME/work/Standalone/localhost/cocoon/cocoon-files/org/apache/cocoon/www.) XSP执行后产生的XML数据被传递给管道其余的组件。 看下面这个管道实例: <map:pipeline match="*.xsp"> <map:generate type="serverpages" src="examples/{1}.xsp"/> <map:serialize type="xml"/> </map:pipeline> 这里,我们使用一个指定的生成器 ServerPagesGenerator,来处理我们简单的XSP。返回给客户 端未加修饰的XML。 注意例子中使用了特别的 {1} 变量引用:它代替值在管道开始处的通配符指示的值。也就是说, 如果我们在浏览器中打开我们的Web应用中的sample1.xsp,那么 {1}的值便是sample1。 记住,同多数Cocoon组件一样,XSP访问request, response, session, 和 context 对象。这些 对象实际上是HttpServletRequest, HttpServletResponse, HttpSession, 和 HttpServletContext的封装,Cocoon正式版本提供了大量的存取这些对象的方法。 XSP在从数据库读取数据的时候特别有用。 数据库数据自然地以行和列组织,所以数据库数据很容易转换到XML。然而,JDBC (Java Database Connectivity)没有适合地代码完成向XML的转换。 XSP可以让我们在读取数据时很容易,这要感谢ESQL 逻辑单。ESQL 逻辑单除了隐藏了详细 的JDBC代码,还允许将行和列放入到特定的标签中。同时ESQL 逻辑单也可以执行嵌套查询 和执行更新命令。 下面,我们举个XSP应用的例子: 假如我们想将一些Cocoon的资源(名称和URL)存储到数据库。 首先,我们定义存放资源的数据表,然后当用户通过关键字搜索时,我们使用XSP来找到相应 的行,将数据显示给用户。 随后,我们构建一个表单来增加新的列。 表的定义和插入的数据如下面所示。我们这里使用的数据库是MySQL,如果您使用的是其它的 数据库,要注意做相应的改动。这个例子中,必须要有配置好数据库连接池。