web|xml|生成xml|数据|数据库|问题
用Java实现可保存状态的数据库生成XML树
目录
0. 关键字词注释 1
1. 目的 1
2. 设计思想 1
3. 实现概要 1
4. 实现步骤 2
4.1.XML文档结构定义 2
4.2.数据表的结构定义 4
4.3.构造生成XML的servlet 4
4.4.构造显示树型结构的XSL模版 8
4.5.构造生成点击树型XMl显示详细节点内容的Servlet 12
4.6.Servlet调用的Session Bean的构造 13
4.7.Servlet之间的通讯 15
5. 需要改进的地方 16
6. 附录 16
6.1.Servlet的发布 16
6.2.SessionBean的发布 17
6.3.源码 18
6.3.1.ResultEdit SessionBean源码和相关文件 18
6.3.2.Servlet源码 23
6.3.3.XSL源码 31
0. 关键字词注释
树杈和叶子:在树型表现中,存在两种不同的结构的节点,它们所具有的功能也不 相同,具有下一级节点的节点称为树杈,没有下一级节点的节点称为叶子
1. 目的
为了实现在不同模块中进行界面元素的权限管理,需要对其进行树型分级,原有的applet构造的树型显示因为显示速度和结构方面的因素不被推荐使用,同时在XML技术和浏览器的强大支持下,用XML及相关技术技术实现树型结构显示也成为可以同时满足速度及结构的要求,在此环境下,用XML实现的树来替代applet实现的树是更为优秀的方法。
2. 设计思想
从数据库的树表中提取树的相关参数,生成与数据相关的树型结构,并以在浏览器中以可伸缩的树型为表现。通过在数据库中插入删除修改记录来控制树型的形态。
3. 实现概要
先从某一终端得到用来显示树数据的数据库记录的查询语句,把查询的结果集放入Session Bean的RowSet中,用户通过访问servlet,得到由servlet取得Session Bean中的RowSet所得记录所构造的树,树的文档为XML格式的,XML文档通过用XSL构造的模版最终由客户端浏览器所显示,这需要支持XML和XSL的浏览器,所以在目前状况下是与平台相关的。同时在多个页面传递Session Bean是通过把Session Bean的句柄放入Session中,再在Servlet需要时通过调用Session获得Session Bean的句柄。
页面流程如下:
4. 实现步骤
4.1.XML文档结构定义
定义XML文档的元素和其属性是相当重要的,因为树的层次,节点的信息和所有需要的都包含在XML定义里,定义好XML元素,同时也几乎定义好了数据表结构。
从页面需求而言,对于一个节点,所需要的属性有,节点的显示字符,叶子所具有的超链接,frame目标,对于构成树所需要的还有,节点的序列号,层次,父节点。所以可以这样设置一个节点:
<!—节点以<node> 开头,</node>结束,中间是一个节点的属性-->
<node>
<id>14</id><!—序列号,每一个节点的唯一标识-->
<layer>1</layer><!—层次,从第一层为0开始,依此类推-->
<name>n14</name>
<value>节点14</value><!—显示在页面上的字符串-->
<father>6</father><!—当前节点的父节点id,无父节点的节点该值设为0-->
<href>http://192.168.0.141</href><!—当该节点为叶子时,该值不为空,值为叶子的链接对象-->
<target>mainFrame</target><!—当该节点为叶子时,该值不为空,值为链接的目标框架-->
</node>
尽管在节点的属性描述中体现出来了树的层次,节点的父子关系,但是,因为如方便检索,XSL的模版支持方面的一些原因,需要把树的层次以在XML中节点嵌套的形式体现出来。如下列代码显示出id为14的节点下还有一个id为15的叶子和id为16的树杈,id为16的树杈下面还有id为17的叶子。这是以以嵌套的形式出现的。
<node>
<id>14</id>
<layer>1</layer>
<name>n14</name>
<value>节点14</value>
<father>6</father>
<href> </href>
<target> </target>
<node>
<id>15</id>
<layer>2</layer>
<name>n15</name>
<value>节点15</value>
<father>14</father>
<href>http://192.168.0.141</href>
<target>mainFrame</target>
</node>
<node>
<id>16</id>
<layer>2</layer>
<name>n16</name>
<value>节点16</value>
<father>14</father>
<href></href>
<target></target>
<node>
<id>17</id>
<layer>3</layer>
<name>n17</name>
<value>节点17</value>
<father>16</father>
<href>http://192.168.0.141</href>
<target>mainFrame</target>
</node>
</node>
</node>
在XML文档的最外层是由<project>和</project>所构成的根。给出该XML参用的DTD:
<!ELEMENT project ( name, node+ ) >
<!ELEMENT order ( #PCDATA ) >
<!ELEMENT name ( #PCDATA ) >
<!ELEMENT layer ( #PCDATA ) >
<!ELEMENT node ( layer+, order+, name+, value+, node* ) >
<!ELEMENT value ( #PCDATA ) >
下图显示的是通过XSL模版最终显示在浏览器上的完全展开的样子,要显示下图所示,还需要配置其相应的XSL模版。
(图1)
4.2.数据表的结构定义
这里定义的是一个模型数据表,只要任何一个结果集可以符合到下表的字段要求,都可以用来生成XML树.
在XML文档结构中定义的节点的属性对应的也可以反应到数据表中,表中所应该具有的字段为:
Name Type Size Null Explain
Id number 3 no 序列号
Layer number 2 no 层次
Name varchar2 5 no 名称
Value varchar2 20 no 显示字符
father number 3 no 父节点id
target varchar2 20 yes 目标框架
Href varchar2 100 yes 链接对象