<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feed.feedsky.com/styles/feedsky0.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link href="http://feed.feedsky.com/csdnblog" type="application/rss+xml" ref="self"></atom:link><fs:self_link href="http://feed.feedsky.com/csdnblog" type="application/rss+xml"></fs:self_link><lastBuildDate>Sat, 08 Dec 2007 19:55:00 GMT</lastBuildDate><title>CSDN Blog:all</title><description>CSDN Blog:all</description><link>http://blog.csdn.net/rsspages/0.xml</link><item><title>Div+CSS布局入门教程</title><link>http://blog.csdn.net/DL88250/archive/2007/12/09/1925362.aspx</link><wfw:comment>http://blog.csdn.net/DL88250/comments/1925362.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/DL88250/comments/commentRss/1925362.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/DL88250/services/trackbacks/1925362.aspx</trackback:ping><description>在网页制作中，有许多的术语，例如：CSS、HTML、DHTML、XHTML等等。在下面的文章中我们将会用到一些有关于HTML的基本知识，而 在你学习这篇入门教程之前，请确定你已经具有了一定的HTML基础。下面我们就开始一步一步使用DIV+CSS进行网页布局设计吧。
所有的设计第一步就是构思，构思好了，一般来说还需要用PhotoShop或FireWorks(以下简称PS或FW)等图片处理软件将需要制作的界面布局简单的构画出来，以下是我构思好的界面布局图。

下面，我们需要根据构思图来规划一下页面的布局，仔细分析一下该图，我们不难发现，图片大致分为以下几个部分：
　　1、顶部部分，其中又包括了LOGO、MENU和一幅Banner图片；　　2、内容部分又可分为侧边栏、主体内容；　　3、底部，包括一些版权信息。　　有了以上的分析，我们就可以很容易的布局了，我们设计层如下图:

根据上图，我再画了一个实际的页面布局图，说明一下层的嵌套关系，这样理解起来就会更简单了。

　　DIV结构如下：　　│body {}　/*这是一个HTML元素，具体我就不说明了*/　　└#Container {}　/*页面层容器*/　　　　　├#Header {}　/*页面头部*/　　　　　├#PageBody {}　/*页面主体*/　　　　　│　├#Sidebar {}　/*侧边栏*/　　　　　│　└#MainBody {}　/*主体内容*/　　　　　└#Footer {}　/*页面底部*/
至此，页面布局与规划已经完成，接下来我们要做的就是开始书写HTML代码和CSS。
接下来我们在桌面新建一个文件夹，命名为&amp;ldquo;DIV+CSS布局练习&amp;rdquo;，在文件夹下新建两个空的记事本文档，输入以下内容：

&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&amp;gt;&amp;lt;head&amp;gt;&amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=gb2312&amp;quot; /&amp;gt;&amp;lt;title&amp;gt;无标题文档&amp;lt;/title&amp;gt;&amp;lt;link href=&amp;quot;css.css&amp;quot; rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; /&amp;gt;&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;
这是XHTML的基本结构，将其命名为index.htm，另一个记事本文档则命名为css.css。
下面，我们在&amp;lt;body&amp;gt;&amp;lt;/body&amp;gt;标签对中写入DIV的基本结构，代码如下：
&amp;lt;div id=&amp;quot;container&amp;quot;&amp;gt;[color=#aaaaaa]&amp;lt;!--页面层容器--&amp;gt;[/color]　　&amp;lt;div id=&amp;quot;Header&amp;quot;&amp;gt;[color=#aaaaaa]&amp;lt;!--页面头部--&amp;gt;[/color]　　&amp;lt;/div&amp;gt;　　&amp;lt;div id=&amp;quot;PageBody&amp;quot;&amp;gt;[color=#aaaaaa]&amp;lt;!--页面主体--&amp;gt;[/color]　　　　&amp;lt;div id=&amp;quot;Sidebar&amp;quot;&amp;gt;[color=#aaaaaa]&amp;lt;!--侧边栏--&amp;gt;[/color]　　　　&amp;lt;/div&amp;gt;　　　　&amp;lt;div id=&amp;quot;MainBody&amp;quot;&amp;gt;[color=#aaaaaa]&amp;lt;!--主体内容--&amp;gt;[/color]　　　　&amp;lt;/div&amp;gt;　　&amp;lt;/div&amp;gt;　　&amp;lt;div id=&amp;quot;Footer&amp;quot;&amp;gt;[color=#aaaaaa]&amp;lt;!--页面底部--&amp;gt;[/color]　　&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;
为了使以后阅读代码更简易，我们应该添加相关注释，接下来打开css.css文件，写入CSS信息，代码如下：

/*基本信息*/body {font:12px Tahoma;margin:0px;text-align:center;background:#FFF;}
/*页面层容器*/#container {width:100%}
/*页面头部*/#Header {width:800px;margin:0 auto;height:100px;background:#FFCC99}
/*页面主体*/#PageBody {width:800px;margin:0 auto;height:400px;background:#CCFF00}
/*页面底部*/#Footer {width:800px;margin:0 auto;height:50px;background:#00FFFF}
把以上文件保存，用浏览器打开，这时我们已经可以看到基础结构了，这个就是页面的框架了。
关于以上CSS的说明（详细请参考CSS2.0中文手册，网上有下载）：
1、请养成良好的注释习惯，这是非常重要的；
2、body是一个HTML元素，页面中所有的内容都应该写在这标签对之内，我就不多说了；
3、讲解一些常用的CSS代码的含义：
font:12px Tahoma；这里使用了缩写，完整的代码应该是：font-size:12px;font-family:Tahoma；说明字体为12像素大小，字体为Tahoma格式；
margin:0px；也使用了缩写，完整的应该是：
margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px或margin:0px 0px 0px 0px
顺序是 上 / 右 / 下 / 左，你也可以书写为margin:0(缩写)；以上样式说明body部分对上右下左边距为0像素，如果使用auto则是自动调整边距，
另外还有以下几种写法：margin:0px auto；说明上下边距为0px，左右为自动调整；我们以后将使用到的padding属性和margin有许多相似之处，他们的参数是一样的，只不过各自表示的含义不相同，margin是外部距离，而padding则是内部距离。
text-align:center文字对齐方式，可以设置为左、右、中，这里我将它设置为居中对齐。
background:#FFF设置背景色为白色，这里颜色使用了缩写，完整的应该是background:#FFFFFF。background可以用来给指定的层填充背景色、背景图片，以后我们将用到如下格式：background:#ccc url('bg.gif') top left no-repeat；表示：使用#CCC(灰度色)填充整个层，使用bg.gif做为背景图片，top left表示图片位于当前层的左上端，no-repeat表示仅显示图片大小而不填充满整个层。top/right/left/bottom/center用于定位背景图片，分别表示 上 / 右 / 下 / 左 / 中；还可以使用background:url('bg.gif') 20px 100px;表示X座标为20像素，Y座标为100像素的精确定位；repeat/no-repeat/repeat-x/repeat-y分别表示 填充满整个层 / 不填充 / 沿X轴填充 / 沿Y轴填充。
height / width / color 分别表示高度(px)、宽度(px)、字体颜色(HTML色系表)。
4、如何使页面居中？
大家将代码保存后可以看到，整个页面是居中显示的，那么究竟是什么原因使得页面居中显示呢？是因为我们在#container中使用了以下属性：margin:0 auto;按照前面的说明，可以知道，表示上下边距为0，左右为自动，因此该层就会自动居中了。如果要让页面居左，则取消掉auto值就可以了，因为默认就是居左显示的。通过margin:auto我们就可以轻易地使层自动居中了。
5、这里我只介绍这些常用的CSS属性了，其他的请参看CSS2.0中文手册。
当我们写好了页面大致的DIV结构后，我们就可以开始细致地对每一个部分进行制作了。
在上一章中我们写入了一些样式，那些样式是为了预览结构而写入的，我们把css.css中的样式全部清除掉，重新写入以下样式代码：

/*基本信息*/body {font:12px Tahoma;margin:0px;text-align:center;background:#FFF;}a:link,a:visited {font-size:12px;text-decoration:none;}a:hover{}
/*页面层容器*/#container {width:800px;margin:10px auto}
样式说明：
a:link,a:visited {font-size:12px;text-decoration:none;}a:hover {}
这两项分别是控制页面中超链接的样式，具体我就不说明了，请大家参阅手册。
#container {width:800px;margin:10px auto}
指定整个页面的显示区域。width:800px指定宽度为800像素，这里根据实际所需设定。margin:10px auto，则是页面上、下边距为10个像素，并且居中显示。上一章中我们讲过，对层的margin属性的左右边距设置为auto可以让层居中显示。
接下来，我们开始制作TOP部分，TOP部分包括了LOGO、菜单和Banner，首先我们要做的就是对设计好的图片进行切片，以下是在FW下完成的切片：

我将TOP部分切片为两部分，第一部分包括了LOGO和一条横线。由于LOGO图片并没有太多的颜色，这里我于是将这一部分保存为GIF格式，调色 板选择为精确，选择Alpha透明度，色版为白色(此处颜色应与背景色相同)，导出为logo.gif，图像宽度为800px。
到这里，有的朋友就说了，* 为什么要使用GIF格式？使用JPEG不是更好吗？因为GIF格式的图片文件更小，这样能使页面载入的速度更快，当然使用此格式之前必须确定图片并没有使用太多的颜色，当我们使用了GIF格式时，从肉眼上并不能看出图片有什么太大的变化，因此这是可行的。
* 接下来的Banner部分还能使用GIF格式吗？答案是不能，因为Banner部分是一个细致的图片，如果使用GIF格式颜色会有太大的损失，所以必须使用JPEG格式，将文件导出为banner.jpg。
* 合理的切片是非常之重要的，因为切片的方法正确与否决定了CSS书写的简易程度以及页面载入速度。
切好片后，我们还需要对TOP部分进行分析并将DIV结构写入Header中代码如下：
　　&amp;lt;div id=&amp;quot;menu&amp;quot;&amp;gt;　　　&amp;lt;ul&amp;gt;　　　　&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;首页&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;　　　　&amp;lt;li class=&amp;quot;menuDiv&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;　　　　&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;博客&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;　　　　&amp;lt;li class=&amp;quot;menuDiv&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;　　　　&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;设计&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;　　　　&amp;lt;li class=&amp;quot;menuDiv&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;　　　　&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;相册&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;　　　　&amp;lt;li class=&amp;quot;menuDiv&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;　　　　&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;论坛&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;　　　　&amp;lt;li class=&amp;quot;menuDiv&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;　　　　&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;关于&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;　　　&amp;lt;/ul&amp;gt;　　&amp;lt;/div&amp;gt;　　&amp;lt;div id=&amp;quot;banner&amp;quot;&amp;gt;　　&amp;lt;/div&amp;gt;
为什么要这么写呢，因为对菜单使用列表&amp;lt;li&amp;gt;形式，可以在以后方便对菜单定制样式。
而为什么要添加以下代码呢？&amp;lt;li class=&amp;quot;menuDiv&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;插入这一段代码是可以方便地对菜单选项之间插入一些分隔样式，例如预览图中的竖线分隔。
然后我们在css.css中再写入以下样式：
/*页面头部*/#header {background:url(logo.gif) no-repeat}
样式说明：#header {background:url(logo.gif) no-repeat}给页面头部分加入一个背景图片LOGO，并且不作填充。
这里，我们没有指定header层的高度，为什么不指定呢？
因为header层中还有菜单和banner项，所以层的高度暂时是未知的，而层的属性又可以让层根据内容自动设定调整，因此我们并不需要指定高度。
使用列表&amp;lt;li&amp;gt;制作菜单
开始此节的学习前，请确认你已经参照之前的几节内容写入了DIV、CSS到index.htm和css.css文件中。
这一节我将告诉大家如何用列表&amp;lt;li&amp;gt;来制作菜单。
&amp;nbsp;&amp;nbsp;&amp;lt;div id=&amp;quot;menu&amp;quot;&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ul&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;首页&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;li class=&amp;quot;menuDiv&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;博客&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;li class=&amp;quot;menuDiv&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;设计&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;li class=&amp;quot;menuDiv&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;相册&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;li class=&amp;quot;menuDiv&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;论坛&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;li class=&amp;quot;menuDiv&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;关于&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ul&amp;gt;&amp;nbsp;&amp;nbsp;&amp;lt;/div&amp;gt;
以上是这部分的结构，有关于&amp;lt;ul&amp;gt;&amp;lt;/ul&amp;gt;、&amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;这两个HTML元素大家自己去参考相关的内容吧，它们最主要的作用就是在HTML中以列表的形式来显示一些信息。
还有一点需要大家一定要分清楚的，当在HTML中定义为id=&amp;quot;divID&amp;quot;时，在CSS对应的设置语法则是#divID{} ，如果在HTML中定义为class=&amp;quot;divID&amp;quot;时，则在CSS中对应的设置语法是.divID。
如果id=&amp;quot;divID&amp;quot;这个层中包括了一个&amp;lt;img&amp;gt;&amp;lt;/img&amp;gt;，则这个img在CSS中对应的设置语法应该是#divID img {}，同样，如果是包含在class=&amp;quot;divID&amp;quot;这个层中时，则设置语法应该是.divID img {}，这一点希望大家要分清楚了。
另外，HTML中的一切元素都是可以定义的，例如table、tr、td、th、form、img、input...等等，如果你要在CSS中设置它们，则直接写入元素的名称加上一对大括号{}就可以了。所有的CSS代码都应该写在大括号{}中。
按照上面的介绍，我们先在css.css中写入以下代码：
#menu ul {list-style:none;margin:0px;}#menu ul li {float:left;}
解释一下：
#menu ul {list-style:none;margin:0px;}list-style:none，这一句是取消列表前点，因为我们不需要这些点。margin:0px，这一句是删除UL的缩进，这样做可以使所有的列表内容都不缩进。
#menu ul li {float:left;}这里的 float:left 的左右是让内容都在同一行显示，因此使用了浮动属性(float)。
到这一步，建议大家先保存预览一下效果，我们再添加下面的内容，效果如下：

这时，列表内容是排列在一行，我们在#menu ul li {}再加入代码margin:0 10px
#menu ul {list-style:none;margin:0px;}#menu ul li {float:left;margin:0 10px}
margin:0 10px的作用就是让列表内容之间产生一个20像素的距离(左：10px，右：10px)，预览的效果如下：

现在，雏形已经出来了，我们再来固定菜单的位置，把代码改成如下：
#menu {padding:20px 20px 0 0}/*利用padding:20px 20px 0 0来固定菜单位置*/#menu ul {float:right;list-style:none;margin:0px;}/*添加了float:right使得菜单位于页面右侧*/#menu ul li {float:left;margin:0 10px}
这时，位置已经确定了，可是构思图中，菜单选项之间还有一条竖线，怎么办呢？别忘了，我们早就已经留好了一个空的&amp;lt;li class=&amp;quot;menuDiv&amp;quot;&amp;gt;&amp;lt;/li&amp;gt;，要想加入竖线就使用它了。按照上面说的方法，我们再添加以下代码：
.menuDiv {width:1px;height:28px;background:#999}
保存预览一下，竖线是否已经出来了？关于这段代码就不多讲了，应该是很容易理解的。

不过，菜单选项的文字却在顶部，我们再修改成以下代码：
#menu ul li {float:left;margin:0 10px;display:block;line-height:28px}
关于display:block;line-height:28px大家可以去参阅一下手册，我就不多讲了。
效果基本上已经实现了，剩下的就是修改菜单的超链接样式，在css.css中添加以下代码：
#menu ul li a:link,#menu ul li a:visited {font-weight:bold;color:#666}#menu ul li a:hover{}
这个也不多说了，没什么好说的了，最后的效果如下：


这一节到这里就完毕了，顺便把素材提供给大家：构思图：点击下载HTML和CSS源文件：点击下载

这一节里面，主要就是想告诉大家如何使用好border和clear这两个属性。
首先，如果你曾用过table制作网页，你就应该知道，如果要在表格中绘制一条虚线该如何做，那需要制作一个很小的图片来填充，其实我们还有更简单的办法，只要在&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;中加入这么一段就可以了，你可以试试：&amp;lt;div style=&amp;quot;border-bottom:1px dashed #ccc&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;
大家可以再次参考手册，然后你就能明白dashed、solid、dotted...等的作用，利用它们你可以制作出许多效果来，实线、虚线、双线、阴影线等等。
&amp;lt;div id=&amp;quot;banner&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;
以上代码便可以实现设计草图中的banner，在css.css中加入以下样式：
#banner {&amp;nbsp;background:url(banner.jpg) 0 30px no-repeat; /*加入背景图片*/&amp;nbsp;width:730px; /*设定层的宽度*/&amp;nbsp;margin:auto; /*层居中*/&amp;nbsp;height:240px; /*设定高度*/&amp;nbsp;border-bottom:5px solid #EFEFEF; /*画一条浅灰色实线*/&amp;nbsp;clear:both /*清除浮动*/}
通过border很容易就绘制出一条实线了，并且减少了图片下载所占用的网络资源，使得页面载入速度变得更快。
另一个要说明的就是clear:both，表示清除左、右所有的浮动，在接下来的布局中我们还会用这个属性：clear:left/right。在这里添加clear:both是由于之前的ul、li元素设置了浮动，如果不清除则会影响banner层位置的设定。
&amp;lt;div id=&amp;quot;pagebody&amp;quot;&amp;gt;&amp;lt;!--页面主体--&amp;gt;&amp;nbsp;&amp;lt;div id=&amp;quot;sidebar&amp;quot;&amp;gt;&amp;lt;!--侧边栏--&amp;gt;&amp;nbsp;&amp;lt;/div&amp;gt;&amp;nbsp;&amp;lt;div id=&amp;quot;mainbody&amp;quot;&amp;gt;&amp;lt;!--主体内容--&amp;gt;&amp;nbsp;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;
以上是页面主体部分，我们在css.css中添加以下样式：
#pagebody {&amp;nbsp;width:730px; /*设定宽度*/&amp;nbsp;margin:8px auto; /*居中*/}#sidebar {&amp;nbsp;width:160px; /*设定宽度*/&amp;nbsp;text-align:left; /*文字左对齐*/&amp;nbsp;float:left; /*浮动居左*/&amp;nbsp;clear:left; /*不允许左侧存在浮动*/&amp;nbsp;overflow:hidden; /*超出宽度部分隐藏*/}#mainbody {&amp;nbsp;width:570px;&amp;nbsp;text-align:left;&amp;nbsp;float:right; /*浮动居右*/&amp;nbsp;clear:right; /*不允许右侧存在浮动*/&amp;nbsp;overflow:hidden}
为了可以查看到效果，建议在#sidebar和#mainbody中加入以下代码，预览完成后可以删除这段代码：
border:1px solid #E00;height:200px
保存预览效果，可以发现这两个层完美的浮动，在达到了我们布局的要求，而两个层的实际宽度应该160+2(border)+570+2= 734px，已经超出了父层的宽度，由于clear的原因，这两个层才不会出现错位的情况，这样可以使我们布局的页面不会因为内容太长（例如图片）而导致 错位。

而之后添加的overflow:hidden则可以使内容太长（例如图片）的部份自动被隐藏。通常我们会看到一些网页在载入时，由于图片太大，导致布局被撑开，直到页面下载完成才恢复正常，通过添加overflow:hidden就可以解决这个问题。
CSS中每一个属性运用得当，就可以解决许多问题，或许它们与你在布局的页并没有太大的关系，但是你必须知道这些属性的作用，在遇到难题的时候，可以尝试使用这些属性去解决问题。
&amp;nbsp;</description><pubDate>Sun, 09 Dec 2007 03:55:00 +0800</pubDate><author>88250</author><comments>http://blog.csdn.net/DL88250/archive/2007/12/09/1925362.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/DL88250/archive/2007/12/09/1925362.aspx</guid><dc:creator>88250</dc:creator><fs:srclink>http://blog.csdn.net/DL88250/archive/2007/12/09/1925362.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579903/1235704</fs:itemid></item><item><title>Asp.Net Ajax 学习笔记9 JavaScript的原生类型以及Microsoft AJAX Library的相关扩展(上)</title><link>http://blog.csdn.net/firewolffeng/archive/2007/12/09/1925361.aspx</link><wfw:comment>http://blog.csdn.net/firewolffeng/comments/1925361.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/firewolffeng/comments/commentRss/1925361.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/firewolffeng/services/trackbacks/1925361.aspx</trackback:ping><description>1、Object原生类型

    &amp;nbsp;它是一个无序的集合，可以存放任意对象类型 
    可以作为字典使用。 
    可以使用for-in遍历字典的中的每一项 
    不允许扩展它prototype对象，影响面太广。就像在C#中的Object类型，如果可扩展其公开方法，那么所有的类型都被扩展了。 
    Asp.Net Ajax没有扩展Object类型 
    Object的prototype
    
        
            
                toString()/toLocaleString()
                得到表示当前对象与环境无/有关的字符串
            
            
                valueOf()
                返回表示该对象的value（大部分类型会覆盖这个方法）
            
            
                hasOwnProperty(propertyName)
                对象上是否直接定义了某个属性
            
            
                isPrototypeOf(obj)
                obj是不是当前对象的prototype对象
            
            
                propertyIsEnumerable(propertyName)
                某属性是否可遍历
            
        
    
    

&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;

//使用new来实例一个Object对象，也可以用JSon字符串来实例化//一个Obejct对象var&amp;nbsp;o&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Object();&amp;nbsp;//&amp;nbsp;{};&amp;nbsp;{name&amp;nbsp;:&amp;nbsp;&amp;quot;Jeffrey&amp;quot;}//通过字典方式给Object类型的对象属性赋值o[&amp;quot;name&amp;quot;]&amp;nbsp;=&amp;nbsp;&amp;quot;Jeffrey&amp;quot;;//也可以直接给Object类型的对象属性赋值o.salary&amp;nbsp;=&amp;nbsp;1000;

&amp;nbsp;

var&amp;nbsp;dict&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Object();for&amp;nbsp;(var&amp;nbsp;i&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;nbsp;10;&amp;nbsp;i++)...{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;key&amp;nbsp;=&amp;nbsp;&amp;quot;key_&amp;quot;&amp;nbsp;+&amp;nbsp;i;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dict[key]&amp;nbsp;=&amp;nbsp;Math.random();}//使用delete删除Object类型对象中的字段//有点类似与c++中的删除内存的语法&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;delete&amp;nbsp;dict[&amp;quot;key_5&amp;quot;];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//使用for-in循环来遍历Object类型对象中的字段或属性for&amp;nbsp;(var&amp;nbsp;key&amp;nbsp;in&amp;nbsp;dict)...{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;display(&amp;quot;Key:&amp;nbsp;&amp;quot;&amp;nbsp;+&amp;nbsp;key&amp;nbsp;+&amp;nbsp;&amp;quot;,&amp;nbsp;Value&amp;nbsp;+&amp;nbsp;&amp;quot;&amp;nbsp;+&amp;nbsp;dict[key]);}

2、Array原生类型

    长度可变数组对象，最大长度2^32&amp;minus;1 = 4294967295 
    构造此对象时可不指定大小/指定大小，也可以带Array里对象值构造，也就是说可以直接将Array里的元素作为参数构造，那么元素直接赋值到Array里 
    Array的prototype
    
        
            
                length属性
                数组长度，可读写
            
            
                concat([ item1 [ , item2 [ , &amp;hellip; ] ] ])
                返回一个新数组，保存了原数组所有元素和所有的参数
            
            
                push([ item1 [ , item2 [ , &amp;hellip; ] ] ])
                在数组尾添加一个或多个元素
            
            
                pop()
                obj是不是当前对象的prototype对象
            
            
                shift()
                从数组头去除并返回元素
            
            
                unshift([ item1 [ , item2 [ , &amp;hellip; ] ] ])
                在数组头添加一个或多个元素
            
            
                join(separator)
                返回以separator作为分割符得到一个连接所有元素的的字符串
            
            
                reverse()
                将数组内所有元素逆转
            
            
                sort(compareFunction)
                
                参数为一个方法，用于比较两个元素,有两个参数。,比较函数的逻辑是：如果两参数的比较值小于0，则表示a必须出现在b前面，否则在b后面省略了参数则直接使用&amp;lt;, ==, &amp;gt;比较两个元素
                
            
            
                slice(start, end)
                返回新数组，不影响旧数组包含从下标start开始到下标end-1的元素如果省略end则包含从下标start开始至末尾的所有元素如果参数为负数，则表示数组的&amp;ldquo;倒数&amp;rdquo;第几个下标（即下标为n + array.length）如果start元素在end元素之后或相同，则返回空数组
            
            
                splice (start, deleteCount [ , item1 [ , item2 [ , &amp;hellip; ] ] ] )
                最灵活的方法，影响当前数组从下标start的元素开始，删除deleteCount个元素，并在当前start位置开始插入剩余元素删除元素：splice(2, 1)插入元素：splice(2, 0, &amp;quot;Hello&amp;quot;, &amp;quot;World&amp;quot;)替换元素：splice(2, 1, &amp;ldquo;Hello&amp;rdquo;, &amp;ldquo;World&amp;rdquo;)
            
        
    
    

&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
注：push、pop、shift三个方法组合使用能实现栈和队列。
3、Array原生类型的扩展

    
        
            Array.enqueue
            入队列操作，将item添加至array末尾
        
        
            Array.dequeue(array)
            出队列操作，返回并删除array的第一个元素
        
        
            Array.addRange(array, items)
            将items数组中所有元素添加至array末尾
        
        
            Array.contains(array, item)
            如果array中包含item元素，则返回true，否则返回false
        
        
            Array.clear(array)
            清除array中的所有元素
        
        
            Array.insert(array, index, item)
            将item插入至array中下标为index的位置
        
        
            Array.remove(array, item)
            从array中移除item元素
        
        
            Array.removeAt(array, index)
            从array中移除下标为index的元素
        
        
            Array.clone(array)
            
            返回一个与array相同的新数组
            
        
        
            Array.parse(value)
            将表示数组的JSON字符串变为一个数组对象
        
        
            Array.indexOf(array, item, start)
            获得item在array中的下标，从下标为start开始查找。如果array中没有item元素，那么返回-1
        
        
            Array.add(array, item)
            将item添加至array末尾，它和Array.enqueue其实是同一个函数
        
        
            Array.forEach(array, method, instance)
            以instance为上下文this引用，将array中的每个元素依次作为参数，循环调用method方法
        
    


&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;

&amp;lt;script&amp;nbsp;language=&amp;quot;javascript&amp;quot;&amp;nbsp;type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//elt每次调用此函数的Array里的元素&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//index每次调用此函数Array里元素的索引&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//array用来调用此函数的array&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function&amp;nbsp;method(elt,&amp;nbsp;index,&amp;nbsp;array)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.result&amp;nbsp;+=&amp;nbsp;&amp;quot;[&amp;quot;&amp;nbsp;+&amp;nbsp;index&amp;nbsp;+&amp;nbsp;&amp;quot;.&amp;nbsp;&amp;quot;&amp;nbsp;+&amp;nbsp;elt&amp;nbsp;+&amp;nbsp;&amp;quot;]&amp;nbsp;&amp;quot;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;items&amp;nbsp;=&amp;nbsp;&amp;quot;I&amp;nbsp;am&amp;nbsp;Jeffrey&amp;nbsp;Zhao&amp;quot;.split(&amp;quot;&amp;nbsp;&amp;quot;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//使用JSon字符串来构造对象&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;obj&amp;nbsp;=&amp;nbsp;...{result&amp;nbsp;:&amp;nbsp;&amp;quot;&amp;quot;};&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//obj作为用来接收函数调用上下文引用&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Array.forEach(items,&amp;nbsp;method,&amp;nbsp;obj);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert(obj.result);&amp;lt;/script&amp;gt;

4、Error原生类型

    表示错误对象，如EvalError, URIError, RangeError 
    捕获或抛出错误try { &amp;hellip;throw new Error(&amp;hellip;) } catch(e) { &amp;hellip; } 
    Error对象IE和FireFox公有属性，message 
    IE拥有的特定属性：description：同message属性。number：错误编号，只有脚本引擎抛出的错误才有该属性 
    FireFox拥有的特定属性：fileName：创建错误的文件。lineNumber：创建错误对象的行号。stack：创建错误时的堆栈信息 

5、Error原生类型的扩展


    
        
            Error.create(message, errorInfo)
            创建新的Error对象将Error对象的错误信息属性设为message将errorInfo上的信息附加到Error对象
        
        
            Error.prototype.popStackFrame()
            为Error对象整理出更优雅直观的信息（lineNumber, stack）对于IE无效如果一个方法仅仅是返回Error对象而不是抛出对象，则在返回前应该调用该方法
        
    


&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
6、Function原生类型

    与Array，String等类型处于同等地位 
    每个方法均为Function类型的实例。例：typeof(Array) == typeof(Function) == &amp;ldquo;function&amp;rdquo; 
    方法调用时根据发起的对象来确定this上下文引用 
    Function.prototype.apply(instance, args) 
    Function.prototype.call(instance, [ arg1 [ , arg2 [ , &amp;hellip; ] ] ])
    
    &amp;lt;script&amp;nbsp;language=&amp;quot;javascript&amp;quot;&amp;nbsp;type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function&amp;nbsp;display(text)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.getElementById(&amp;quot;info&amp;quot;).innerHTML&amp;nbsp;+=&amp;nbsp;(text&amp;nbsp;+&amp;nbsp;&amp;quot;&amp;lt;br&amp;nbsp;/&amp;gt;&amp;quot;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function&amp;nbsp;aMethod()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;result&amp;nbsp;=&amp;nbsp;this.toString();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;(var&amp;nbsp;i&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;nbsp;arguments.length;&amp;nbsp;i++)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result&amp;nbsp;+=&amp;nbsp;(&amp;quot;,&amp;nbsp;&amp;quot;&amp;nbsp;+&amp;nbsp;arguments[i]);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;result;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;a&amp;nbsp;=&amp;nbsp;new&amp;nbsp;String(&amp;quot;I&amp;nbsp;am&amp;nbsp;string&amp;nbsp;A&amp;quot;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;b&amp;nbsp;=&amp;nbsp;new&amp;nbsp;String(&amp;quot;I&amp;nbsp;am&amp;nbsp;string&amp;nbsp;B&amp;quot;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;a.aMethod&amp;nbsp;=&amp;nbsp;b.aMethod&amp;nbsp;=&amp;nbsp;aMethod;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;display(&amp;quot;aMethod():&amp;nbsp;&amp;quot;&amp;nbsp;+&amp;nbsp;aMethod());&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;display(&amp;quot;a.aMethod():&amp;nbsp;&amp;quot;&amp;nbsp;+&amp;nbsp;a.aMethod());&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;display(&amp;quot;b.aMethod():&amp;nbsp;&amp;quot;&amp;nbsp;+&amp;nbsp;b.aMethod());&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;display(&amp;quot;a.aMethod.call(b,&amp;nbsp;1,&amp;nbsp;2,&amp;nbsp;3):&amp;nbsp;&amp;quot;&amp;nbsp;+&amp;nbsp;a.aMethod.call(b,&amp;nbsp;1,&amp;nbsp;2,&amp;nbsp;3));&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;display(&amp;quot;b.aMethod.apply(a,&amp;nbsp;[1,&amp;nbsp;2,&amp;nbsp;3]):&amp;nbsp;&amp;quot;&amp;nbsp;+&amp;nbsp;b.aMethod.apply(a,&amp;nbsp;[1,&amp;nbsp;2,&amp;nbsp;3]));&amp;lt;/script&amp;gt;
    
    以上代码用a.aMethod.call方法调用b，那么a.aMethod的this上下文就是b，使用this就是在使用b对象，b.aMethod.apply也相同，a是this上下文。call和apply的区别在于，call使用不定参数，apply使用数组也就是Array参数 

7、Function原生类型扩展


    
        
            Function.createDelegate(instance, method)
            得到一个方法引用，执行它时则会调用method方法，并且保证method方法的上下文this引用为instance
        
        
            Function.createCallback(method, context)
            得到一个方法引用，执行它时则会调用method方法，并将context作为额外的参数传入
        
    


&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;

&amp;lt;script&amp;nbsp;language=&amp;quot;javascript&amp;quot;&amp;nbsp;type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;obj&amp;nbsp;=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//定义obj对象的属性。&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;text&amp;nbsp;:&amp;nbsp;&amp;quot;Hello&amp;quot;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//定义obj对象的onClick事件，并加上事件处理器&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;onClick&amp;nbsp;:&amp;nbsp;function(e,&amp;nbsp;arg)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert(this.text&amp;nbsp;+&amp;nbsp;&amp;quot;&amp;nbsp;&amp;quot;&amp;nbsp;+&amp;nbsp;arg);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//创建一个obj.onClick的方法引用，obj为这个方法的this上下文&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;delegate&amp;nbsp;=&amp;nbsp;Function.createDelegate(obj,&amp;nbsp;obj.onClick);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//创建一个obj.onClick的方法引用的引用，将&amp;quot;World&amp;quot;作为额外的arg参数&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;onClickCallback&amp;nbsp;=&amp;nbsp;Function.createCallback(delegate,&amp;nbsp;&amp;quot;World&amp;quot;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//为DOM元素添加某一事件的处理函数，事件名称应去掉&amp;ldquo;on&amp;rdquo;前缀。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //$addHandler是缩写，完整写法应该是Sys.UI.DomEvent.addHandler
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //使用$addHandler方法添加事件处理器，那么自动将事件对象click作为参数e传入了事件处理器&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $addHandler($get(&amp;quot;btn&amp;quot;),&amp;nbsp;&amp;quot;click&amp;quot;,&amp;nbsp;onClickCallback);&amp;lt;/script&amp;gt;

此处为什么要联合使用createDelegate和createCallback方法，因为在obj.onClick方法中，用到了this上下文和附加arg。
附：
Event对象的属性

    altKey：判断触发事件时Alt键是否被按下。 
    button：得到触发事件的鼠标按键。可选值为Sys.UI.MouseButton枚举（leftButton、middleButton和rightButton）。 
    charCode：得到触发事件时的键盘按键代码。可以为Sys.UI.Key枚举（backspace, tab, enter,esc, space, pageUp, pageDown, end, home, left, up, right, down, del）。 
    clientX：鼠标指针相对于文档可见区域的X坐标。 
    clientY：鼠标指针相对于文档可见区域的Y坐标。 
    ctrlKey：判断触发事件时Ctrl键是否被按下。 
    offsetX：鼠标指针相对于触发事件元素左侧边缘的偏移位置。 
    offsetY：鼠标指针相对于触发事件元素上边缘的偏移位置。 
    rawEvent：原始的DOM事件。 
    screenX：鼠标指针相对于浏览者屏幕的X坐标。 
    screenY：鼠标指针相对于浏览者屏幕的Y坐标。 
    shiftKey：判断触发事件时Shift键是否被按下。 
    target：触发事件的对象。 
    type：事件名称（例如&amp;ldquo;click&amp;rdquo;）。</description><pubDate>Sun, 09 Dec 2007 03:54:00 +0800</pubDate><author>firewolffeng</author><comments>http://blog.csdn.net/firewolffeng/archive/2007/12/09/1925361.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/firewolffeng/archive/2007/12/09/1925361.aspx</guid><dc:creator>firewolffeng</dc:creator><fs:srclink>http://blog.csdn.net/firewolffeng/archive/2007/12/09/1925361.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579905/1235704</fs:itemid></item><item><title>Vista部署的一些收集</title><link>http://blog.csdn.net/hapeacock/archive/2007/12/09/1925360.aspx</link><wfw:comment>http://blog.csdn.net/hapeacock/comments/1925360.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/hapeacock/comments/commentRss/1925360.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/hapeacock/services/trackbacks/1925360.aspx</trackback:ping><description>目录：
步骤：

    从源安装DVD中提取原始安装包提取Lenovo 和 IBM 安装映像到Install.wim文件中，h:盘为Vista 20 合 1安装盘，lenovo映像的序列号为1，IBM为2Lenovo：imagex /export h:\sources\install.wim&amp;nbsp;1 d:\vistainstall\Vista\Install.wim &amp;quot;Vista Ultimate Lenovo&amp;quot;&amp;nbsp;IBM：imagex /export h:\sources\install.wim&amp;nbsp;2 d:\vistainstall\Vista\Install.wim &amp;quot;Vista Ultimate IBM&amp;quot; 
    

Vista备份的最佳实践

    备份只能用命令行工具Imagex，建立cmd脚本。在脚本运行时输入映像名称备注等
    还原用自动应答文件指定安装源地址，指向备份目录

&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
&amp;nbsp;
一、Imagex

    从已有多个映像的wim文件中导出指定映像到新的wim文件中，如果目标wim文件存在则将导出的映像集成到目标wim文件中


命令行：imagex /export e:\back.wim 1 e:\32 位元零售版\sources\install.wim &amp;quot;64 位元免刷激活旗鑑版備份&amp;quot;
将e:\back.wim文件中的第1个映像导出并集成到e:\32 位元零售版\sources\install.wim文件中，将映像命名为&amp;quot;64 位元免刷激活旗鑑版備份&amp;quot;


    从 ASUS 恢复盘提取 ASUS Oem Vista Ultimate 版到指定目录中


命令行：imagex /apply X:\asus.swm 4 /ref X:\*.swm Y:\ASUS /check /verify
命令及参数说明：将映像应用于指定的目录（也可以是驱动器）。本例中指将 X 盘的 asus.swm 文件中标识为 4 （Ultimate 版标识为4）的副本应用于 Y 盘的 ASUS 目录，应用之后 ASUS 目录被隐藏。/apply [image_file image_number | image_name image_path] image_file 映像文件名 image_number 映像文件中副本的编号 image_path 映像路径/ref splitwim.swm 引用拆分的 .wim 文件(SWM)。splitwim.swm 是其他拆分文件的名称和位置，可以使用通配符。本例中指 X 盘的所有.swm 文件（*.swm文件）。/check 检查 .wim 文件的完整性。/verify 检查错误和文件重复进行文件资源验证。


    从应用于指定目录的映像中重新捕获可安装的 Install.wim 文件 


命令行：imagex /compress fast /flags &amp;quot;Ultimate&amp;quot; /check /scroll /capture Y:\ASUS Y:\Install.wim &amp;quot;Asus Vista Ultimate&amp;quot;
命令及参数说明：将应用于指定目录的映像重新捕获，并使之成为可安装的 Install.wim 文件。本例中指将应用于 Y 盘 ASUS 目录中的&amp;ldquo;Ultimate&amp;rdquo;版文件重新捕获为可安装的 install.wim 文件。并标识为 &amp;quot;Asus Vista Ultimate&amp;quot; 。/compress [maximum | fast | none] 指定最初的捕获操作使用的压缩类型。maximum 最大值，提供了最佳压缩效果，捕获映像所用的时间最长。fast 快速，是默认压缩类型。较快的映像压缩效果，生成的文件比使用最大值要大。none 无压缩捕获映像。/flags &amp;quot;EditionID&amp;quot; 指定要捕获映像的版本。因为要重新部署为可安装的 Install.wim，所以 /flags 值是必须使用的并且必须使用引号加入有效的 EditionID 值。有效的 EditionID 值包括：HomeBasic HomePremium Starter Ultimate Business Enterprise ServerDatacenter ServerEnterprise ServerStandard/check 检查 .wim 文件的完整性。/scroll 滚动输出进行重定向。/capture image_path image_file image_path 映像路径 image_file 映像文件名 捕获到的新映像文件的名称及路径。


    Vista_Ultimate备份imagex /compress fast /flags &amp;quot;ULTIMATE&amp;quot; /check /scroll /capture c: d:\install.wim &amp;quot;Vista_Ultimate备份&amp;quot;，用imagex /info d:\vista\sources\install.wim 的命令查看install.wim 有Vista_Ultimate的备份，其ID为&amp;ldquo;2&amp;rdquo;；于是我格式化C盘后，进入安装程序，在安装选项中看到了Vista_Ultimate备份，选择这项Vista_Ultimate安装成功了。
    排除文件使用任意文本编辑器（例如记事本）创建名为 wimscript.ini 的配置文件。内容如下：[ExclusionList]ntfs.loghiberfil.syspagefile.sys&amp;quot;System Volume Information&amp;quot;RECYCLERWindows\CSC


[CompressionExclusionList]*.mp3*.zip*.cab\WINDOWS\inf\*.pnf


    将安装好驱动、应用程序做成Vista安装光盘


1. apply 類似 ghost2. append 是 apply 的逆向動作; 等於把備份 ghost 到安裝盤裏. 既是 ghost, 當然無法安裝! (讓廠商作更新用)3. capture 也是 apply 的逆向動作, 但它有二種不同作法:一. 和 append 一樣二. 加上 flags 變成可任意安裝 (不過很奇特的, 如果用 apply 的話卻只能 ghost 回原始處, 否則路徑不同會導致安裝失敗)4. 把不同版本集成一起會用到優化, 也就是相同的文件只複製一份. 所以您的備份系統如果裝有很多程式, 比方說一共 4 GB, 那麼 append 之後, 安裝盤體積變成2.5 GB + 4 GB (+ 休眠 + pagefile.sys + $Recycle.Bin + TEMP + System Volume Information).... 非瞠目結舌不行. 總之, 除非您先控制程式容量, 並且手動刪除上述垃圾檔, 否則 append 絕對不適合您.5. 這麼辦吧. 在 D:\VISTA 執行 D:\Windows\System32\Sysprep\sysprep.exe /oobe /generalize /shutdown, 然後重新開機回到 C:\XP. 下指令 imagex /compress fast (或 Maximum) /flags &amp;quot;ULTIMATE&amp;quot; /check /scroll /capture d: e:\back.wim &amp;quot;我的最愛備份&amp;quot; &amp;quot;愛人生日紀念版&amp;quot;, 再下指令集成到零售版去: imagex /export e:\back.wim 1 e:\install.wim &amp;quot;我的最愛備份&amp;quot;叮嚀二聲: 1.D:\Vista 所安裝程序如果非 &amp;quot;為所有者&amp;quot; 安裝則通過封裝再安裝後程序是在系統裏, 可是不會出現出來喔.2. /flags 之後的 &amp;quot;版本 ID&amp;quot; 請務必自行視實際版本書寫, 否則又是 GHOST (沒有可用系統, 不能安裝, 只能 apply 回原始分區) !!! 

sysprep 

    在參照電腦上安裝 Windows。 
    在安裝完成後，重新開機並安裝任何其他裝置驅動程式或應用程式。 
    更新 Windows 安裝之後，請執行 sysprep /oobe /generalize。/generalize 選項會指示 Sysprep 從 Windows 安裝移除系統特定的資料。系統特定資訊包括事件記錄、唯一的安全性識別元 (SID) 以及其他唯一的資訊。在移除唯一的系統資訊後，就會關閉電腦。/oobe 選項會指示 Windows 安裝在下次電腦開機時執行 Windows 歡迎畫面。 
    在電腦關機後，您可以開機成 Windows PE 或電腦上的另一個作業系統。 
    接著使用 ImageX 來擷取 Windows 安裝以建立參照映像，供使用相同硬體設定的電腦來安裝。


imagex /compress fast /check /flags &amp;quot;Ultimate&amp;quot; /scroll /capture c: c:\myimage.wim &amp;quot; Vista Ultimate&amp;quot; &amp;quot;My Custom Vista Image 1&amp;quot;

sysprep所在目录：&amp;ldquo;C:\windows\system32\sysprep\sysprep.exe&amp;rdquo; 
安装应用程序时要选择&amp;ldquo;所有人使用&amp;rdquo;，不然新建用户后没有快捷方式

WinPE

    Shell在windows\system32 下面写一个Winpeshl.ini，内容如下[LaunchApp]AppPath = %SYSTEMDRIVE%\myshell.exe
    自定义桌面背景在mount\windows\system32\中保存一个名为 winpe.bmp 的bmp图像即可。
    创建可启动 UFD在运行 Windows Vista 操作系统或 Windows PE 会话过程中，插入 UFD 设备。在命令提示符下，使用 Diskpart 将设备格式化为跨越整个设备的 FAT32，然后将此分区设置为活动状态。例如，diskpart select disk 1 clean create partition primary size=&amp;lt;size of device&amp;gt; select partition 1 active format fs=fat32 assign exit其中，disk 1 的值等于 UFD。在计算机上，将 \ISO 目录中的所有内容复制到 UFD 设备中。可以手动创建目录结构或使用 xcopy 命令自动构建相应的文件并将其从技术人员计算机复制到 UFD 设备中。例如，xcopy c:\winpe\iso\*.* /s /e /f f:\其中，c: 是指计算机的硬盘，f: 是指 UFD 设备。
    创建可启动 CD-ROM在技术人员计算机上，在提示符下，使用 Oscdimg 创建 .iso 文件。例如，oscdimg -n -bc:\winpe\etfsboot.com c:\winpe\ISO c:\winpe\winpe.iso对于 ia64 体系结构，使用 efisys.bin 替换 etfsboot.com。将映像 (Winpe.iso) 刻录到 CD-ROM。
    生成单击&amp;ldquo;开始&amp;rdquo;，依次指向&amp;ldquo;所有程序&amp;rdquo;、&amp;ldquo;Windows OPK&amp;rdquo;或&amp;ldquo;Windows AIK&amp;rdquo;，然后单击&amp;ldquo;Windows PE 工具命令提示符&amp;rdquo;copype.cmd x86 d:\winpe添加其他程序包通过使用 Peimg 工具，您将使用 /install 选项来安装 Windows 功能。Windows 功能包括在基本映像 (Winpe.wim) 中，但未安装。也可以导入程序包并添加驱动程序和语言包。使用 peimg /install 命令将 Windows 功能添加到基本映像中。例如，peimg /install=&amp;lt;pkg&amp;gt; c:\winpe\mount\Windows其中，&amp;lt;pkg&amp;gt; 表示程序包名称。使用 /list 命令可以获得可用程序包及其名称的列表。指定程序包名称时可以使用通配符。将安装与名称匹配的所有程序包。例如，peimg /install=WinPE-HTA-Package c:\winpe\mount\Windows或 peimg /install=*winpe* c:\winpe\mount\Windows其中，通配符表示程序包名称中含有 winpe 的任何程序包。通过使用 peimg /list 命令查看当前映像中的所有程序包，验证这些程序包是否已安装。例如，peimg /list c:\winpe\mount\Windows在 INS 列中，(+) 表示已安装的程序包，(-) 则表示未安装的程序包。
    输入法以微软五笔86为例，我们仔细分析了一下，它共需要winwb86.IME、winwb86.MB和输入法指示器internat.exe(借用2000的)，我们把这些文件放到system32里面，然后把五笔的注册表信息+进去，最后启动internat.exe，为此我们编写了一个批处理来完成(这里先假设3个文件已经手工加进去了)reg add HKLM\SYSTEM\ControlSet001\Control\Keyboard Layouts\E0100804reg add HKLM\SYSTEM\ControlSet001\Control\Keyboard Layouts\E0100804 /v IME file /t REG_SZ /d winwb86.imereg add HKLM\SYSTEM\ControlSet001\Control\Keyboard Layouts\E0100804 /v Layout file /t REG_SZ /d kbdus.dllreg add HKLM\SYSTEM\ControlSet001\Control\Keyboard Layouts\E0100804 /v Layout Text /t REG_SZ /d 王码五笔型输入法86版%systemroot%\system32\internat.exe于是我们熟悉的输入法指示器出来了
    另外的有:全拼&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;键: E0010804 输入法文件:winpy.ime双拼&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;E0020804&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;winsp.ime郑码&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;E0030804&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;winzm.ime智能ABC&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;E0040804&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;winabc.ime国标&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;E0050804&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;wingb.ime微软拼音&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;E00E0804&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;pintlgnt.ime五笔86&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; E0100804&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; winwb86.ime其他的就不提了(有些输入法不仅仅只有一个ime文件，记得拷全了)也谈谈PE输入法，以加载微软五笔86为例
    

Vista

    启动在Windows&amp;nbsp;2000/XP/2003&amp;nbsp;启动过程是这样的POST&amp;nbsp;(系统自检)-&amp;gt;BIOS读取MBR-&amp;gt;找到硬盘分区表中Active的分区-&amp;gt;读取Boot&amp;nbsp;Sector.-&amp;gt;&amp;nbsp;加载Boot&amp;nbsp;code.-&amp;gt;&amp;nbsp;加载NTLDRWindows&amp;nbsp;Vista&amp;nbsp;引入了Boot&amp;nbsp;Manager的概念和BCD的概念.&amp;nbsp;POST&amp;nbsp;(系统自检)-&amp;gt;BIOS读取MBR-&amp;gt;找到硬盘分区表中Active的分区-&amp;gt;读取Boot&amp;nbsp;Sector-&amp;gt;&amp;nbsp;加载BOOTMGR&amp;nbsp;(Boot&amp;nbsp;Manager).&amp;nbsp;Boot&amp;nbsp;Manager&amp;nbsp;读取BCD信息然后列出启动菜单-如果Windows&amp;nbsp;Vista&amp;nbsp;被选中的话.&amp;nbsp;BOOTMGR将控制权交给Winload.exe&amp;nbsp;然后启动系统.&amp;nbsp;并开始核心加载-如果是XP/2000/2003被选中的话,&amp;nbsp;BOOTMGR将控制权交给NTLDR,&amp;nbsp;然后开始普通的Windows&amp;nbsp;加载.
    bootsect.exe这个命令的用途是这样的.(假设在Windows&amp;nbsp;Vista之后我们安装了Windows&amp;nbsp;XP)1.&amp;nbsp;首先启动到Windows&amp;nbsp;XP下,&amp;nbsp;运行bootsect.exe&amp;nbsp;/NT60&amp;nbsp;启用BootMGR.2.&amp;nbsp;在BCD&amp;nbsp;Store下创建一个Windows&amp;nbsp;XP的StoreBcdedit&amp;nbsp;-create&amp;nbsp;ntldr&amp;nbsp;-d&amp;quot;Windows&amp;nbsp;XP&amp;quot;3.&amp;nbsp;将store&amp;nbsp;加入启动菜单&amp;nbsp;(因为Vista&amp;nbsp;不知道Windows&amp;nbsp;XP的存在)bcdedit&amp;nbsp;-set&amp;nbsp;ntldr&amp;nbsp;path\ntldrbcdedit&amp;nbsp;/displayorder&amp;nbsp;ntldr&amp;nbsp;/addastpath是NTLDR所在的路径然后启动就可以选择多系统的
    Bcdedit 命令不完全解析实现PE2.0与Vista安装盘双引导的方法
    工具：VISTA MSDN原版光盘，VISTA AIK平台：XP PRO SP2步骤：一、准备工作1、从VISTA系统中提取bcdedit.exe、bootmgr.exe.mui、memtest.exe.mui到E盘根目录下2、定制WinPE.wim在命令提示符下执行下列命令QUOTE:c:cd &amp;quot;C:\Program Files\Windows AIK\Tools\PETools\&amp;quot;copype.cmd x86 e:\peimagex /apply e:\pe\winpe.wim 1 e:\pe\mountcopy &amp;quot;c:\program files\Windows AIK\Tools\x86\imagex.exe&amp;quot; e:\pe\mount\Windows\System32copy e:\bcdedit.exe e:\pe\mount\Windows\System32peimg /prep e:\pe\mount\Windows输入yes继续执行imagex /unmount /commit e:\pe\mountcopy e:\pe\winpe.wim e:\winpe.wim二、修改光盘引导菜单1、用UltraISO打开VISTA MSDN原版光盘，提取boot目录的bcd（无扩展名）到E盘2、在命令提示符下执行下列命令QUOTE:e:ren bcd tmpbcdedit /import tmp bcdeditbcdedit /timeout 15bcdedit /set {bootmgr} locale zh-CNbcdedit /set {default} locale zh-CNbcdedit /set {memdiag} locale zh-CNbcdedit /set {default} description &amp;quot;安装 Vista ULTIMATE&amp;quot;bcdedit /copy {default} /d &amp;quot;启动 Windows PE 2.0&amp;quot;执行完毕后，会返回下列信息The entry was successfully copied to {6eb5d89a-0822-11dc-89f2-005056c00008}注意：{6eb5d89a-0822-11dc-89f2-005056c00008}是由系统随机生成的菜单ID标识，不同机子可能会不相同。继续执行下列命令：QUOTE:bcdedit /set {6eb5d89a-0822-11dc-89f2-005056c00008} device ramdisk=[boot]\boot\winpe.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}bcdedit /set {6eb5d89a-0822-11dc-89f2-005056c00008} osdevice ramdisk=[boot]\boot\winpe.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}bcdedit /displayorder {6eb5d89a-0822-11dc-89f2-005056c00008} -addlastbcdedit /export bcddel tmp三、制作完毕用UltraISO打开VISTA MSDN原版光盘，将e盘下的bcd、winpe.wim添加到光盘boot目录下，将bootmgr.exe.mui、memtest.exe.mui添加到光盘boot\zh-cn目录下，然后保存并刻盘即可。
    


&amp;nbsp;</description><pubDate>Sun, 09 Dec 2007 03:53:00 +0800</pubDate><author>【♂孔雀猪】</author><comments>http://blog.csdn.net/hapeacock/archive/2007/12/09/1925360.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/hapeacock/archive/2007/12/09/1925360.aspx</guid><dc:creator>【♂孔雀猪】</dc:creator><fs:srclink>http://blog.csdn.net/hapeacock/archive/2007/12/09/1925360.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579908/1235704</fs:itemid></item><item><title>IMAGEX命令实例</title><link>http://blog.csdn.net/hapeacock/archive/2007/12/09/1925359.aspx</link><wfw:comment>http://blog.csdn.net/hapeacock/comments/1925359.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/hapeacock/comments/commentRss/1925359.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/hapeacock/services/trackbacks/1925359.aspx</trackback:ping><description>下文中，实验所用系统的设置如下：C盘安装操作系统，D盘是光驱，E盘用于保存创建的映像文件。不过当我们用Windows PE光盘引导计算机后情况有所变化，C盘依然是系统盘，但光驱成了X盘，Windows下的E盘成了Windows PE环境下的D盘。因此为了避免混淆，在Windows PE环境下的操作将会使用PE中的盘符名称，但在Windows环境下的操作将会使用Windows中的盘符。
&amp;nbsp;

&amp;nbsp;
&amp;nbsp;
1.ximage /capture c: d:\data.wim &amp;quot;Drive C &amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;ldquo;/capture&amp;rdquo;参数的作用是创建映像文件
&amp;nbsp;
(假设我们希望使用默认设置创建一个C盘的映像，映像文件将以data.wim为名保存在D盘根目录下，并在创建完成后进行数据校验.&amp;ldquo;/capture&amp;rdquo;参数的作用是创建映像文件，而该参数后面的&amp;ldquo;c:&amp;rdquo;则指定了要创建映像的目标分区。&amp;ldquo;d:\data.wim&amp;rdquo;这个参数指定了镜像文件的保存位置以及名称，&amp;ldquo;Drive C&amp;rdquo;参数定义了映像文件的描述，需要用引号引用。最后的&amp;ldquo;/verify&amp;rdquo;参数则会让Ximage创建完映像之后进行校验。当屏幕显示&amp;ldquo;Successfully imaged c:\&amp;rdquo;的字样时表示映像已经创建完成了)
&amp;nbsp;

&amp;nbsp;
2.ximage /apply d:\data.wim 1 c: /verify&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;ldquo;/apply&amp;rdquo;可以使用创建好的映像文件来恢复
(假设我们要把之前创建的保存在D盘的data.wim文件重新恢复到C盘，那么可以首先格式化C盘,这里要注意映像名称后面的编号&amp;ldquo;1&amp;rdquo;，下文中我们将会介绍，Ximage可以把多个镜像文件附加到同一个映像中，那么在使用某个特定镜像部署系统，或者执行其他类似操作的时候，怎样从附加了多个镜像的映像文件中指定特定镜像呢？这里就需要使用编号了，如果希望对第几个镜像进行操作，在映像文件名称后添加该镜像的编号即可。)
&amp;nbsp;

&amp;nbsp;
3.ximage /info d:\data.wim &amp;gt;f:list.txt&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;ldquo;/info&amp;rdquo; 查看映像文件信息
(程序会自动创建一个txt格式的文件,文件的内容就是该映像文件中所有附加的镜像文件的信息.其中&amp;quot;&amp;lt;name&amp;gt;......&amp;lt;/name&amp;gt;&amp;quot;这一段文字的内容,这就是我们在使用&amp;ldquo;/capture&amp;rdquo;参数创建映像文件时输入的描述,因此在创建映像的时候要输入详细的描述信息,方便日后的使用)

&amp;nbsp;

&amp;nbsp;
4. ximage /dir d:\data.wim 1 &amp;gt;d:\list.txt&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;ldquo;/dir&amp;rdquo;查看映像文件内容
(随着使用时间的延长，管理员们可能需要管理越来越多各种用途的映像文件。如何快速从多个映像文件中找到自己的目标就显得非常重要。我们就可以直接把某个映像文件，甚至具体到其中附加的某个镜像的内容显示出来。注意，这一步操作不能在Windows PE环境下进行，必须回到Windows下.这将显示data.wim这个映像文件中包含的镜像内容（如果映像文件中包含了多个镜像，也可以通过编号指定具体镜像）。该命令可以将显示的内容全部输出到D盘一个名为list.txt的文本文件中，使用文本编辑器查看和搜索具体文件就相当简单了。这里有个问题需要注意，就算您的映像文件中只包含了一个镜像，在使用/dir参数的时候依然需要在文件名后面指定镜像编号，否则将无法列出其中的内容。)
&amp;nbsp;

&amp;nbsp;
5.ximage /mountrw e:\data.wim 1 e:\c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;ldquo;/mount&amp;rdquo;&amp;ldquo;/mountrw&amp;rdquo;将映像文件内容映射为文件夹
(e:\c&amp;rdquo;的含义是将镜像映射到E盘下一个名为&amp;ldquo;c&amp;rdquo;的文件夹中。如果该文件夹内当前有文件，那么在被映射的镜像卸载之前，原先的内容将无法访问。映射了镜像之后，我们就可以使用Windows资源管理器打开映射出来的文件夹，查看其中的内容，添加或者删除文件，或者像在操作本地硬盘那样进行其他操作.&amp;ldquo;/mount&amp;rdquo;参数将映像文件中具体的镜像映射为本地硬盘上的文件夹，并编辑其中的内容。&amp;ldquo;/mount&amp;rdquo;参数有两个，分别是&amp;ldquo;/mount&amp;rdquo;和&amp;ldquo;/mountrw&amp;rdquo;，其中前者可以将镜像映射为只读文件夹，而后者可以将镜像映射为可读写文件夹。要注意，这两个命令都只能在Windows XP SP2、Windows Server 2003 SP1以及Windows Vista中使用。)
&amp;nbsp;

&amp;nbsp;
6.ximage /unmount /commit e:\c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;ldquo;/unmount&amp;rdquo;合并对映像文件的修改
(因为我们之前使用的参数是&amp;ldquo;/mountrw&amp;rdquo;，这样映射出来的文件是可写的，因此当用完之后，为了使对文件的更改能够生效，我们需要使用 &amp;ldquo;/unmount&amp;rdquo;参数配合&amp;ldquo;/commit&amp;rdquo;选项，合并对映像文件的修改，并将其卸载)
&amp;nbsp;

&amp;nbsp;
&amp;nbsp;
7.ximage /delete d:\data.wim 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;ldquo;/delete&amp;rdquo;镜像的删除
&amp;nbsp;
(有时候您可能会遇到这样的情况：一个映像文件中附加了很多不同环境的镜像文件，可其中一个镜像文件已经没用了。为了减少存储空间的占用，您可能希望删除不用的镜像文件。)本段内容需要在Windows PE环境下操作
&amp;nbsp;

&amp;nbsp;
8.ximage /export d:\new.wim d:\data.wim 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;ldquo;/export&amp;rdquo;镜像的提取
(您可能还会有这样的需求：想要将附加到一个映像文件中的独立镜像提取出来，做其他用途。这些任务依然可以通过Ximage的参数实现,注意，在提取镜像的时候一定要保证目标映像文件的所在分区具有足够的可用空间。如果可用空间不足，程序不会报错，依然会生成新的映像文件，但是文件本身是不完整的。)本段内容需要在Windows PE环境下操作

&amp;nbsp;

&amp;nbsp;
9.ximage /split d:\data.wim d:\datasplited.swm 640&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;ldquo;/split&amp;rdquo;将创建出来的映像文件按照一定大小拆分，以便刻录到光盘或者保存到其他可以动存储介质上
(如果您希望将创建出来的映像文件按照一定大小拆分，以便刻录到光盘或者保存到其他可以动存储介质上，那么可以使用Ximage的&amp;ldquo;/split&amp;rdquo;参数。例如，如果我们希望将之前创建的data.wim文件以640 MB为大小拆分，以便刻录到CD光盘上,,该操作将会创建一系列带有固定编号的.swm文件，例如我们要拆分的文件是data.wim，那么拆分后的文件就是data1.swm、 data2.swm等。该参数同样有些不足：首先，无法在创建映像文件的时候使用，只能在映像文件创建成功之后使用。另外，拆分的文件大小是以MB为单位指定的，如果我们需要以GB为单位拆分文件以便刻录DVD光盘上，显得不够灵活。)

&amp;nbsp;

&amp;nbsp;

&amp;nbsp;
10.ximage /append c: d:\data.wim &amp;ldquo;Drive C 2&amp;rdquo; /verify&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;ldquo;/append&amp;rdquo;的作用是将目标分区附加到现有文件
(有时我们可能会遇到这样的情况：当我们安装好操作系统之后，需要创建一个映像文件；而安装完补丁程序以及驱动程序之后，需要创建另外一个映像；等安装完所有其他需要的应用程序，并进行过必要的设置之后，还需要创建第三个映像文件。这样的要求有一个特点，那就是三个映像文件中大部分数据都是相同的，而每次都是只有部分文件被增删或者更改。那么按照一般的做法，直接创建三个各自独立的映像文件，无疑浪费了大量的存储空间，而且映像文件太多也不利于日后的管理。为了解决这个问题，Ximage中包含了一个叫做附加的功能。简单来说，该功能可以在一个映像文件中保存多个不同状态下的操作系统镜像。例如之前设想的情况，将操作系统在三个时候的不同状态全部附加到同一个映像文件中，这样，因为操作系统中有大量三个状态下没有发生任何更改的文件，因此这些文件实际上在映像文件中只需要保存一个实例，这就可以在压缩的基础上更进一步减小映像文件的体积。注意，这里提到了两个名词：&amp;ldquo;映像&amp;rdquo;和&amp;ldquo;镜像&amp;rdquo;。为了方便叙述，下文对这两个名词的定义如下：对操作系统所在分区进行&amp;ldquo;复制&amp;rdquo;创建的文件称之为&amp;ldquo;镜像&amp;rdquo;，而多个&amp;ldquo;镜像&amp;rdquo;附加在一起即形成一个&amp;ldquo;映像&amp;rdquo;。如果已经使用了&amp;ldquo;/append&amp;rdquo;参数，就不需要同时使用&amp;ldquo;/capture&amp;rdquo;了。而后面的&amp;ldquo;d:\data.wim&amp;rdquo;则指定了要被附加的文件所在位置和名称。注意，如果被附加的源映像文件被压缩过，那么附加上去的镜像文件就必须进行同样等级的压缩。)

&amp;nbsp;

&amp;nbsp;

&amp;nbsp;
11.配置文件Ximage的某些选项可以由配置文件指定，这样我们就可以预先编写好配置文件，然后一次执行，实现比较复杂的操作。要指定配置文件，需要以&amp;ldquo;/config&amp;rdquo;参数启动Ximage。配置文件中主要有三个字段，各自的含义如下。[ExclusionList]定义了使用&amp;ldquo;/capture&amp;rdquo;参数后被排除的文件和文件夹名称[CompressionExclusionList]定义了不被压缩的文件或文件夹名称，或者文件类型。这里可以使用通配符[AlignmentList]指定文件以64K为范围排列，这些文件将不会被压缩，而压缩后的文件将会以32K为范围排列。我们只需要在文本编辑器，例如Windows记事本中按照上述规定的字段编写内容，然后将文件保存为.ini格式，就可以在使用ximage.exe的时候通过&amp;ldquo;/config&amp;rdquo;参数调用了。
打开Windows记事本或者其他任何文本编辑器，分别输入[ExclusionList]、[CompressionExclusionList]和[AlignmentList]三个字段，然后按照需要为这三个字段设定内容。例如，如果我们希望在创建映像文件的时候跳过分页文件和休眠文件，那么就可以在[ExclusionList]字段下添加这两个文件的名称： &amp;ldquo;Hiberfil.sys&amp;rdquo;和&amp;ldquo;Pagefile.sys&amp;rdquo;。注意，每个文件要占用一行空间。如果我们希望在压缩文件的时候取消对所有扩展名为.zip 的文件的压缩（毕竟它们已经被压缩过了，再次压缩只能延长所需时间，体积的变化不会太明显），那么可以在 [CompressionExclusionList]字段下添加&amp;ldquo;*.zip&amp;rdquo;这一行内容。
注意：通常情况下，如果要使用配置文件，那么就必须在运行ximage命令的时候使用/config参数，并指定配置文件的位置。但如果我们预先将配置文件以wimscript.ini为名保存在ximage.exe文件所在的文件夹下，那么以后运行的时候只要使用了&amp;ldquo;/capture&amp;rdquo;参数，该配置文件就会被自动加载，而不管我们有没有配合&amp;ldquo;/config&amp;rdquo;参数一起使用
&amp;nbsp;</description><pubDate>Sun, 09 Dec 2007 03:34:00 +0800</pubDate><author>【♂孔雀猪】</author><comments>http://blog.csdn.net/hapeacock/archive/2007/12/09/1925359.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/hapeacock/archive/2007/12/09/1925359.aspx</guid><dc:creator>【♂孔雀猪】</dc:creator><fs:srclink>http://blog.csdn.net/hapeacock/archive/2007/12/09/1925359.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579912/1235704</fs:itemid></item><item><title>多级树集合分裂（SPIHT）算法的过程详解和Matlab实现（5）编码过程——精细扫描</title><link>http://blog.csdn.net/chenyusiyuan/archive/2007/12/09/1925358.aspx</link><wfw:comment>http://blog.csdn.net/chenyusiyuan/comments/1925358.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/chenyusiyuan/comments/commentRss/1925358.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/chenyusiyuan/services/trackbacks/1925358.aspx</trackback:ping><description>&amp;nbsp;本文给出SPIHT编码的精细扫描程序，其中包括一个能够将带小数的十进制数转换为二进制表示的函数，这个转换函数可以实现任意精度的二进制转换，特别是将小数部分转换为二进制表示。希望对有需要的朋友有所帮助。下一篇文章将给出SPIHT的解码程序。请关注后续文章，欢迎 Email 联系交流。4、精细扫描程序function Rn=refinement(N,LSP_Old)% 函数 REFINEMENT()为精细编码程序，对上一级编码产生的重要系数列表LSP_Old，读取每个% 表项相应小波系数绝对值的二进制表示，输出其中第N个重要的位，即相应于 2^N 处的码数% 输入参数：N &amp;mdash;&amp;mdash; 本级编码阈值的指数%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LSP_Old &amp;mdash;&amp;mdash; 上一级编码产生的重要系数列表% 输出参数：Rn &amp;mdash;&amp;mdash; 精细扫描输出位流global Mat% Mat是输入的小波分解系数矩阵，作为全局变量，在编码的相关程序中使用Rn=[];% 每级精细扫描开始时，Rn 均为空表% LSP_Old 非空时才执行精细扫描程序if ~isempty(LSP_Old)&amp;nbsp;&amp;nbsp;&amp;nbsp; rlsp=size(LSP_Old,1);% 获取 LSP_Old 的表项个数，对每个表项进行扫描&amp;nbsp;&amp;nbsp;&amp;nbsp; for r=1:rlsp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tMat=Mat(LSP_Old(r,1),LSP_Old(r,2));% 读取该表项对应的小波系数值&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [biLSP,Np]=fracnum2bin(abs(tMat),N);% 函数 FRACNUM2BIN() 根据精细扫描对应的权位 N ，将任意的十进制正数转换为二进制数，% 输出参数为二进制表示列表 biLSP 和 权位N与最高权位的距离 Np 。&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Rn=[Rn,biLSP(Np)];% biLSP(Np)即为小波系数绝对值的二进制表示中第N个重要的位&amp;nbsp;&amp;nbsp;&amp;nbsp; endend（1）十进制数转换为二进制表示的程序function [binlist,qLpoint]=fracnum2bin(num,qLevel)% 函数 FRACNUM2BIN() 根据精细扫描对应的权位 N ，将任意的十进制正数转换为二进制数，% 包括带有任意位小数的十进制数。Matlab中的函数 dec2bin()、dec2binvec()只能将十% 进制数的整数部分转换为二进制表示，对小数部分则不转换。%% 输入参数：num &amp;mdash;&amp;mdash; 非负的十进制数%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; qLevel &amp;mdash;&amp;mdash; 量化转换精度，也可以是精细扫描对应的权位 N% 输出参数：biLSP &amp;mdash;&amp;mdash; 二进制表示列表%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  Np &amp;mdash;&amp;mdash; 权位N与最高权位的距离，N 也是本级编码阈值的指数intBin=dec2binvec(num);% 首先用Matlab函数dec2binvec()获取整数部分的二进制表示intBin，低位在前，高位在后intBin=intBin(end:-1:1);% 根据个人习惯，将二进制表示转换为高位在前，低位在后lenIB=length(intBin);% 求出二进制表示的长度decpart=num-floor(num);% 求出小数部分decBin=[];% 小数部分的二进制表示初始化为空表% 根据量化精度要求输出总的二进制表示列表if (qLevel+1)&amp;gt;lenIB% 如果量化精度高于整数部分的二进制码长，则输出为零值列表&amp;nbsp;&amp;nbsp;&amp;nbsp; binlist=zeros(1,qLevel+1);&amp;nbsp;&amp;nbsp;&amp;nbsp; qLpoint=1;elseif qLevel&amp;gt;=0% 如果量化精度在整数权位，则输出整数部分的二进制表示intBin% 不需转换小数部分，同时输出量化精度与最高权位的距离Np&amp;nbsp;&amp;nbsp;&amp;nbsp; binlist=intBin;&amp;nbsp;&amp;nbsp;&amp;nbsp; binlist(lenIB-qLevel+1:end)=0;&amp;nbsp;&amp;nbsp;&amp;nbsp; qLpoint=lenIB-qLevel;elseif qLevel&amp;lt;0% 如果量化精度在小数权位，则需转换小数部分&amp;nbsp;&amp;nbsp;&amp;nbsp; N=-1;&amp;nbsp;&amp;nbsp;&amp;nbsp; while N&amp;gt;=qLevel&amp;nbsp;&amp;nbsp;&amp;nbsp; % 小数部分的转换只需进行到量化精度处&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; res=decpart-2^N;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if res==0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; decBin=[decBin,1];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; decBin(end+1:-qLevel)=0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 如果小数部分的转换完成时仍未达到量化精度所在的权位，则补零&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elseif res&amp;gt;0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; decBin=[decBin,1];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; decpart=res;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; N=N-1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; decBin=[decBin,0];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; N=N-1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&amp;nbsp;&amp;nbsp;&amp;nbsp; end&amp;nbsp;&amp;nbsp;&amp;nbsp; binlist=[intBin,decBin];&amp;nbsp;&amp;nbsp;&amp;nbsp; qLpoint=lenIB-qLevel;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 输出整数部分和小数部分的二进制表示intBin,decBin，以及量化精度与最高权位的距离Npend&amp;nbsp;&amp;nbsp;&amp;nbsp; 至此，SPIHT算法的编码程序就介绍完毕啦！以后有时间的话会增加熵编码的功能（例如Huffman编码）。</description><pubDate>Sun, 09 Dec 2007 03:13:00 +0800</pubDate><author>chenyusiyuan</author><comments>http://blog.csdn.net/chenyusiyuan/archive/2007/12/09/1925358.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/chenyusiyuan/archive/2007/12/09/1925358.aspx</guid><dc:creator>chenyusiyuan</dc:creator><fs:srclink>http://blog.csdn.net/chenyusiyuan/archive/2007/12/09/1925358.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579915/1235704</fs:itemid></item><item><title>多级树集合分裂（SPIHT）算法的过程详解和Matlab实现（4）编码过程——排序扫描</title><link>http://blog.csdn.net/chenyusiyuan/archive/2007/12/09/1925357.aspx</link><wfw:comment>http://blog.csdn.net/chenyusiyuan/comments/1925357.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/chenyusiyuan/comments/commentRss/1925357.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/chenyusiyuan/services/trackbacks/1925357.aspx</trackback:ping><description>&amp;nbsp;本文给出SPIHT编码的排序扫描代码，排序扫描分为LIP队列扫描和LIS队列扫描两个步骤，其中LIS队列扫描较为复杂，在编程时容易出现错误，要倍加注意。2、LIP队列扫描程序function [Sn,LSP,LIP]=lip_scan(Sn,N,LSP,LIP)% 函数 LIP_SCAN() 检查LIP表的各个表项是否重要，更新列表LIP、LSP和排序位流 Sn% 输入参数：Sn &amp;mdash;&amp;mdash; 本级编码排序位流，为空表%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; N &amp;mdash;&amp;mdash; 本级编码阈值的指数%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LSP &amp;mdash;&amp;mdash; 上一级编码生成的重要系数列表%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LIP &amp;mdash;&amp;mdash; 上一级编码生成的不重要系数列表% 输出参数：Sn &amp;mdash;&amp;mdash; 对上一级编码生成的LIP列表扫描后更新的排序位流%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LSP &amp;mdash;&amp;mdash; 对上一级编码生成的LIP列表扫描后更新的重要系数列表%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LIP &amp;mdash;&amp;mdash; 经本级LIP扫描处理后更新的不重要系数列表global Mat% Mat是输入的小波分解系数矩阵，作为全局变量，在编码的相关程序中使用rlip=size(LIP,1);% r 是指向 LIP 当前读入表项位置的指针r=1;% 由于循环过程中列表 LIP 的表长会变化，不适合用 for 循环，故采用 while 循环while r&amp;lt;=rlip% 读入当前表项的坐标值&amp;nbsp;&amp;nbsp;&amp;nbsp; rN=LIP(r,1);&amp;nbsp;&amp;nbsp;&amp;nbsp; cN=LIP(r,2);% 调用 SNOUT() 函数来判断该表项是否重要&amp;nbsp;&amp;nbsp;&amp;nbsp; if SnOut(LIP(r,:),N)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 若重要，则输入&amp;lsquo;1&amp;rsquo;到 Sn&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sn=[Sn,1];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 输入正负符号&amp;lsquo;1&amp;rsquo;或&amp;lsquo;0&amp;rsquo;到 Sn&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if Mat(rN,cN)&amp;gt;=0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sn=[Sn,1];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sn=[Sn,0];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 将该表项添加到重要系数列表 LSP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LSP=[LSP;LIP(r,:)];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 将该表项从 LIP 中删除&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LIP(r,:)=[];&amp;nbsp;&amp;nbsp;&amp;nbsp; else&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 若不重要，则输入&amp;lsquo;0&amp;rsquo;到 Sn&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sn=[Sn,0];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 将指针指向下一个表项&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r=r+1;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&amp;nbsp;&amp;nbsp;&amp;nbsp; % 判断当前 LIP 的表长&amp;nbsp;&amp;nbsp;&amp;nbsp; rlip=size(LIP,1);end3、LIS队列扫描程序function [LSP,LIP,LIS,LisFlag,Sn,N]=lis_scan(N,Sn,LSP,LIP,LIS,LisFlag)% 函数 LIS_SCAN() 检查LIS表的各个表项是否重要，更新列表LIP、LSP、LIS、LisFlag和排序位流 Sn% 输入参数：N &amp;mdash;&amp;mdash; 本级编码阈值的指数%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sn &amp;mdash;&amp;mdash; 本级编码排序位流，为空表%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LSP &amp;mdash;&amp;mdash; 上一级编码生成的重要系数列表%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LIP &amp;mdash;&amp;mdash; 上一级编码生成的不重要系数列表%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LIS &amp;mdash;&amp;mdash; 上一级编码生成的不重要子集列表%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LisFlag &amp;mdash;&amp;mdash; 上一级编码生成的不重要子集表项类型列表% 输出参数：LSP &amp;mdash;&amp;mdash; 本级LIS列表扫描后更新的重要系数列表%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LIP &amp;mdash;&amp;mdash; 经本级LIS扫描处理后更新的不重要系数列表%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LIS &amp;mdash;&amp;mdash; 本级LIS列表扫描后更新的不重要子集列表%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LisFlag &amp;mdash;&amp;mdash; 本级LIS列表扫描后更新的不重要子集表项类型列表%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sn &amp;mdash;&amp;mdash; 本级LIS列表扫描后更新的排序位流%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; N &amp;mdash;&amp;mdash; 下一级编码阈值的指数global Mat rMat cMat% Mat是输入的小波分解系数矩阵，作为全局变量，在编码的相关程序中使用% rMat、cMat是Mat的行、列数，作为全局变量，在编码、解码的相关程序中使用% 读入当前 LIS 的表长rlis=size(LIS,1);% ls 是指向 LIS 当前表项位置的指针，初始位置为1ls=1;% 由于循环过程中列表 LIS 的表长会变化，不适合用 for 循环，故采用 while 循环while ls&amp;lt;=rlis&amp;nbsp;&amp;nbsp;&amp;nbsp; % 读入当前 LIS 表项的类型&amp;nbsp;&amp;nbsp;&amp;nbsp; switch LisFlag(ls)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % &amp;lsquo;D&amp;rsquo;类表项，包含孩子和非直系子孙&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 'D'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 读入该表项的坐标值&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rP=LIS(ls,1);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cP=LIS(ls,2);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 生成&amp;lsquo;D&amp;rsquo;型子孙树&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chD=coef_DOL(rP,cP,'D');&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 判断该子孙树是否重要&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; isImt=SnOut(chD,N);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if isImt&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 如果该子孙树重要，就输入&amp;lsquo;1&amp;rsquo;到 Sn&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sn=[Sn,1];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 生成该表项的孩子树&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chO=coef_DOL(rP,cP,'O');&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 分别判断每个孩子的重要性&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for r=1:4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 判断该孩子的重要性和正负符号&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [isImt,Sign]=SnOut(chO(r,:),N);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if isImt&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 如果重要，就输入&amp;lsquo;1&amp;rsquo;和正负标志到 Sn&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sn=[Sn,1];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if Sign&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sn=[Sn,1];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sn=[Sn,0];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 将该孩子添加到重要系数列表 LSP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LSP=[LSP;chO(r,:)];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 如果不重要，就输入&amp;lsquo;0&amp;rsquo;到 Sn&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sn=[Sn,0];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 将该孩子添加到不重要系数列表 LIP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 本级阈值下不重要的系数在下一级编码中可能是重要的&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LIP=[LIP;chO(r,:)];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 生成该表项的非直系子孙树&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chL=coef_DOL(rP,cP,'L');&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ~isempty(chL)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 如果&amp;lsquo;L&amp;rsquo;型树非空，则将该表项添加到列表 LIS 的尾端等待扫描&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LIS=[LIS;LIS(ls,:)];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 表项类型更改为&amp;lsquo;L&amp;rsquo;型&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LisFlag=[LisFlag,'L'];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 至此，该表项的&amp;lsquo;D&amp;rsquo;型LIS扫描结束，在LIS中删除该项及其类型符&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LIS(ls,:)=[];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LisFlag(ls)=[];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 如果&amp;lsquo;L&amp;rsquo;型树为空集&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 则该表项的&amp;lsquo;D&amp;rsquo;型LIS扫描结束，在LIS中删除该项及其类型符&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LIS(ls,:)=[];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LisFlag(ls)=[];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 如果该表项的&amp;lsquo;D&amp;rsquo;型子孙树不重要，就输入&amp;lsquo;0&amp;rsquo;到 Sn&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sn=[Sn,0];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 将指针指向下一个 LIS 表项&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ls=ls+1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 更新当前 LIS 的表长，转入下一表项的扫描&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rlis=size(LIS,1);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 'L'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 对&amp;lsquo;L&amp;rsquo;类表项，不需判断孩子的重要性&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 读入该表项的坐标值&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rP=LIS(ls,1);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cP=LIS(ls,2);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 生成&amp;lsquo;L&amp;rsquo;型子孙树&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chL=coef_DOL(rP,cP,'L');&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 判断该子孙树是否重要&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; isImt=SnOut(chL,N);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if isImt&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 如果该子孙树重要，就输入&amp;lsquo;1&amp;rsquo;到 Sn&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sn=[Sn,1];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 生成该表项的孩子树&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chO=coef_DOL(rP,cP,'O');&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 将该&amp;lsquo;L&amp;rsquo;类表项从 LIS 中删除&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LIS(ls,:)=[];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LisFlag(ls)=[];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 将表项的四个孩子添加到 LIS 的结尾，标记为&amp;lsquo;D&amp;rsquo;类表项&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LIS=[LIS;chO(1:4,:)];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LisFlag(end+1:end+4)='D';&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 如果该子孙树是不重要的，就输入&amp;lsquo;0&amp;rsquo;到 Sn&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sn=[Sn,0];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 将指针指向下一个 LIS 表项&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ls=ls+1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 更新当前 LIS 的表长，转入下一表项的扫描&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rlis=size(LIS,1);&amp;nbsp;&amp;nbsp;&amp;nbsp; endend% 对 LIS 的扫描结束，将本级阈值的指数减1，准备进入下一级编码N=N-1;&amp;nbsp;&amp;nbsp;&amp;nbsp; LIS队列扫描程序中调用的子程序有：

    COEF_DOL() ：根据子孙树的类型'type'来计算点(r,c)的子孙列表；
    SNOUT() ：根据本级阈值指数 N 判断坐标集 coefSet 是否重要；

（1）子孙树生成程序function chList=coef_DOL(r,c,type)% 函数 COEF_DOL() 根据子孙树的类型'type'来计算点(r,c)的子孙列表% 输入参数：r,c &amp;mdash;&amp;mdash; 小波系数的坐标值%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type &amp;mdash;&amp;mdash; 子孙树的类型%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'D'：点(r,c)的所有子孙（包括孩子）%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'O'：点(r,c)的所有孩子%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'L'：点(r,c)的所有非直系子孙，L(r,c)=D(r,c)-O(r,c)% 输出参数：chList &amp;mdash;&amp;mdash; 点(r,c)的'type'型子孙列表global Mat rMat cMat% Mat是输入的小波分解系数矩阵，作为全局变量，在编码的相关程序中使用% rMat、cMat是Mat的行、列数，作为全局变量，在编码、解码的相关程序中使用[Dch,Och]=childMat(r,c);% 函数 CHILDMAT() 返回点(r,c)的'D'型和'O'型子孙列表Lch=setdiff(Dch,Och,'rows');% 根据关系式 L(r,c)=D(r,c)-O(r,c)求出'L'型子孙列表% Matlab函数 SETDIFF(A,B)计算具有相同列数的两个矩阵A、B中，A有而B无的元素集合% 根据输入参数'type'选择输出参数switch type&amp;nbsp;&amp;nbsp;&amp;nbsp; case 'D'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chList=Dch;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 'O'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chList=Och;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 'L'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chList=Lch;endfunction [trAll,trChl]=childMat(trRows,trCols)% 函数 CHILDMAT() 根据输入的坐标值trRows、trCols 输出其全体子孙 trAll，% 其中包括孩子树 trChl；另外，根据算法原理，还要判断子孙树是否全为零，% 若为全零，则trAll、trChl均为空表global Mat rMat cMat% Mat是输入的小波分解系数矩阵，作为全局变量，在编码的相关程序中使用% rMat、cMat是Mat的行、列数，作为全局变量，在编码、解码的相关程序中使用trAll=treeMat(trRows,trCols);% 调用函数 treeMat() 生成该点的子孙树坐标队列trZero=1;% 用变量 trZero 来标记该点是否具有非零子孙rA=size(trAll,1);% 如果子孙树 trAll 中有系数值不为零，则 trZero=0，表示该点具有非零子孙for r=1:rA&amp;nbsp;&amp;nbsp;&amp;nbsp; if Mat(trAll(r,1),trAll(r,2))~=0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; trZero=0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&amp;nbsp;&amp;nbsp;&amp;nbsp; endendif trZero&amp;nbsp;&amp;nbsp;&amp;nbsp; trAll=[];&amp;nbsp;&amp;nbsp;&amp;nbsp; trChl=[];else&amp;nbsp;&amp;nbsp;&amp;nbsp; trChl=trAll(1:4,:);&amp;nbsp;&amp;nbsp;&amp;nbsp; % 函数 treeMat() 输出的全体子孙树 trAll 头四位元素就组成相应的孩子树end&amp;nbsp;&amp;nbsp;&amp;nbsp; 上面调用的函数treeMat() 与EZW算法中使用的程序是一样的，这里就不写出来了，详细代码请参见《嵌入式小波零树（EZW）算法的过程详解和Matlab代码（1）构建扫描次序表》。（2）系数集重要性判别程序function [isImt,Sign]=SnOut(coefSet,N)% 函数 SNOUT() 根据本级阈值指数 N 判断坐标集 coefSet 是否重要 isImt ，对单元素% 的系数集输出该元素的正负符号 Sign 。global Mat% Mat是输入的小波分解系数矩阵，作为全局变量，在编码的相关程序中使用rSet=size(coefSet,1);% 读取坐标集中各元素的系数值for r=1:rSet&amp;nbsp;&amp;nbsp;&amp;nbsp; cMat(r)=Mat(coefSet(r,1),coefSet(r,2));end% 根据系数最大值判断该坐标集是否重要if max(abs(cMat))&amp;gt;=2^N&amp;nbsp;&amp;nbsp;&amp;nbsp; isImt=1;else&amp;nbsp;&amp;nbsp;&amp;nbsp; isImt=0;end% 对单个元素的坐标集，判断该元素的正负符号if cMat(1)&amp;gt;=0&amp;nbsp;&amp;nbsp;&amp;nbsp; Sign=1;else&amp;nbsp;&amp;nbsp;&amp;nbsp; Sign=0;end</description><pubDate>Sun, 09 Dec 2007 03:03:00 +0800</pubDate><author>chenyusiyuan</author><comments>http://blog.csdn.net/chenyusiyuan/archive/2007/12/09/1925357.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/chenyusiyuan/archive/2007/12/09/1925357.aspx</guid><dc:creator>chenyusiyuan</dc:creator><fs:srclink>http://blog.csdn.net/chenyusiyuan/archive/2007/12/09/1925357.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579918/1235704</fs:itemid></item><item><title>DFM Editor</title><link>http://blog.csdn.net/linhanshi/archive/2007/12/09/1925356.aspx</link><wfw:comment>http://blog.csdn.net/linhanshi/comments/1925356.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/linhanshi/comments/commentRss/1925356.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/linhanshi/services/trackbacks/1925356.aspx</trackback:ping><description>&amp;nbsp;DFM Editor allows edit and create Borland Delphi VCL Forms in text and binary format. It is compatible with all Borland Delphi versions (including BDS).
DFM Editor can extracts forms from compiled executables and DLLs (or others Portable Executable files) by its extraction tool.
Syntax highlihting editor, object inspector and object tree view are tools that make work easier.
There's form preview tool available so you can view form in WYSIWYG mode.
DFM Editor can display interesting information about selected Borland Package file and registered classes.

http://www.mitec.cz/Downloads/DFMEdit.zip</description><pubDate>Sun, 09 Dec 2007 02:56:00 +0800</pubDate><author>linhanshi</author><comments>http://blog.csdn.net/linhanshi/archive/2007/12/09/1925356.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/linhanshi/archive/2007/12/09/1925356.aspx</guid><dc:creator>linhanshi</dc:creator><fs:srclink>http://blog.csdn.net/linhanshi/archive/2007/12/09/1925356.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579919/1235704</fs:itemid></item><item><title>多级树集合分裂（SPIHT）算法的过程详解和Matlab实现（3）编码过程——主程序</title><link>http://blog.csdn.net/chenyusiyuan/archive/2007/12/09/1925355.aspx</link><wfw:comment>http://blog.csdn.net/chenyusiyuan/comments/1925355.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/chenyusiyuan/comments/commentRss/1925355.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/chenyusiyuan/services/trackbacks/1925355.aspx</trackback:ping><description>上一篇文章已经详细介绍了SPIHT算法的编码过程，接下来有关编码和解码的部分就直接把代码写出来啦，我的代码里有详细的中文注释，基本上把程序的每个步骤都作了说明，呵呵，利人也利己！1、首先给出编码的主程序function [T,SnList,RnList,ini_LSP,ini_LIP,ini_LIS,ini_LisFlag]=spihtcoding(DecIm,imDim,codeDim)% 函数 SPIHTCODING() 是SPIHT算法的编码主程序% 输入参数：DecIm&amp;nbsp;&amp;nbsp; &amp;mdash;&amp;mdash;小波分解系数矩阵；%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; imDim&amp;nbsp;&amp;nbsp; &amp;mdash;&amp;mdash;小波分解层数；%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; codeDim &amp;mdash;&amp;mdash;编码级数。% 输出参数：T &amp;mdash;&amp;mdash; 初始阈值，T=2^N，N=floor(log2(max{|c(i,j)|}))，c(i,j)为小波系数矩阵的元素%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SnList &amp;mdash;&amp;mdash; 排序扫描输出位流%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RnList &amp;mdash;&amp;mdash; 精细扫描输出位流%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ini_L* &amp;mdash;&amp;mdash; 初始系数（集合）表%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LSP：重要系数表%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LIP：不重要系数表%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LIS：不重要子集表，其中的表项是D型或L型表项的树根点%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LisFlag：LIS中各表项的类型，包括D型和L型两种global Mat rMat cMat% Mat是输入的小波分解系数矩阵，作为全局变量，在编码的相关程序中使用% rMat、cMat是Mat的行、列数，作为全局变量，在编码、解码的相关程序中使用%---------------------------%% ----- Threshold ----- %%---------------------------%Mat=DecIm;MaxMat=max(max(abs(Mat)));N=floor(log2(MaxMat));T=2^N;% 公式：N=floor(log2(max{|c(i,j)|}))，c(i,j)为小波系数矩阵的元素%--------------------------------------%% ----- Output Intialization ----- %%--------------------------------------%SnList=[];RnList=[];ini_LSP=[];ini_LIP=coef_H(imDim);rlip=size(ini_LIP,1);ini_LIS=ini_LIP(rlip/4+1:end,:);rlis=size(ini_LIS,1);ini_LisFlag(1:rlis)='D';% ini_LSP：扫描开始前无重要系数，故LSP=[]；% ini_LIP：所有树根的坐标集，对于N层小波分解，LIP是LL_N,LH_N,HL_N,HH_N 所有%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 系数的坐标集合；%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 函数 COEF_H() 用于计算树根坐标集 H% ini_LIS：初始时，LIS是LH_N,HL_N,HH_N 所有系数的坐标集合；在SPIHT算法中，%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LL_N 没有孩子。% ini_LisFlag：初始时，LIS列表的表项均为D型。%------------------------------------------------%% ----- Coding Input Initialization ------ %%------------------------------------------------%LSP=ini_LSP;LIP=ini_LIP;LIS=ini_LIS;LisFlag=ini_LisFlag;% 将待输出的各项列表存入相应的编码工作列表%--------------------------------%% ----- Coding Loop ------ %%--------------------------------%for d=1:codeDim&amp;nbsp;&amp;nbsp;&amp;nbsp; %------------------------------------------%&amp;nbsp;&amp;nbsp;&amp;nbsp; % ----- Coding Initialization ------- %&amp;nbsp;&amp;nbsp;&amp;nbsp; %------------------------------------------%&amp;nbsp;&amp;nbsp;&amp;nbsp; Sn=[];&amp;nbsp;&amp;nbsp;&amp;nbsp; LSP_Old=LSP;&amp;nbsp;&amp;nbsp;&amp;nbsp; % 每级编码产生的Sn都是独立的，故Sn初始化为空表&amp;nbsp;&amp;nbsp;&amp;nbsp; % 列表LSP_Old用于存储上级编码产生的重要系数列表LSP，作为本级精细扫描的输入&amp;nbsp;&amp;nbsp;&amp;nbsp; %-------------------------------%&amp;nbsp;&amp;nbsp;&amp;nbsp; % ----- Sorting Pass ----- %&amp;nbsp;&amp;nbsp;&amp;nbsp; %-------------------------------%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % ----- LIP Scan -------- %&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %----------------------------%&amp;nbsp;&amp;nbsp;&amp;nbsp; [Sn,LSP,LIP]=lip_scan(Sn,N,LSP,LIP);&amp;nbsp;&amp;nbsp;&amp;nbsp; % 检查LIP表的小波系数，更新列表LIP、LSP和排序位流 Sn&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %-------------------------%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; % ----- LIS Scan ----- %&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %-------------------------%&amp;nbsp;&amp;nbsp;&amp;nbsp; [LSP,LIP,LIS,LisFlag,Sn,N]=lis_scan(N,Sn,LSP,LIP,LIS,LisFlag);&amp;nbsp;&amp;nbsp;&amp;nbsp; % 这里，作为输出的N比作为输入的N少1，即 out_N=in_N-1&amp;nbsp;&amp;nbsp;&amp;nbsp; % 各项输出参数均作为下一编码级的输入&amp;nbsp;&amp;nbsp;&amp;nbsp; %-------------------------------------%&amp;nbsp;&amp;nbsp;&amp;nbsp; % ----- Refinement Pass ----- %&amp;nbsp;&amp;nbsp;&amp;nbsp; %-------------------------------------%&amp;nbsp;&amp;nbsp;&amp;nbsp; Rn=refinement(N+1,LSP_Old);&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; % 精细扫描是在当前阈值T=2^N下，扫描上一编码级产生的LSP，故输入为(N+1,LSP_Old)，&amp;nbsp;&amp;nbsp;&amp;nbsp; % 输出为精细位流 Rn&amp;nbsp;&amp;nbsp;&amp;nbsp; %-----------------------------------%&amp;nbsp;&amp;nbsp;&amp;nbsp; % ----- Output Dataflow ----- %&amp;nbsp;&amp;nbsp;&amp;nbsp; %-----------------------------------%&amp;nbsp;&amp;nbsp;&amp;nbsp; SnList=[SnList,Sn,7];&amp;nbsp;&amp;nbsp;&amp;nbsp; RnList=[RnList,Rn,7];&amp;nbsp;&amp;nbsp;&amp;nbsp; % 数字&amp;lsquo;7&amp;rsquo;作为区分符,区分不同编码级的Rn、Sn位流end&amp;nbsp;&amp;nbsp;&amp;nbsp; 编码主程序中调用到的子程序有：

    COEF_H() ：用于计算树根坐标集 H ，生成初始的LIP队列；
    LIP_SCAN() ：检查LIP表的各个表项是否重要，更新列表LIP、LSP和排序位流 Sn ；
    LIS_SCAN() ：检查LIS表的各个表项是否重要，更新列表LIP、LSP、LIS、LisFlag和排序位流 Sn ；
    REFINEMENT() ：精细扫描编码程序，输出精细位流 Rn 。

（1）下面是计算树根坐标集 H 的程序function lp=coef_H(imDim)% 函数 COEF_H() 根据矩阵的行列数rMat、cMat和小波分解层数imDim来计算树根坐标集 H% 输入参数：imDim &amp;mdash;&amp;mdash; 小波分解层数,也可记作 N% 输出参数：lp &amp;mdash;&amp;mdash; rMat*cMat矩阵经N层分解后，LL_N,LH_N,HL_N,HH_N 所有系数的坐标集合global rMat cMat% rMat、cMat是Mat的行、列数，作为全局变量，在编码、解码的相关程序中使用row=rMat/2^(imDim-1);col=cMat/2^(imDim-1);% row、col是 LL_N,LH_N,HL_N,HH_N 组成的矩阵的行、列数lp=listorder(row,col,1,1);% 因为 LIP 和 LIS 中元素(r,c)的排列顺序与 EZW 零树结构的扫描顺序相同% 直接调用函数 LISTORDER() 即可获得按EZW扫描顺序排列的LIP列表（2）这里调用了函数 LISTORDER() 来获取按EZW扫描顺序排列的LIP列表，以下是该函数的程序代码：function lsorder=listorder(mr,mc,pr,pc)% 函数 LISTORDER() 生成按&amp;lsquo;Z&amp;rsquo;型递归结构排列的坐标列表% 函数递归原理：对一个mr*mc的矩阵，其左上角元素的坐标为(pr,pc)；首先将矩阵按&amp;ldquo;田&amp;rdquo;% 字型分成四个对等的子矩阵，每个子矩阵的行、列数均为mr/2、mc/2，左上角元素的坐标% 从上到下、从左到右分别为(pr,pc)、(pr,pc+mc/2)、(pr+mr/2,pc)、(pr+mr/2,pc+mc/2)。% 把每个子矩阵再分裂成四个矩阵，如此递归分裂下去，直至最小矩阵的行列数等于2，获取最小% 矩阵的四个点的坐标值，然后逐步向上回溯，即可得到按&amp;lsquo;Z&amp;rsquo;型递归结构排列的坐标列表。lso=[pr,pc;pr,pc+mc/2;pr+mr/2,pc;pr+mr/2,pc+mc/2];% 列表lso是父矩阵分裂成四个子矩阵后，各子矩阵左上角元素坐标的集合mr=mr/2;mc=mc/2;% 子矩阵的行列数是父矩阵的一半lm1=[];lm2=[];lm3=[];lm4=[];if (mr&amp;gt;1)&amp;amp;&amp;amp;(mc&amp;gt;1)% 按&amp;lsquo;Z&amp;rsquo;型结构递归&amp;nbsp;&amp;nbsp;&amp;nbsp; ls1=listorder(mr,mc,lso(1,1),lso(1,2));&amp;nbsp;&amp;nbsp;&amp;nbsp; lm1=[lm1;ls1];&amp;nbsp;&amp;nbsp;&amp;nbsp; ls2=listorder(mr,mc,lso(2,1),lso(2,2));&amp;nbsp;&amp;nbsp;&amp;nbsp; lm2=[lm2;ls2];&amp;nbsp;&amp;nbsp;&amp;nbsp; ls3=listorder(mr,mc,lso(3,1),lso(3,2));&amp;nbsp;&amp;nbsp;&amp;nbsp; lm3=[lm3;ls3];&amp;nbsp;&amp;nbsp;&amp;nbsp; ls4=listorder(mr,mc,lso(4,1),lso(4,2));&amp;nbsp;&amp;nbsp;&amp;nbsp; lm4=[lm4;ls4];endlsorder=[lso;lm1;lm2;lm3;lm4];% 四个子矩阵结束递归回溯到父矩阵时，列表lsorder的头四个坐标值为列表lso的元素% 这四个坐标值与后面的各个子矩阵的坐标元素有重叠，故需消去% 当函数输出的列表长度length(lsorder)与矩阵的元素个数mr*mc*4不相等时，% 就说明有坐标重叠发生。len=length(lsorder);lsorder=lsorder(len-mr*mc*4+1:len,:);&amp;nbsp;</description><pubDate>Sun, 09 Dec 2007 02:47:00 +0800</pubDate><author>chenyusiyuan</author><comments>http://blog.csdn.net/chenyusiyuan/archive/2007/12/09/1925355.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/chenyusiyuan/archive/2007/12/09/1925355.aspx</guid><dc:creator>chenyusiyuan</dc:creator><fs:srclink>http://blog.csdn.net/chenyusiyuan/archive/2007/12/09/1925355.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579920/1235704</fs:itemid></item><item><title>ipcc</title><link>http://blog.csdn.net/xwchen/archive/2007/12/09/1925354.aspx</link><wfw:comment>http://blog.csdn.net/xwchen/comments/1925354.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/xwchen/comments/commentRss/1925354.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/xwchen/services/trackbacks/1925354.aspx</trackback:ping><description>IPCCX装完后连接不了LDAP,怎么解决？？
装完了IPCCX, 靠， 直接给我来歌60秒关机， 后面还有LDAP连接问题，我的IPCCX server 可以ping通ccm server, 为什么LDAP会挂呢？？？请问我现在要怎么解决咯？？
IPCCX的LDAP要利用JTAPI到CCM來做連結，你可以去查CCM的ROUTE ROINT看有沒有建立JTAPI的PORT，不然也可以試試REBOOT CCM看問題是否能解決?


    
        
            aganbaby (宝宝干) 
            小试牛刀
            
                
                    
                        
                        
                        
                    
                
            
            UID 4313精华 0积分 583帖子 74金币 119 阅读权限 0注册 2006-9-1状态 离线 
            
            
            
                
                    
                        
                        
                        #3
                        &amp;nbsp; 中 小
                        使用道具&amp;nbsp;&amp;nbsp;
                        发表于 2007-1-23 15:12&amp;nbsp; 资料&amp;nbsp; 个人空间&amp;nbsp; 短消息&amp;nbsp; 加为好友&amp;nbsp; 
                        
                        
                    
                    
                        
                        
                        这个问题我碰到过，60s关机是因为IPCX服务里面的nodemanager服务一直处于starting状态最后导致60s关机，而无法与ldap连接也是因为部分服务起不来的原故，这是因为你的宿主机内存过少，适当的减少虚拟机内存给宿主机就不会出现这个问题了</description><pubDate>Sun, 09 Dec 2007 02:42:00 +0800</pubDate><author>xwchen</author><comments>http://blog.csdn.net/xwchen/archive/2007/12/09/1925354.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/xwchen/archive/2007/12/09/1925354.aspx</guid><dc:creator>xwchen</dc:creator><fs:srclink>http://blog.csdn.net/xwchen/archive/2007/12/09/1925354.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579921/1235704</fs:itemid></item><item><title>SQL Server 2005 Express 远程访问设置</title><link>http://blog.csdn.net/xiongyilong/archive/2007/12/09/1925353.aspx</link><wfw:comment>http://blog.csdn.net/xiongyilong/comments/1925353.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/xiongyilong/comments/commentRss/1925353.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/xiongyilong/services/trackbacks/1925353.aspx</trackback:ping><description>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SQL Server 2005 Express 远程访问设置方法
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 熊义龙
SQL Server 2005 Express 作为微软数据库的低端解决方案，在开发小型应用和WEB应用中有广泛的使用。但是SQL Server 2005 Exrpress在默认安装下只允许本机访问，如何启用网络访问功能就很有必要，现在我简单的介绍一下。
1、&amp;nbsp;确认成功安装SQL Server 2005 Express和 数据库服务已经启动。安装完成后，可以通过随SQL Server 2005 Express一同安装的工具 SQL Server Configuration Manager 查看数据库服务和其他的配置信息。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
上图显示数据库服务已经启用。
2、&amp;nbsp;查看SQL Server Express 2005 网络配置信息（SQL Server 2005 Network Configuration――&amp;gt; Protocols for SQLEXPRESS）。默认的情况下右边列表中的Named Pipes和TCP/IP的状态为Disable，即没有启用。右键点击这两项，在弹出菜单中选中Enable启用这两个协议，如下图。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
3、&amp;nbsp;在TCP/IP协议上双击鼠标，弹出对话框。修改对话框Protocol属性页中的&amp;ldquo;Listen All &amp;rdquo;项设为&amp;ldquo;no&amp;rdquo;。IP Address属性页中，修改你要数据库服务监听的IP地址的属性，修改Enabled属性为Yes，修改TCP Dynamic Ports属性为空，TCP Port项在默认安装下为空，现在修改为我们监听端口1433。修改后的状态如下图所示；
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
4、&amp;nbsp;启动管理工具 ，管理界面如下所示： 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
选中&amp;ldquo;Surface Area Configuration for Services and Connection&amp;rdquo;选项
5、&amp;nbsp;改修改DATA Engine的Remote Connection属性，修改后的属性如下图所示：
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
6、&amp;nbsp;完成以上操作后需要重新启动数据库服务才能使修改生效，下图的操作可以完成数据库服务的重启。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
7、&amp;nbsp;重启后，可以在命令窗口输入如下命令&amp;ldquo;netstat&amp;nbsp;- na&amp;rdquo;命令查看服务器监听的所有端口，如果我们设备的1433端口正在监听，我们启用SQL Server 2005 Express网络操作成功。当然也可以使用telnet 命令来验证数据库操作是否成功。使用netstat命令操作如下图所示。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;</description><pubDate>Sun, 09 Dec 2007 02:38:00 +0800</pubDate><author>xiongyilong</author><comments>http://blog.csdn.net/xiongyilong/archive/2007/12/09/1925353.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/xiongyilong/archive/2007/12/09/1925353.aspx</guid><dc:creator>xiongyilong</dc:creator><fs:srclink>http://blog.csdn.net/xiongyilong/archive/2007/12/09/1925353.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579922/1235704</fs:itemid></item><item><title>FORK()函数的两次返回的具体情况</title><link>http://blog.csdn.net/fatsandwich/archive/2007/12/09/1925352.aspx</link><wfw:comment>http://blog.csdn.net/fatsandwich/comments/1925352.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/fatsandwich/comments/commentRss/1925352.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/fatsandwich/services/trackbacks/1925352.aspx</trackback:ping><description>FORK()函数的两次返回的具体情况
对于fork来说，父子进程共享同一段代码空间，所以给人的感觉好像是有两次返回，其实对于调用 fork的父进程来说，如果fork出来的子进程没有得到调度，那么父进程从fork系统调用返回，同时分析sys_fork知道，fork返回的是子进 程的id。再看fork出来的子进程，由copy_process函数可以看出，子进程的返回地址为ret_from_fork（和父进程在同一个代码点 上返回），返回值直接置为0。所以当子进程得到调度的时候，也从fork返回，返回值为0。 关键注意两点：1.fork返回后，父进程或子进程的执行位置。（首先会将当前进程eax的值做为返回值）2.两次返回的pid存放的位置。（eax中） 进程调用copy_process得到lastpid的值（放入eax中，fork正常返回后，父进程中返回的就是lastpid） 子进程任务状态段tss的eax被设置成0， fork.c 中 p-&amp;gt;tss.eax=0;（如果子进程要执行就需要进程切换，当发生切换时，子进程tss中的eax值就调入eax寄存器，子进程执行时首先会将eax的内容做为返回值） 当子进程开始执行时，copy_process返回eax的值。 fork()后,就是两个任务同时进行,父进程用他的tss,子进程用自己的tss,在切换时,各用各的eax中的值. 所以，&amp;ldquo;一次调用两次返回&amp;rdquo;是2个不同的进程！ 
例子：
int main() { pid_t pid; pid=fork(); if ( pid &amp;lt; 0 ) { fprintf( stderr, &amp;quot;Fork Failed&amp;quot; ); exit( -1 ); } else if ( pid == 0 ) { printf( &amp;quot;child process\\n&amp;quot;); } else { printf( &amp;quot;parent process\\n&amp;quot; ); } return 0; } 这个程序执行为什么总是显示:child process parent process 而不会先是parent 后是child呢? 
答：看这一句：pid＝fork() 当 执行这一句时，当前进程进入fork()运行，此时，fork()内会用一段嵌入式汇编进行系统调用：int 0x80（具体代码可参见内核版本0.11的unistd.h文件的133行_syscall0函数）。这时进入内核根据此前写入eax的系统调用功能号 便会运行sys_fork系统调用。接着，sys_fork中首先会调用C函数find_empty_process产生一个新的进程，然后会调用C函数 copy_process将父进程的内容复制给子进程，但是子进程tss中的eax值赋值为0（这也是为什么子进程中返回0的原因），当赋值完成后， copy_process会返回新进程（该子进程）的pid，这个值会被保存到eax中。这时子进程就产生了，此时子进程与父进程拥有相同的代码空间，程 序指针寄存器eip指向相同的下一条指令地址，当fork正常返回调用其的父进程后，因为eax中的值是新创建的子进程号，所以，fork()返回子进程 号，执行else（pid&amp;gt;0）;当产生进程切换运行子进程时，首先会恢复子进程的运行环境即装入子进程的tss任务状态段，其中的eax值 (copy_process中置为0)也会被装入eax寄存器，所以，当子进程运行时，fork返回的是0执行if(pid==0)。 先显示child process应该和内核机制有关，当fork一个新的进程后都会进行进程的重新调度，此时总是子进程先运行（和进程优先级有关？） &amp;nbsp;</description><pubDate>Sun, 09 Dec 2007 02:35:00 +0800</pubDate><author>fatsandwich</author><comments>http://blog.csdn.net/fatsandwich/archive/2007/12/09/1925352.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/fatsandwich/archive/2007/12/09/1925352.aspx</guid><dc:creator>fatsandwich</dc:creator><fs:srclink>http://blog.csdn.net/fatsandwich/archive/2007/12/09/1925352.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579923/1235704</fs:itemid></item><item><title>Dijit文本输入组件 – 校验，金额，数字，日期 ，时间</title><link>http://blog.csdn.net/huyouheng/archive/2007/12/09/1925351.aspx</link><wfw:comment>http://blog.csdn.net/huyouheng/comments/1925351.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/huyouheng/comments/commentRss/1925351.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/huyouheng/services/trackbacks/1925351.aspx</trackback:ping><description>Dijit文本输入组件对HTML &amp;lt;INPUT type=&amp;quot;text&amp;quot;&amp;gt; 提供了增强的校验，格式化以及本地化等支持。Dijit内部使用两个INPUT元素，一个用于同用户的交互，显示本地化了的文本，另一个则是隐藏的，存储 统一格式的，非本地化的文本，用于同服务器的交互。 
 Dijit文本输入组件包括 
 CurrencyTextBox &amp;ndash; 金额输入 
 NumberTextBox &amp;ndash; 数字输入 
 DateTextBox &amp;ndash; 日期输入 
 TimeTextBox- 时间输入 
 通过重载Dijit文本输入组件的serialize方法，可以实现自定义的格式化，如下例所示，用户输入的日期被格式化为'dd-MM-yyyy'形式 
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;nbsp; &amp;nbsp; dojo.require(&amp;quot;dojo.parser&amp;quot;);&amp;nbsp; &amp;nbsp; dojo.require(&amp;quot;dijit.form.DateTextBox&amp;quot;);&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dojo.declare(&amp;quot;MyDateTextBox&amp;quot;,[dijit.form.DateTextBox], {&amp;nbsp; &amp;nbsp; &amp;nbsp; serialize: function(d, options) {&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return dojo.date.locale.format(d, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {selector:'date', datePattern:'dd-MM-yyyy'}&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; );&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&amp;nbsp; &amp;nbsp;});&amp;nbsp; &amp;nbsp; &amp;lt;/script&amp;gt;&amp;lt;form action=&amp;quot;http://localhost/test/test.jsp&amp;quot;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;input dojoType=&amp;quot;MyDateTextBox&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; name=&amp;quot;mydate&amp;quot; value=&amp;quot;2000-04-22&amp;quot;/&amp;gt;&amp;nbsp; &amp;nbsp; &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;go&amp;quot;/&amp;gt;&amp;lt;/form&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
 反之，当Dijit文本输入组件从服务器端接受数据时，则必须使用标准的JavaScript格式。 
 ValidationTextBox使用在regExp属性中定义的正则表达式对输入值进行校验，以下代码给出一个只接受六位数字的输入框 
&amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;number&amp;quot; &amp;nbsp; &amp;nbsp; value=&amp;quot;000000&amp;quot;&amp;nbsp; &amp;nbsp; dojoType=&amp;quot;dijit.form.ValidationTextBox&amp;quot;&amp;nbsp; &amp;nbsp; regExp=&amp;quot;\d{6}&amp;quot;&amp;nbsp; &amp;nbsp; required=&amp;quot;true&amp;quot;&amp;nbsp; &amp;nbsp; invalidMessage=&amp;quot;Invalid number.&amp;quot;&amp;gt;&amp;nbsp; &amp;nbsp; 
 ValidationTextBox的校验规则还可以通过使用其regExpGen属性动态改变，以下代码给出一个校验规则：在12点之前接受4位数字，12点之后接受5位数字。 
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;nbsp; &amp;nbsp;function after12(constraints){&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var date=new Date();&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(date.getHours() &amp;gt;= 12){&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return &amp;quot;\\d{5}&amp;quot;;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}else{&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return &amp;quot;\\d{4}&amp;quot;;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&amp;lt;/script&amp;gt; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Number2:&amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;number&amp;quot; &amp;nbsp; &amp;nbsp; dojoType=&amp;quot;dijit.form.ValidationTextBox&amp;quot;&amp;nbsp; &amp;nbsp; regExpGen=&amp;quot;after12&amp;quot;&amp;nbsp; &amp;nbsp; required=&amp;quot;true&amp;quot;&amp;nbsp; &amp;nbsp; invalidMessage=&amp;quot;4 digits before noon, 5 digits after then&amp;quot;&amp;gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;go&amp;quot;/&amp;gt;&amp;lt;/form&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
 dijit.form.TextBox是所有dijit文本输入组件的基类，其属性和方法为其所有子类继承 
 属性 
 lowercase &amp;ndash; 是否转换为小写， 缺省为false 
 maxLength &amp;ndash; 最长长度 
 propercase &amp;ndash; 是否转换首字母为大写，缺省为false 
 trim &amp;ndash; 是否去除首尾空格，缺省为false 
 uppercase &amp;ndash; 是否转换为大写， 缺省为false 
 方法 
 String getDisplayedValue() &amp;ndash; 返回显示文本，区别于用于表单提交的文本值 
 setDisplayedValue(/*String*/value) &amp;ndash; 设置显示文本，并触发IncrementalChange 
 setValue(value, /*Boolean, optional*/ priorityChange, /*String, optional*/ formattedValue) &amp;ndash; 设置文本值 
 dijit.form.ValidationTextBox   
 属性 
 constraints &amp;ndash; 校验规则对象，通过JavaScript对象语法进行设置 
 invalidMessage &amp;ndash; 非法输入的错误消息 
 promptMessage &amp;ndash; 提示消息 
 regExp &amp;ndash; 用于校验的正则表达式 
 required &amp;ndash; 是否必须输入，缺省为false 
 扩展点 
 displayMessage(/*String*/ message)  - 用于浮动提示信息 
 String getErrorMessage(/* Boolean*/ isFocused)  - 获取错误信息 
 String getPromptMessage(/* Boolean*/ isFocused)  - 获取提示信息 
 Boolean isValid(/* Boolean*/ isFocused)  - 设置校验规则 
 String regExpGen(/* Object */constraints)  - 动态设定校验正则表达式 
 dijit.form.DateTextBox, dijit.form.TimeTextBox 
 属性 
 clickableIncrement  - ISO-8601字符串，用于定义递增的时间值，例如&amp;quot;T00:15:00&amp;quot;为15分钟，该数值必须能够被visibleIncrement整除 
 value  - 当前输入的日期/时间值，可以是Javascript的Date对象，也可是ISO-8601字符串并根据当前时区调整。 
 visibleIncrement  - ISO-8601字符串，用于设置可见的时间间隔 
 visibleRange 	- ISO-8601 字符串，定义可显示的时间范围 
 扩展点 
 Integer compare(/* Object */val1, /* Object */val2)  - 自定义对象比较函数 
 Boolean isInRange(/* Boolean*/ isFocused)  - 是否在允许范围之内 
 dijit.form.NumberTextBox 
 扩展点 
 Integer compare(/* Object */val1, /* Object */val2)  - 自定义对象比较函数 
 Boolean isInRange(/* Boolean*/ isFocused)  - 是否在允许范围之内 
 dijit.form.CurrencyTextBox 
 属性 
 currency 	- ISO4217字符串-金额代码 
 扩展点 
 Integer compare(/* Object */val1, /* Object */val2)  - 自定义对象比较函数 
 Boolean isInRange(/* Boolean*/ isFocused)  - 是否在允许范围之内 
 输入操作 
 改变输入焦点到上一个组件 &amp;ndash; Tab 
 改变输入焦点到下一个组件 &amp;ndash; Shift+Tab 
 提交表单 &amp;ndash; 回车 
 取消当前输入 &amp;ndash; Esc 
点击这里看运行效果。&amp;nbsp;</description><pubDate>Sun, 09 Dec 2007 02:31:00 +0800</pubDate><author>客家女婿</author><comments>http://blog.csdn.net/huyouheng/archive/2007/12/09/1925351.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/huyouheng/archive/2007/12/09/1925351.aspx</guid><dc:creator>客家女婿</dc:creator><fs:srclink>http://blog.csdn.net/huyouheng/archive/2007/12/09/1925351.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579924/1235704</fs:itemid></item><item><title>Dijit Textarea – 自适应大小的文本编辑框</title><link>http://blog.csdn.net/huyouheng/archive/2007/12/09/1925350.aspx</link><wfw:comment>http://blog.csdn.net/huyouheng/comments/1925350.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/huyouheng/comments/commentRss/1925350.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/huyouheng/services/trackbacks/1925350.aspx</trackback:ping><description>Dijit Textarea 根据当前输入的文本自动调整编辑框的高度，编辑框宽度则通过使用css 风格定义，示例代码如下 
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;nbsp; &amp;nbsp; dojo.require(&amp;quot;dojo.parser&amp;quot;);&amp;nbsp; &amp;nbsp; dojo.require(&amp;quot;dijit.form.Textarea&amp;quot;);&amp;lt;/script&amp;gt;&amp;lt;div dojoType=&amp;quot;dijit.form.Textarea&amp;quot; &amp;nbsp; &amp;nbsp; style=&amp;quot;width:300px&amp;quot;&amp;gt;&amp;nbsp; &amp;nbsp; Typing here...&amp;lt;/div&amp;gt;&amp;nbsp; 
 输入操作 
 改变输入焦点到上一个组件 &amp;ndash; Tab 
 改变输入焦点到下一个组件 &amp;ndash; Shift+Tab 
 增加一行 &amp;ndash; 回车 
 取消当前输入 &amp;ndash; Esc 
点击这里看运行效果。&amp;nbsp;</description><pubDate>Sun, 09 Dec 2007 02:30:00 +0800</pubDate><author>客家女婿</author><comments>http://blog.csdn.net/huyouheng/archive/2007/12/09/1925350.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/huyouheng/archive/2007/12/09/1925350.aspx</guid><dc:creator>客家女婿</dc:creator><fs:srclink>http://blog.csdn.net/huyouheng/archive/2007/12/09/1925350.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579925/1235704</fs:itemid></item><item><title>Dijit Slider - 滑块输入组件</title><link>http://blog.csdn.net/huyouheng/archive/2007/12/09/1925349.aspx</link><wfw:comment>http://blog.csdn.net/huyouheng/comments/1925349.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/huyouheng/comments/commentRss/1925349.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/huyouheng/services/trackbacks/1925349.aspx</trackback:ping><description>Dijit Slider组件提供了一个可以上下/左右托动的滑块输入组件，可应用于在给定范围内进行选择，示例代码如下： 
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;nbsp; &amp;nbsp; dojo.require(&amp;quot;dojo.parser&amp;quot;);&amp;nbsp; &amp;nbsp; dojo.require(&amp;quot;dijit.form.Slider&amp;quot;);&amp;lt;/script&amp;gt;&amp;lt;div id=&amp;quot;horizontalSlider&amp;quot; &amp;nbsp; &amp;nbsp; dojoType=&amp;quot;dijit.form.HorizontalSlider&amp;quot;&amp;nbsp; &amp;nbsp; value=&amp;quot;5&amp;quot; minimum=&amp;quot;-10&amp;quot; maximum=&amp;quot;10&amp;quot; &amp;nbsp; &amp;nbsp; discreteValues=&amp;quot;11&amp;quot;&amp;nbsp; &amp;nbsp; intermediateChanges=&amp;quot;true&amp;quot;&amp;nbsp; &amp;nbsp; showButtons=&amp;quot;true&amp;quot;&amp;nbsp; &amp;nbsp; style=&amp;quot;width:250px&amp;quot;&amp;gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;ol dojoType=&amp;quot;dijit.form.HorizontalRuleLabels&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; container=&amp;quot;topDecoration&amp;quot;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; style=&amp;quot;height:1em;font-size:75%;color:gray;&amp;quot;&amp;gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;li&amp;gt; &amp;lt;/li&amp;gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;li&amp;gt;25%&amp;lt;/li&amp;gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;li&amp;gt;50%&amp;lt;/li&amp;gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;li&amp;gt;75%&amp;lt;/li&amp;gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;li&amp;gt; &amp;lt;/li&amp;gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/ol&amp;gt;&amp;nbsp; &amp;nbsp; &amp;lt;div dojoType=&amp;quot;dijit.form.HorizontalRule&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; container=&amp;quot;bottomDecoration&amp;quot;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; count=5 style=&amp;quot;height:5px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;nbsp; 
 滑块可以是水平的（dijit.form.HorizontalSlider），也可以是垂直的（dijit.form.VerticalSlider），HorizontalSlider和VerticalSlider有相同的API.  
 通过定义dijit.form.HorizontalRuleLabels和dijit.form.HorizontalRule，可以给滑块增加标尺和自定义标签。 
 属性 
 clickSelect &amp;ndash; 点击进度条是否改变输入值 
 discreteValues -  最大间隔数 
 intermediateChanges &amp;ndash; 是否即时触发onChange事件 
 maximum &amp;ndash; 最大允许值 
 minimum &amp;ndash; 最小允许值 
 pageIncrement &amp;ndash; 按下shift+arrow时的变化量 
 showButtons &amp;ndash; 是否在滑动条末端显示增/减按钮 
 方法 
 setValue((/*Number*/ value, /*Boolean, optional*/ priorityChange)  - 设置输入值，当priorityChange为真时，显示动画效果 
 dijit.form.HorizontalRule, dijit.form.VerticalRule - 标尺 
属性
 container &amp;ndash; 容器节点 
 count &amp;ndash; 标尺数量 
 dijit.form.HorizontalRule, dijit.form.VerticalRule - 标尺 
属性
 labels &amp;ndash; 标签数组 
 labelStyle - 标签css风格 
点击这里看运行效果。&amp;nbsp;</description><pubDate>Sun, 09 Dec 2007 02:29:00 +0800</pubDate><author>客家女婿</author><comments>http://blog.csdn.net/huyouheng/archive/2007/12/09/1925349.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/huyouheng/archive/2007/12/09/1925349.aspx</guid><dc:creator>客家女婿</dc:creator><fs:srclink>http://blog.csdn.net/huyouheng/archive/2007/12/09/1925349.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579926/1235704</fs:itemid></item><item><title>COM+学习笔记</title><link>http://blog.csdn.net/zhongjinting/archive/2007/12/09/1925348.aspx</link><wfw:comment>http://blog.csdn.net/zhongjinting/comments/1925348.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/zhongjinting/comments/commentRss/1925348.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/zhongjinting/services/trackbacks/1925348.aspx</trackback:ping><description>&amp;nbsp;1.&amp;nbsp; COM+是无状态的，各种中间数据在重新启动之后便会丢失。
2.&amp;nbsp; 尽管可以使用私有变量传递属性的数据，但是出现数据丢失的情形。该接口中有两个属性，多次交替给属性赋值之后，返回的属性值出现错误，错误原因待查。
3.&amp;nbsp; 进程内服务器程序的宿主程序是位于system32下的dllhost.dll，因此，如果不指明路径的话，当前工作目录就是system32目录。
4.&amp;nbsp; COM+为了照顾兼容性，数据类型有限，不能使用TObject等class类型，可以使用Record类型，对于简单的应用则可以用它来传递结构性数据。
5.&amp;nbsp; 可以使用SharedProperty来保存共享数据，在OnActivate过程中建立SharedPropertyGroup，添加适当的SharedProperty，然后在其它过程中根据PropertyByName or PropertyByPosition来取得数据。在OnDeactivate过程中释放SharedPropertyGroup变量。
6.&amp;nbsp; 瑞星2008对COM+应用的部署有很大的影响，在一台没有防火墙的电脑上试验时，曾经遇到unable to create process错误，关闭实时监控之后，一切正常。</description><pubDate>Sun, 09 Dec 2007 02:23:00 +0800</pubDate><author>zhongjinting</author><comments>http://blog.csdn.net/zhongjinting/archive/2007/12/09/1925348.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/zhongjinting/archive/2007/12/09/1925348.aspx</guid><dc:creator>zhongjinting</dc:creator><fs:srclink>http://blog.csdn.net/zhongjinting/archive/2007/12/09/1925348.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579927/1235704</fs:itemid></item><item><title>在JBOSS AS里安装JBOSSWS</title><link>http://blog.csdn.net/totogogo/archive/2007/12/09/1925347.aspx</link><wfw:comment>http://blog.csdn.net/totogogo/comments/1925347.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/totogogo/comments/commentRss/1925347.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/totogogo/services/trackbacks/1925347.aspx</trackback:ping><description>在目前最新版本JBOSS AS 4.2.2&amp;nbsp;G.A. or JBOSS AS 5.0&amp;nbsp;Beta里都已经缺省安装了jbossws，但有时你可能希望update 最新的jbossws到jboss as，就需要你手动安装。安装步骤非常简单：
Step 1: 下载最新的JBOSSWS from http://labs.jboss.com/portal/jbossws/downloads
Step 2: 下载的ZIP里就包含了安装文档（docs/Install.txt），下面的安装步骤就是翻译该文档。可能之后安装步骤会有所不同，一切以docs/Install.txt的安装方法为准
Step 3: 准备好你的ANT
Step 4: 修改根目录下的ant.properties file：&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1）修改JBOSS HOME PATH (例如：jboss422_home=d:/jboss-4.2.2)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2）修改jbossws.integration.target属性值，该值取决于你使用的JBOSS AS的版本，我是使用JBOSS AS 4.2.2 G.A。，所以我设置该值为&amp;ldquo;jboss422&amp;rdquo;
step5: 在DOS窗口执行下列三个命令的其中一个（取决于你的JBOSS AS的版本）：&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ant deploy-jboss500&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ant deploy-jboss422&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ant deploy-jboss405</description><pubDate>Sun, 09 Dec 2007 02:09:00 +0800</pubDate><author>tomsonxu</author><comments>http://blog.csdn.net/totogogo/archive/2007/12/09/1925347.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/totogogo/archive/2007/12/09/1925347.aspx</guid><dc:creator>tomsonxu</dc:creator><fs:srclink>http://blog.csdn.net/totogogo/archive/2007/12/09/1925347.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579928/1235704</fs:itemid></item><item><title>[DOS][NET]使用route命令解决一机双网访问</title><link>http://blog.csdn.net/szwangdf/archive/2007/12/09/1925346.aspx</link><wfw:comment>http://blog.csdn.net/szwangdf/comments/1925346.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/szwangdf/comments/commentRss/1925346.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/szwangdf/services/trackbacks/1925346.aspx</trackback:ping><description>使用route命令解决一机双网访问

经常遇到一台计算机要同时访问两个网络（一个是互联网，一个是企业内部网）的要求 
以本单位为例：地址是虚构的^_^ 
机器有两块网卡，接到两台交换机上 
internet地址：218.22.123.123，子网掩码：255.255.255.0，网关：218.22.123.254 
企业内部网地址：10.128.123.123，子网掩码：255.255.255.0，网关：10.128.123.254 
如果按正常的设置方法设置每块网卡的ip地址和网关，再cmd下使用route print查看时会看到 
Network Destination Netmask Gateway Interface Metric 
0.0.0.0 0.0.0.0 218.22.123.254 218.22.123.123 20 
0.0.0.0 0.0.0.0 10.128.123.254 10.128.123.123 1 
即指向0.0.0.0的有两个网关，这样就会出现路由冲突，两个网络都不能访问。要实现同时访问两个网络就要用到route命令 
第一步：route delete 0.0.0.0 &quot;删除所有0.0.0.0的路由&quot; 
第二步：route add 0.0.0.0 mask 0.0.0.0 218.22.123.254 &quot;添加0.0.0.0网络路由&quot; 
第三步：route add 10.0.0.0 mask 255.0.0.0 10.128.123.254 &quot;添加10.0.0.0网络路由&quot; 
这时就可以同时访问两个网络了，但碰到一个问题，使用上述命令添加的路由在系统重新启动后会自动丢失，怎样保存现有的路由表呢？ 
在win2000 下可以使用route add -p 添加静态路由，即重启后，路由不会丢失。注意使用前要在tcp/ip设置里去掉接在企业内部网的网卡的网关 
在win98下没有－p 参数，可以把以上命令存入到一个.bat文件中，然后在启动时调用即可</description><pubDate>Sun, 09 Dec 2007 02:01:00 +0800</pubDate><author>逐浪</author><comments>http://blog.csdn.net/szwangdf/archive/2007/12/09/1925346.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/szwangdf/archive/2007/12/09/1925346.aspx</guid><dc:creator>逐浪</dc:creator><fs:srclink>http://blog.csdn.net/szwangdf/archive/2007/12/09/1925346.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579929/1235704</fs:itemid></item><item><title>hibernate的一个批处理问题！</title><link>http://blog.csdn.net/totogogo/archive/2007/12/09/1925345.aspx</link><wfw:comment>http://blog.csdn.net/totogogo/comments/1925345.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/totogogo/comments/commentRss/1925345.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/totogogo/services/trackbacks/1925345.aspx</trackback:ping><description>执行下列代码：=====================================================Session session=sessionFactory.openSession();
//add a vote with active=falseTransaction tx = session.beginTransaction();VoteQuestion vote=new VoteQuestion();vote.setText(&amp;quot;test&amp;quot;);vote.setActive(false);session.save(vote);tx.commit();int voteId=vote.getId().intValue();
//批处理：set all vote active=truetx = session.beginTransaction();Query query = session.createQuery(&amp;quot;update VoteQuestion v set v.active=:isActive&amp;quot;);query.setBoolean(&amp;quot;isActive&amp;quot;, true);query.executeUpdate();tx.commit();
//重新获取刚才添加的vote来check active，如果=true，表示上面的批处理成功VoteQuestion updateVote=getVote(voteId);System.out.println(updateVote.isActive());
session.close();=====================================================
执行上面代码，输出的应该是true，但实际输出的为false！！
如果我们的代码改一下：=====================================================。。。。。
//批处理：set all vote active=truetx = session.beginTransaction();Query query = session.createQuery(&amp;quot;update VoteQuestion v set v.active=:isActive&amp;quot;);query.setBoolean(&amp;quot;isActive&amp;quot;, true);query.executeUpdate();tx.commit();
//比上面的代码只多了下面2行session.close();session=sessionFactory.openSession();
//重新获取刚才添加的vote来check active，如果=true，表示上面的批处理成功VoteQuestion updateVote=getVote(voteId);System.out.println(updateVote.isActive());
session.close();=====================================================
如果我们在批处理之后close session，然后再新开一个session来获取update vote，则输出就是true，BINGO！！这说明在同一个session里，批处理操作在session close之前不会更新，即使tx.commit！！（呵呵，这样解释觉得怪怪的，但一时想不到更好的）
但如果每次批处理都要先关闭session，再开一个新session，也不是很好，更完美的解决方法是使用session.flush and session clear（好像两个方法都要调用）
=====================================================。。。。。
//批处理：set all vote active=truetx = session.beginTransaction();Query query = session.createQuery(&amp;quot;update VoteQuestion v set v.active=:isActive&amp;quot;);query.setBoolean(&amp;quot;isActive&amp;quot;, true);query.executeUpdate();
//比最初的代码只多了下面2行session.flush();session.clear();
tx.commit();
//重新获取刚才添加的vote来check active，如果=true，表示上面的批处理成功VoteQuestion updateVote=getVote(voteId);System.out.println(updateVote.isActive());
session.close();=====================================================&amp;nbsp;</description><pubDate>Sun, 09 Dec 2007 02:00:00 +0800</pubDate><author>tomsonxu</author><comments>http://blog.csdn.net/totogogo/archive/2007/12/09/1925345.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/totogogo/archive/2007/12/09/1925345.aspx</guid><dc:creator>tomsonxu</dc:creator><fs:srclink>http://blog.csdn.net/totogogo/archive/2007/12/09/1925345.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579930/1235704</fs:itemid></item><item><title>调试心得</title><link>http://blog.csdn.net/xiexueming/archive/2007/12/09/1925344.aspx</link><wfw:comment>http://blog.csdn.net/xiexueming/comments/1925344.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/xiexueming/comments/commentRss/1925344.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/xiexueming/services/trackbacks/1925344.aspx</trackback:ping><description>1.在调试时出现unresolved&amp;nbsp;external&amp;nbsp;symbol&amp;nbsp;_WinMain@16这种错误,其中主要原因是:

1)，&amp;nbsp;用vc建了一个控制台程序，它的入口函数应该是main,&amp;nbsp;而你使用了WinMain.

2).&amp;nbsp;&amp;nbsp;用vc打开了一个.c/.cpp&amp;nbsp;文件，然后直接编译这个文件，这个文件中使用了WinMian而不是main作为入口函数。vc这时的默认设置是针对控制台程序的。


解决方法
1).进入project-&amp;gt;setting-&amp;gt;c/c++,&amp;nbsp;在category中选择preprocessor,在processor&amp;nbsp;definitions中删除_WINDOWS,&amp;nbsp;添加_CONSOLE

2).进入project-&amp;gt;setting-&amp;gt;Link,&amp;nbsp;在Project&amp;nbsp;options中将/subsystem:windows.改为/subsystem:console

3).保存设置，Rebuild&amp;nbsp;All.&amp;nbsp;&amp;nbsp;

2.出现error&amp;nbsp;C2447:&amp;nbsp;missing&amp;nbsp;function&amp;nbsp;header&amp;nbsp;(old-style&amp;nbsp;formal&amp;nbsp;list?)&amp;nbsp;这样的错误.
原因是:&amp;nbsp;&amp;nbsp;函数头定义的那行后面加了分号.去掉分号就好了.
&amp;nbsp;</description><pubDate>Sun, 09 Dec 2007 01:54:00 +0800</pubDate><author>xiexueming</author><comments>http://blog.csdn.net/xiexueming/archive/2007/12/09/1925344.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/xiexueming/archive/2007/12/09/1925344.aspx</guid><dc:creator>xiexueming</dc:creator><fs:srclink>http://blog.csdn.net/xiexueming/archive/2007/12/09/1925344.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579931/1235704</fs:itemid></item><item><title>豪网沪陵科技诚征代理加盟</title><link>http://blog.csdn.net/haoiis/archive/2007/12/09/1925343.aspx</link><wfw:comment>http://blog.csdn.net/haoiis/comments/1925343.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/haoiis/comments/commentRss/1925343.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/haoiis/services/trackbacks/1925343.aspx</trackback:ping><description>豪网沪陵科技诚征代理加盟
代理级别：
金牌代理&amp;nbsp; 预付款 5000元&amp;nbsp; 100M空间 50元/年&amp;nbsp; .com域名&amp;nbsp; 53元/年&amp;nbsp; .cn域名 48元/年
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 银牌代理&amp;nbsp; 预付款 3000元&amp;nbsp; 100M空间 15元/年&amp;nbsp; .com域名&amp;nbsp; 53元/年&amp;nbsp; .cn域名 48元/年
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 铜牌代理&amp;nbsp; 预付款 1500元&amp;nbsp; 100M空间 18元/年&amp;nbsp; .com域名&amp;nbsp; 53元/年&amp;nbsp; .cn域名 50元/年
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 创业代理&amp;nbsp; 预付款 500元&amp;nbsp;&amp;nbsp; 100M空间 24元/年&amp;nbsp; .com域名&amp;nbsp; 54元/年&amp;nbsp; .cn域名 52元/年
帮您实现创业梦想成就IT巨子&amp;nbsp; www.haoiis.com
&amp;nbsp;
成为我们的代理后，您将拥有和我们一样的网络平台
&amp;nbsp;
您的下级用户将通过您的网站平台在线购买各项产品
&amp;nbsp;
这将会给您带来一个很大的利润空间，从而实现您的创业梦想。
&amp;nbsp;
豪网沪陵科技真诚期待与您的合作|欢迎网络朋友加入豪网沪陵科技的代理团队中|
&amp;nbsp;
在这里您可以得到无穷的乐趣！加盟豪网沪陵科技www.haoiis.com|豪网精彩
&amp;nbsp;</description><pubDate>Sun, 09 Dec 2007 01:52:00 +0800</pubDate><author>haoiis</author><comments>http://blog.csdn.net/haoiis/archive/2007/12/09/1925343.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/haoiis/archive/2007/12/09/1925343.aspx</guid><dc:creator>haoiis</dc:creator><fs:srclink>http://blog.csdn.net/haoiis/archive/2007/12/09/1925343.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579932/1235704</fs:itemid></item><item><title>Apache Axis用户指南(2)</title><link>http://blog.csdn.net/sunjavaduke/archive/2007/12/09/1925342.aspx</link><wfw:comment>http://blog.csdn.net/sunjavaduke/comments/1925342.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/sunjavaduke/comments/commentRss/1925342.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/sunjavaduke/services/trackbacks/1925342.aspx</trackback:ping><description>&amp;nbsp;
本部分是apache axis用户指南的第二部分。
5.服务Styles---RPC,Document,Wrapped和消息
Axis支持四种样式的服务。
RPC服务使用SOAP RPC惯例和SOAP section 5的编码。Document服务部使用任何编码方式(所以，不会看到多饮用的对象序列化或者SOAP-style数组)，但是使用XML&amp;lt;--&amp;gt;Java数据绑定。Wrapped服务和document服务相似，但是Wrapped服务不是将整个SOAPbody绑定到一个大的结构，而是将它分成很多个体参数。Message服务接受和返回任意SOAP Envelope中的XML，并不进行类型映射和数据绑定。
如果只想使用原始的XML作为SOAP Envelope的输入和输出，那么就是用message服务。
RFC服务
RFC服务是Axis的默认服务。它们在部署描述符中的定义为&amp;lt;service....provider=&amp;rdquo;java:RPC&amp;rdquo;&amp;gt;或者&amp;lt;service....style=&amp;rdquo;RPC&amp;rdquo;&amp;gt;。RPC服务遵循SOAP RPC和编码规则，这意味着RPC服务的XML就像上面的echoString例子一样，每个RPC调用都作为操作名，包含的内部元素对应操作的参数。Axis会将XML反序列化成Java对象来适应服务，然后再将返回的Java对象进行序列化成XML返回。由于RPC服务默认使用soap section 5比阿玛规则，对象会通过multi-ref序列化，允许对对象图表进行编码。
Document/Wrapped服务
这两种服务很类似，都不对数据进行SOAP编码，而只是简单的XML Schema。在这两种情况中，Axis仍然对java表示与XML进行绑定，所以只需要处理Java对象，而不是直接处理XML结构。
下面是一个关于购买顺序的SOAP消息，用来说明两者的区别：
&amp;lt;soap:Envelope xmlns=&amp;quot;http://xml.apache.org/axis/wsdd/&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns:java=&amp;quot;http://xml.apache.org/axis/wsdd/providers/java&amp;quot;&amp;gt;
&amp;nbsp;&amp;lt;soap:Body&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;myNS:PurchaseOrder xmlns:myNS=&amp;quot;http://commerce.com/PO&amp;quot;&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;item&amp;gt;SK001&amp;lt;/item&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;quantity&amp;gt;1&amp;lt;/quantity&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;description&amp;gt;Sushi Knife&amp;lt;/description&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/myNS:PurchaseOrder&amp;gt;
&amp;nbsp;&amp;lt;/soap:Body&amp;gt;
&amp;lt;/soap:Envelope&amp;gt;
PurchaseOrder元素的Schema如下：
&amp;lt;schema targetNamespace=&amp;quot;http://commerce.com/PO&amp;quot;&amp;gt;
&amp;nbsp;&amp;lt;complexType name=&amp;quot;POType&amp;quot;&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;sequence&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;element name=&amp;quot;item&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;element name=&amp;quot;quantity&amp;quot; type=&amp;quot;xsd:int&amp;quot;/&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;element name=&amp;quot;description&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/sequence&amp;gt;
&amp;nbsp;&amp;lt;/complexType&amp;gt;
&amp;nbsp;&amp;lt;element name=&amp;quot;PurchaseOrder&amp;quot; type=&amp;quot;POType&amp;quot;/&amp;gt;
&amp;lt;/deployment&amp;gt;
对于Document样式的服务，将会映射到一个如下的方法：
public void method(PurchaseOrder po)
也就是说，整个&amp;lt;PurchaseOrder&amp;gt;元素作为方法的一个单独的bean对象参数，这个Bean类应该有三个成员属性。而对于wrapped样式的服务来说，将会映射到如下的方法：
public void purchaseOrder(String item,int quality,String description)
注意在这种情况的大小写，&amp;lt;PurchaseOrder&amp;gt;元素是一个&amp;rdquo;wrapper&amp;rdquo;，只处理正确的操作。方法的参数就是unwrap外层元素后的每一个内层元素。
document或者wrapped样式的定义是在WSDD中定义的：
&amp;lt;service ... style=&amp;quot;document&amp;quot;&amp;gt; for document style
&amp;lt;service ... style=&amp;quot;wrapped&amp;quot;&amp;gt; for wrapped style
当使用WSDL文档创建Web Service的时候，就不需要担心到底是哪种服务了。
Message服务
最后是Message样式的服务，当需要使Axis无效，将代码作为实际的XML查看而不是java对象的时候，就使用这种服务。
下面是四的message-style服务的方法的合法信号
public Element [] method(Element [] bodies);
public SOAPBodyElement [] method (SOAPBodyElement [] bodies);
public Document method(Document body);
public void method(SOAPEnvelope req, SOAPEnvelope resp);
前两个将方法的数组传给方法DOM元素或者SOAPBody元素的数组-----这个数组包含&amp;lt;soap:body&amp;gt;中的每一个XML元素。
第三个方法传递一个DOM文档，这个文档表示&amp;lt;soap:body&amp;gt;，并期望同样的返回。
最后一个传递两个SOAPEnvelope对象来表示请求和响应消息，这意味着可以在服务方法中查看或者修改headers。
Message样例
在Axis的例子中，samples\message\MessageService.java就是一个Message服务的例子，服务的类是MessageService，包含一个公开方法，echoElement，符合上述中的第一个方法：
public Element[] echoElements(Element[] elems)
MsgProvider是一个handler，它调用echoElement()方法，传递一个org.w3c.dom.Element的数组作为参数，作为输入信息的SOAPbody的直接子元素。一般来说，这个数组会包含一个单独的Element(可能是一个XML文档的根元素)，但是SOAP Body可以处理任意多个子元素。这个方法返回一个Element[]数组作为响应消息的SOAP Body。
package samples.message ;
&amp;nbsp;
import org.w3c.dom.Element;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.Name;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPBodyElement;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPElement;
&amp;nbsp;
/**
&amp;nbsp;* Simple message-style service sample.
&amp;nbsp;*/
public class MessageService {
&amp;nbsp;&amp;nbsp;&amp;nbsp; /**
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Service method, which simply echoes back any XML it receives.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @param elems an array of DOM Elements, one for each SOAP body element
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @return an array of DOM Elements to be sent in the response body
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */
&amp;nbsp;&amp;nbsp;&amp;nbsp; public Element[] echoElements(Element [] elems) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return elems;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public void process(SOAPEnvelope req, SOAPEnvelope resp) throws javax.xml.soap.SOAPException {
&amp;nbsp;&amp;nbsp;&amp;nbsp; SOAPBody body = resp.getBody();
&amp;nbsp;&amp;nbsp;&amp;nbsp; Name ns0 =&amp;nbsp;resp.createName(&amp;quot;TestNS0&amp;quot;, &amp;quot;ns0&amp;quot;, &amp;quot;http://example.com&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp; Name ns1 =&amp;nbsp;resp.createName(&amp;quot;TestNS1&amp;quot;, &amp;quot;ns1&amp;quot;, &amp;quot;http://example.com&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp; SOAPElement bodyElmnt = body.addBodyElement(ns0);
&amp;nbsp;&amp;nbsp;&amp;nbsp; SOAPElement el = bodyElmnt.addChildElement(ns1);
&amp;nbsp;&amp;nbsp;&amp;nbsp; el.addTextNode(&amp;quot;TEST RESPONSE&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
}
MessageService的WSDD文件内容如下：
&amp;lt;deployment name=&amp;quot;test&amp;quot; xmlns=&amp;quot;http://xml.apache.org/axis/wsdd/&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns:java=&amp;quot;http://xml.apache.org/axis/wsdd/providers/java&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns:xsi=&amp;quot;http://www.w3.org/2000/10/XMLSchema-instance&amp;quot;&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;service name=&amp;quot;MessageService&amp;quot; style=&amp;quot;message&amp;quot;&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;parameter name=&amp;quot;className&amp;quot; value=&amp;quot;samples.message.MessageService&amp;quot;/&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;parameter name=&amp;quot;allowedMethods&amp;quot; value=&amp;quot;echoElements&amp;quot;/&amp;gt;
&amp;nbsp;&amp;lt;/service&amp;gt;
&amp;lt;/deployment&amp;gt;
注意这里使用的是style=&amp;rdquo;message&amp;rdquo;，而不是使用provider=&amp;rdquo;java:RPC&amp;rdquo;。message style告诉Axis本服务是由org.apache.axis.providers.java.MsgProvider来处理的，而不是org.apache.axis.providers.java.RPCProvider。
6.XML&amp;lt;----&amp;gt;Java数据映射
将Java类型映射到SOAP/XML类
互操作，或者叫interop，是各种SOAP实现之间的一个存在的挑战。如果期望服务在其他的平台和实现上也可以使用，需要理解这个概念。Axis中Java类型到WSDL/XSD/SOAP的映射由JAX-RPC规范确定。相关内容请参考JAX-RPC规范。
WSDL到Java的标准映射
xsd:base64Binary &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; byte[]
xsd:boolean &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; boolean
xsd:byte &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; byte
xsd:dateTime &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; java.util.Calendar
xsd:decimal &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; java.math.BigDecimal
xsd:double &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; double
xsd:float &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; float
xsd:hexBinary &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; byte[]
xsd:int&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int
xsd:integer&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; java.math.BigInteger
xsd:long &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; long
xsd:QName &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; javax.xml.namespace.QName
xsd:short &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; short
xsd:string&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; java.lang.String
如果在WSDL中声明了一个对象是nillable的，则调用者可以选择返回值为0，这样的话，原始数据类型可以使用它们的包装类代替，例如Byte、Double、Boolean。
SOAP编码数据类型
和XSD数据类型相对应的是SOAP &amp;lsquo;Section 5&amp;rsquo;数据类型，这些数据类型都是nillable的，所以总是可以和包装类映射。这些类型之所以存在是因为他们都支持ID和HREF属性，所以也用于当一个RPC编码的context来支持multi-ref序列化。
7.异常
一般来说，Axis将java.rmi.RemoteException映射成为SOAP Fault。这部分内容在笔者介绍的Axis2的文章中有比较详细的介绍，请参考。
8.Axis可以/不可以通过SOAP发送的内容
Java的集合框架元素，例如Hashtable，具有序列器，但是和其它的SOAP实现没有正式的交互操作能力，并且在SOAP规范中没有对应的复杂对象。最可靠的发送集合对象的办法就是使用数组。
没有预先注册的对象：不能发送任意的Java对象，并且期望它们可以被在服务器端被理解。在使用RMI的时候，可以发送和接受实现了Serializable接口的Java对象，那是由于双发都是使用Java。Axis值可以发送那么被Axis序列器注册的对象。文本后面会介绍如何使用BeanSerializer来序列化任何符合JavaBean规范的类。
远程引用：远程引用(Remote Reference)既不是SOAP规范的一部分，也不是JAX-RPC的一部分，所以不能返回对象的引用，然后期望调用者可以使用它作为SOAP调用的参数或者其他调用的参数。此时应该使用其他的方案，例如将他们存储在HashMap中，使用数字或者字符串键值来进行标识，这样就可以传递键值。
9.编码Beans---BeanSerializer
Axis具有序列化和反序列化的能力，不需要编写代码，任何Java类，主要它遵守标准JavaBean的模式，那么就只需要告诉Axis Java类与XML Schema类型之间的映射，配置方式如下：
&amp;lt;beanMapping qname=&amp;rdquo;ns:local&amp;rdquo; xmlns:ns=&amp;rdquo;someNamespace&amp;rdquo;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; languageSecificType=&amp;rdquo;java:my.java.thingy&amp;rdquo;/&amp;gt;
&amp;lt;beanMapping&amp;gt;标签将一个Java类映射到一个XML QName。主要它包含两个重要的属性，qname和languageSpecificType。所以在上例中，将my.java.thingy类映射到XML QName:[someNamespace]:[local]。
下面看一个例子：BeanService.java
package samples.userguide.example5;
&amp;nbsp;
public class BeanService
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; public String processOrder(Order order)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String sep = System.getProperty(&amp;quot;line.separator&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String response = &amp;quot;Hi, &amp;quot; + order.getCustomerName() + &amp;quot;!&amp;quot; + sep;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; response += sep + &amp;quot;You seem to have ordered the following:&amp;quot; + sep;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String [] items = order.getItemCodes();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int [] quantities = order.getQuantities();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (int i = 0; i &amp;lt; items.length; i++) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; response += sep + quantities[i] + &amp;quot; of item : &amp;quot; + items[i];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; response += sep + sep +
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;If this had been a real order processing system, &amp;quot;+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;we'd probably have charged you about now.&amp;quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return response;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
}
上面的代码中，Order类是一个JavaBean类。由于Order类不是一个基本类型，这样Axis就不能识别它，所以一个错误的wsdd是下面这样的：
&amp;lt;deployment xmlns=&amp;quot;http://xml.apache.org/axis/wsdd/&amp;quot; xmlns:java=&amp;quot;http://xml.apache.org/axis/wsdd/providers/java&amp;quot;&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;service name=&amp;quot;OrderProcessor&amp;quot; provider=&amp;quot;java:RPC&amp;quot;&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;parameter name=&amp;quot;className&amp;quot; value=&amp;quot;samples.userguide.example5.BeanService&amp;quot;/&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;parameter name=&amp;quot;allowedMethods&amp;quot; value=&amp;quot;processOrder&amp;quot;/&amp;gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/service&amp;gt;
&amp;lt;/deployment&amp;gt;
而正确的wsdd文件应该为下面的文件：
&amp;lt;deployment xmlns=&amp;quot;http://xml.apache.org/axis/wsdd/&amp;quot; xmlns:java=&amp;quot;http://xml.apache.org/axis/wsdd/providers/java&amp;quot;&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;service name=&amp;quot;OrderProcessor&amp;quot; provider=&amp;quot;java:RPC&amp;quot;&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;parameter name=&amp;quot;className&amp;quot; value=&amp;quot;samples.userguide.example5.BeanService&amp;quot;/&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;parameter name=&amp;quot;allowedMethods&amp;quot; value=&amp;quot;processOrder&amp;quot;/&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;beanMapping qname=&amp;quot;myNS:Order&amp;quot; xmlns:myNS=&amp;quot;urn:BeanService&amp;quot; languageSpecificType=&amp;quot;java:samples.userguide.example5.Order&amp;quot;/&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/service&amp;gt;
&amp;lt;/deployment&amp;gt;
运行的结果如下：

此时在Client类中需要添加如下的代码：
QName&amp;nbsp;&amp;nbsp;&amp;nbsp; qn&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = new QName( &amp;quot;urn:BeanService&amp;quot;, &amp;quot;Order&amp;quot; );
call.registerTypeMapping(Order.class, qn,new org.apache.axis.encoding.ser.BeanSerializerFactory(Order.class, qn), new org.apache.axis.encoding.ser.BeanDeserializerFactory(Order.class, qn));
Axis允许用户编写自定义的序列器和反序列器，并提供了实现序列器和反序列器的工具。现在只需要查看DataSer/DataDeser类、BeanSerializer/BeanDeserializer、ArraySerializer/ArrayDeserializer以及org.apache.axis.encoding.ser包中的其他类。
部署自定义的映射----&amp;lt;typeMapping&amp;gt;标签
在建立了自定义的序列器和反序列器后，需要告诉Axis这些序列器的应用范围，通过在WSDD中使用它：
&amp;lt;typeMapping qname=&amp;quot;ns:local&amp;quot; xmlns:ns=&amp;quot;someNamespace&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; languageSpecificType=&amp;quot;java:my.java.thingy&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; serializer=&amp;quot;my.java.Serializer&amp;quot;获取序列器的序列器工厂类
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; deserializer=&amp;quot;my.java.DeserializerFactory&amp;quot; 、、
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;/&amp;gt;
实际上&amp;lt;beanMapping&amp;gt;是&amp;lt;typeMapping&amp;gt;的一个简化，其中serializer=&amp;rdquo;org.apache.axis.encoding.ser.BeanSerializerFactory&amp;rdquo;,deserializer=&amp;rdquo;org.apache.axis.encoding.ser.BeanDeserializerFactory&amp;rdquo;,encodingStyle=&amp;rdquo;http://schemas.xmlsoa.org/soap/encoding&amp;rdquo;。
&amp;lt;arrayMapping qname=&amp;quot;ns:ArrayOfthingy&amp;quot; xmlns:ns=&amp;quot;someNamespaceURI&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; languageSpecificType=&amp;quot;java:my.java.array.thingy[]&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;innerType=&amp;quot;ns2:thingy&amp;quot; xmlns:ns2=&amp;quot;anotherNamespaceURI&amp;quot; 数组的元素类型
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;/&amp;gt;
&amp;nbsp;
&amp;nbsp;</description><pubDate>Sun, 09 Dec 2007 01:47:00 +0800</pubDate><author>sunjavaduke</author><comments>http://blog.csdn.net/sunjavaduke/archive/2007/12/09/1925342.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/sunjavaduke/archive/2007/12/09/1925342.aspx</guid><dc:creator>sunjavaduke</dc:creator><fs:srclink>http://blog.csdn.net/sunjavaduke/archive/2007/12/09/1925342.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579933/1235704</fs:itemid></item><item><title>Apache Axis用户指南(1)</title><link>http://blog.csdn.net/sunjavaduke/archive/2007/12/09/1925341.aspx</link><wfw:comment>http://blog.csdn.net/sunjavaduke/comments/1925341.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/sunjavaduke/comments/commentRss/1925341.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/sunjavaduke/services/trackbacks/1925341.aspx</trackback:ping><description>&amp;nbsp;&amp;nbsp;
本文是Apache Axis的用户指南的第一部分。
笔者在学习的过程中，作为记录，简单的翻译了一下。笔者已经翻译了Apache Axis的安装及应用文档，也谈不上翻译，只是笔者在学习的过程中，将笔者认为重要的部分作为记录，并加以笔者实践的结果。建议在阅读本文之前先阅读Apache Axis安装指南。
0.介绍
SOAP：SOAP是基于XML的通信协议和编码格式，它用于交互应用程序通信。现在的版本是SOAP 1.2，但是SOAP 1.1版本使用的更加广泛。SOAP由W3C的XML协议工作组管理。SOAP被广泛的认为是跨平台、跨语言的计算机应用和Web Service的核心。
AXIS：Axis是SOAP Engine----用来构造SOAP处理器，例如客户端，服务器端，网管等等。Axis是使用Java实现的，但是Axis提供一个C++的客户端实现。Axis不仅仅是一个SOAP Engine，它还包括以下内容：
&amp;middot;独立的服务器
&amp;middot;可以plug in到servlet engine中的服务器
&amp;middot;支持WSDL
&amp;middot;根据WSDL生成Java类
&amp;middot;样例程序
&amp;middot;SOAPMonitor
Axis 1.4的特性如下：
&amp;middot;兼容SOAP 1.1/1.2两个版本
&amp;middot;灵活的配置和发布
&amp;middot;支持JWS
&amp;middot;支持所有的基本类型，以及类型映射系统
&amp;middot;自动的Java Beans序列化/反序列化，包含自定义的Java属性--&amp;gt;XML元素/属性的映射
&amp;middot;自动的Java集合与SOAP数组的双向转换。
&amp;middot;提供RPC和基于消息的SOAP服务
&amp;middot;由发布的服务自动生成WSDL
&amp;middot;WSDL2Java工具
&amp;middot;Java2WSDL工具
&amp;middot;基本的安全扩展，可以集成到Servlet 2.2的安全/角色中
&amp;middot;支持面向绘画的服务，通过使用HTTP Cookie或者独立于传输的SOAP Headers
&amp;middot;对SOAP with Attachments规范的初步支持
&amp;middot;将EJB作为Web Service来访问
&amp;middot;基HTTP Servlet的传输
&amp;middot;基于JMS的支持
&amp;middot;独立的服务器版本
&amp;middot;大量的例子
根据Apache Axis安装指南，安装Apache Axis到Apache Tocmat服务器。运行本文所适用的例子之前，确保CLASSPATH包含以下类库：
&amp;middot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; axis-1_2/lib/axis.jar 
&amp;middot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; axis-1_2/lib/jaxrpc.jar 
&amp;middot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; axis-1_2/lib/saaj.jar 
&amp;middot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; axis-1_2/lib/commons-logging.jar 
&amp;middot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; axis-1_2/lib/commons-discovery.jar 
&amp;middot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; axis-1_2/lib/wsdl4j.jar 
&amp;middot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; axis-1_2/ (for the sample code)
&amp;middot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 遵守JAXP-1.1的XML解析器，推荐使用Xerces，因为在Apache Axis测试的时候使用的就是这个解析器
1.使用Axis开发Web Service
Getting Started
首先来看一个例子Web Service客户端程序，它调用Apache提供的Axis服务器的echoString方法：
package samples.userguide.example1;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import javax.xml.namespace.QName;
public class TestClient {
public static void main(String[] args) {
try {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String endpoint = 
&amp;quot;http://nagoya.apache.org:5049/axis/services/echo&amp;quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Service service = new Service();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Call call = (Call) service.createCall();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call.setTargetEndpointAddress(new java.net.URL(endpoint));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call.setOperationName(new QName(&amp;quot;http://soapinterop.org/&amp;quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;echoString&amp;quot;));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String ret = (String) call.invoke(new Object[] { &amp;quot;Hello!&amp;quot; });
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println(&amp;quot;Sent 'Hello!', got '&amp;quot; + ret + &amp;quot;'&amp;quot;);
} catch (Exception e) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.err.println(e.toString());
}
}
}
程序首先创建了Service和Call对象，他们是标准的JAX-RPC对象，用来存储关于调用服务的元数据，然后设置了SOAP消息目的地的终端节点的URL，接着定义了Web Service的操作名，最后激活服务，传递一个数组参数(一个字符串)。
可以查看SOAP请求消息的结构如下：
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;
&amp;lt;SOAP-ENV:Envelope xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlns:SOAP-ENV=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;
&amp;nbsp;&amp;lt;SOAP-ENV:Body&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ns1:echoString xmlns:ns1=&amp;quot;http://soapinterop.org/&amp;quot;&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;arg0 xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Hello!&amp;lt;/arg0&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ns1:echoString&amp;gt;
&amp;nbsp;&amp;lt;/SOAP-ENV:Body&amp;gt;
&amp;lt;/SOAP-ENV:Envelope&amp;gt;
字符串参数自动的序列化成XML，服务器响应就是一个String，我们将它反序列化后并打印出来。
可以使用tcpmon或者SOAP monitor来查看请求和响应信息。(笔者并没有网络连接，不能连接到Apache网站，所以这个例子没有运行成功。)
命名参数
在上面的例子中，可以看到Axis自动的将XML编码的参数命名为arg0,arg1，放在SOAP消息中。如果想改变这种命名，很简单，在调用invoke()方法之前，使用addParameter方法对每个参数命名，同时使用setReturnType对返回的参数命名，如下所示：
call.addParameter(&amp;ldquo;testParam&amp;rdquo;,
org.apache.axis.Constants.XSD_STRING,
javax.xml.rpc.ParameterMode.IN);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call.setReturnType(org.apache.axis.Constants.XSD_STRING);
进行上述设置后，会将testParam这个参数名赋给并且只赋给第一个调用方法的第一个参数。同时还定义了参数的类型(org.apache.axis.Constants.XSD_STRING)和这个参数是输入还是输出或者输入输出参数。在本例中是一个输入参数。现在再运行这个程序时，消息如下：
&amp;lt;testParam xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Hello!&amp;lt;/testParam&amp;gt;
与&amp;rdquo;untyped&amp;rdquo;服务器互操作
在上面的例子中，强制设置了invoke()方法的返回值类型，本来是一个Object类型，但是转换为适当的实际类型---例如，我们已经知道echoString方法返回一个字符串，那么我们希望调用client.invoke()返回一个字符串。我们先来看一下它是如何工作的：
下面是echoString的一个响应：
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&amp;nbsp;&amp;lt;SOAP-ENV:Envelope xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns:SOAP-ENV=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt; 
&amp;nbsp;&amp;lt;SOAP-ENV:Body&amp;gt;
&amp;nbsp;&amp;nbsp; &amp;lt;ns1:echoStringResponse xmlns:ns1=&amp;quot;http://soapinterop.org/&amp;quot;&amp;gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;result xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;Hello!&amp;lt;/result&amp;gt;
&amp;nbsp;&amp;nbsp; &amp;lt;/ns1:echoStringResponse&amp;gt; 
&amp;nbsp;&amp;lt;/SOAP-ENV:Body&amp;gt;
&amp;nbsp;&amp;lt;/SOAP-ENV:Envelope&amp;gt;
其中红色的部分包含了一个类型声明，Axis使用它来决定将元素的内容反序列化成什么类型的Java对象，在本例中将其反序列化成一个Java String对象。很多工具将这种XML中的显示类型信息叫做自描述。另外，一些工具返回如下的响应：
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;
&amp;lt;SOAP-ENV:Envelope xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns:SOAP-ENV=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;
&amp;nbsp;&amp;lt;SOAP-ENV:Body&amp;gt;
&amp;nbsp;&amp;lt;ns1:echoStringResponse xmlns:ns1=&amp;quot;http://soapinterop.org/&amp;quot;&amp;gt;
&amp;nbsp;&amp;nbsp; &amp;lt;result&amp;gt;Hello, I'm a string!&amp;lt;/result&amp;gt;
&amp;nbsp;&amp;lt;/ns1:echoStringResponse&amp;gt;
&amp;nbsp;&amp;lt;/SOAP-ENV:Body&amp;gt;
&amp;lt;/SOAP-ENV:Envelope&amp;gt;
它不包含类型的生命，那么Java如何将&amp;lt;result&amp;gt;中的内容进行反序列化呢？反序列化成什么类型的对象呢？答案就是metadata，关于数据的数据。在本例中，我们需要一个对服务的描述来告诉我们期望的返回类型。下面是在Axis客户端需要做的：
call.setReturnType( org.apache.axis.Constants.XSD_STRING );
这个方法会告诉Axis客户端，如果返回值类型没有被声明，那么就将返回值的xsi:type属性定义成预定义的SOAP String类型。
另外还可以通过下面的方法设置返回类型的Java类：
call.setReturnClass(String.class);
现在，使用Axis作为客户端访问SOAP服务就介绍完了。总结一下，利用Axis作为客户端访问SOAP服务的步骤如下：
创建服务终端节点
初始化Service，初始化方法：
Service()
Service(EngineConfiguration config)
Service(EngineConfiguration engineConfiguration, AxisClient axisClient)
Service(java.io.InputStream wsdlInputStream, QName serviceName)
Service(Parser parser, QName serviceName)
Service(QName serviceName)
Service(java.lang.String wsdlLocation, QName serviceName)
Service(java.net.URL wsdlDoc, QName serviceName)
初始化Call，初始化方法调用Service的如下方法：
Call &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; createCall()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Creates a new Call object with no prefilled data.
&amp;nbsp;Call &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; createCall(QName portName)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Creates a new Call object - will prefill as much info from the WSDL as it can.
&amp;nbsp;Call &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; createCall(QName portName, QName operationName)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Creates a new Call object - will prefill as much info from the WSDL as it can.
&amp;nbsp;Call &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; createCall(QName portName, java.lang.String operationName)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Creates a new Call object - will prefill as much info from the WSDL as it can.
设置调用的一些参数：
void &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addParameter(java.lang.String paramName, QName xmlType, java.lang.Class javaType, ParameterMode parameterMode)
&amp;nbsp;void &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addParameter(java.lang.String paramName, QName xmlType, ParameterMode parameterMode)
&amp;nbsp;void &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setOperationName(QName operationName)
&amp;nbsp;void &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setPortTypeName(QName portType)
&amp;nbsp;void &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setProperty(java.lang.String name, java.lang.Object value)
&amp;nbsp;void &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setReturnType(QName xmlType)
&amp;nbsp;void &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setReturnType(QName xmlType, java.lang.Class javaType)
&amp;nbsp;void &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setTargetEndpointAddress(java.lang.String address)
.......(org.apache.axis.client.Call、org.apache.axis.Call、javax.xml.rpc.Call的方法)
调用invoke方法，调用SOAP服务
2.使用Axis发布Web Service
首先看一下下面这个非常简单的类：
public class Calculator {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int add(int i1, int i2) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return i1 + i2;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int subtract(int i1, int i2) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return i1 &amp;ndash; i2;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
}
如何将这个类可以通过SOAP访问呢？方法有很多种，我们通过Axis提供的最简单办法来完成：
JWS(Java Web Service)文件---瞬时部署
将Calculator.java文件拷贝到&amp;lt;your-webapp-root&amp;gt;/axis/目录下，并修改扩展名为jws，即拷贝后的文件为Calculator.jws，例如笔者拷贝的目录及文件名为TOMCAT_HOME\webapps\axis\Calulator.jws
接下来就可以通过下面的URL访问Web Service了
http://localhost:8080/axis/Calculator.jws
Axis将自动的查找文件，编译java类，转换成SOAP调用。使用下面的客户端程序：
/*
&amp;nbsp;* Copyright 2001-2004 The Apache Software Foundation.
&amp;nbsp;* 
&amp;nbsp;* Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);
&amp;nbsp;* you may not use this file except in compliance with the License.
&amp;nbsp;* You may obtain a copy of the License at
&amp;nbsp;* 
&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http://www.apache.org/licenses/LICENSE-2.0
&amp;nbsp;* 
&amp;nbsp;* Unless required by applicable law or agreed to in writing, software
&amp;nbsp;* distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,
&amp;nbsp;* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
&amp;nbsp;* See the License for the specific language governing permissions and
&amp;nbsp;* limitations under the License.
&amp;nbsp;*/
&amp;nbsp;
package samples.userguide.example2;
&amp;nbsp;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import org.apache.axis.utils.Options;
&amp;nbsp;
import javax.xml.rpc.ParameterMode;
&amp;nbsp;
public class CalcClient
{
&amp;nbsp;&amp;nbsp; public static void main(String [] args) throws Exception {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Options options = new Options(args);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String endpoint = &amp;quot;http://localhost:&amp;quot; + options.getPort() +
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;/axis/Calculator.jws&amp;quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; args = options.getRemainingArgs();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (args == null || args.length != 3) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.err.println(&amp;quot;Usage: CalcClient &amp;lt;add|subtract&amp;gt; arg1 arg2&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String method = args[0];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!(method.equals(&amp;quot;add&amp;quot;) || method.equals(&amp;quot;subtract&amp;quot;))) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.err.println(&amp;quot;Usage: CalcClient &amp;lt;add|subtract&amp;gt; arg1 arg2&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Integer i1 = new Integer(args[1]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Integer i2 = new Integer(args[2]);
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Service&amp;nbsp;service = new Service();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Call&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call&amp;nbsp;&amp;nbsp;&amp;nbsp; = (Call) service.createCall();
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call.setTargetEndpointAddress( new java.net.URL(endpoint) );
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call.setOperationName( method );
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call.addParameter( &amp;quot;op1&amp;quot;, XMLType.XSD_INT, ParameterMode.IN );
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call.addParameter( &amp;quot;op2&amp;quot;, XMLType.XSD_INT, ParameterMode.IN );
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call.setReturnType( XMLType.XSD_INT );
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Integer ret = (Integer) call.invoke( new Object [] { i1, i2 });
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println(&amp;quot;Got result : &amp;quot; + ret);
&amp;nbsp;&amp;nbsp; }
}
使用下面的调用来调用Calculator.jws：
G:\jee\eclipse\workspace\AxisUserGuide&amp;gt;java samples.userguide.example2.CalcClien
t -p8080 add 2 5
Got result : 7
&amp;nbsp;
G:\jee\eclipse\workspace\AxisUserGuide&amp;gt;java samples.userguide.example2.CalcClien
t -p8080 subtract 10 9
Got result : 1
&amp;nbsp;
G:\jee\eclipse\workspace\AxisUserGuide&amp;gt;java samples.userguide.example2.CalcClien
t -p8080 unknown 1 2
Usage: CalcClient &amp;lt;add|subtract&amp;gt; arg1 arg2
当端口不是8080的时候，需要改成自定义的端口。
由于JWS web服务是目的在于实现简单的web服务。不能使用package。当使用package的时候，将出现如下的错误：
G:\jee\eclipse\workspace\AxisUserGuide&amp;gt;java samples.userguide.example2.CalcClien
t -p8080 subtract 10 9
Exception in thread &amp;quot;main&amp;quot; AxisFault
&amp;nbsp;faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
&amp;nbsp;faultSubcode:
&amp;nbsp;faultString: java.io.FileNotFoundException: G:\eclipse\workspace\apache-tomcat-
5.5.25\webapps\axis\WEB-INF\jwsClasses\samples\userguide\example2\Calculator.cla
ss (指定されたファイルが見つかりません。)
&amp;nbsp;faultActor:
&amp;nbsp;faultNode:
&amp;nbsp;faultDetail:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {http://xml.apache.org/axis/}hostname:neusoft-dc6b5f1
3.自定义部署&amp;mdash;介绍WSDD
使用JWS的唯一有点就是简单，但是灵活性很差，不可以进行配置，不能指定自定义类型，不能使用Handlers，所以很少使用。
使用部署描述符
为了灵活的使用Axis，主要使用其配置的功能，首先应该属性Axis Web Service Deployment Descriptor(WSDD)格式。部署描述符包含了需要部署到Axis中的内容，也就是说，Axis Engine需要使用的内容。通常部署一个Web Service，那么我们就从基本的服务开始开始了解wsdd。首先看下面这个wsdd文件：
&amp;lt;deployment xmlns=&amp;quot;http://xml.apache.org/axis/wsdd/&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns:java=&amp;quot;http://xml.apache.org/axis/wsdd/providers/java&amp;quot;&amp;gt;
&amp;nbsp;&amp;lt;service name=&amp;quot;MyService&amp;quot; provider=&amp;quot;java:RPC&amp;quot;&amp;gt;
&amp;nbsp;&amp;lt;parameter name=&amp;quot;className&amp;quot; value=&amp;quot;samples.userguide.example3.MyService&amp;quot;/&amp;gt;
&amp;nbsp;&amp;lt;parameter name=&amp;quot;allowedMethods&amp;quot; value=&amp;quot;*&amp;quot;/&amp;gt;
&amp;nbsp;&amp;lt;/service&amp;gt;
&amp;lt;/deployment&amp;gt;
比较简单，最外层的元素告诉engine这是一个WSDD部署，同时定义了java这个名称空间。接着service元素进行实际的Web Service的定义。service是一个目标链，也就是说它可能包含以下内容中的部分或者全部：请求流、核心处理器(对于服务来说叫做provider)、响应流。在本例中，provider是java:RPC，建立在Axis中，提示了这是个Java RPC服务。实际上处理这个的类是org.apache.axis.providers.java.RPCProvider。一些其他的providers包括如下：

通过使用一系列的参数来告诉RPCProvider它需要实例化的类以及调用的类(例如samples.userguide.example3.MyService)。上面例子中的参数分别为指定服务的类、允许通过SOAP访问的方法，&amp;rdquo;*&amp;rdquo;表示所有的方法都可以访问。也可以通过空白或者都好分割的方面名来限制SOAP可以访问的方法列表。
4.高级WSDD&amp;mdash;指定更多的选项
WSDD描述符可以包含关于服务的更多的信息，以及其他的部分，例如Axis中的Handlers，我们将在后面进行介绍。
服务范围
Axis支持三种范围的服务对象，&amp;rdquo;Request&amp;rdquo;、&amp;rdquo;Session&amp;rdquo;、&amp;rdquo;Application&amp;rdquo;，其中Request Scope是默认的，为每个SOAP请求创建一个新的对象，Session Scope针对每个允许使用session的客户端创建一个新的对象，Application scope为所有的请求创建一个单例的共享对象。可以通过&amp;lt;parameter&amp;gt;指定，例如：
&amp;lt;service name=&amp;rdquo;MyService&amp;rdquo; ...&amp;gt;
&amp;lt;parameter name=&amp;rdquo;scope&amp;rdquo; value=&amp;rdquo;value&amp;rdquo;&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...
&amp;lt;/service&amp;gt;
使用AdminClient
使用AdminClient，或者说org.apache.axis.client.AdminClient类来将wsdd文件发送到Axis服务器，以便真正的部署服务。如果将Axis部署到不是tomcat的服务器上的话，需要使用-p&amp;lt;port&amp;gt;参数，默认的是8080，一个典型的调用AdminClient的方式是：
java org.apache.axis.client.AdminClient deploy.wsdd
&amp;lt;Admin&amp;gt;Done processing&amp;lt;/Admin&amp;gt;
这个命令使服务可以通过SOAP进行访问，通过运行Client类来检查一下：
java samples.userguide.example3.Client &amp;ndash;lhttp://localhost:8080/axis/services/MyService &amp;ldquo;test me!&amp;rdquo;
You typed : test me!
整个运行过程如下：

如果将soapmonitor的request和response两个flow加入到deploy.wsdd文件中：
&amp;lt;deployment xmlns=&amp;quot;http://xml.apache.org/axis/wsdd/&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns:java=&amp;quot;http://xml.apache.org/axis/wsdd/providers/java&amp;quot;&amp;gt;
&amp;nbsp;
&amp;nbsp;&amp;lt;service name=&amp;quot;MyService&amp;quot; provider=&amp;quot;java:RPC&amp;quot;&amp;gt;
&amp;nbsp;&amp;lt;requestFlow&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;handler type=&amp;quot;soapmonitor&amp;quot;/&amp;gt;
&amp;nbsp;&amp;lt;/requestFlow&amp;gt;
&amp;nbsp;&amp;lt;responseFlow&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;handler type=&amp;quot;soapmonitor&amp;quot;/&amp;gt;
&amp;nbsp;&amp;lt;/responseFlow&amp;gt;
&amp;nbsp;&amp;lt;parameter name=&amp;quot;className&amp;quot; value=&amp;quot;samples.userguide.example3.MyService&amp;quot;/&amp;gt;
&amp;nbsp;&amp;lt;parameter name=&amp;quot;allowedMethods&amp;quot; value=&amp;quot;*&amp;quot;/&amp;gt;
&amp;nbsp;&amp;lt;/service&amp;gt;
&amp;lt;/deployment&amp;gt;
那么可以通过访问http://localhost:8080/axis/SOAPMonitor来查看SOAP请求和响应信息：

如果想验证部署的服务已经在运行，可以将其卸载后再重新调用，undeploy.wsdd的文件内容如下：
&amp;lt;undeployment xmlns=&amp;quot;http://xml.apache.org/axis/wsdd/&amp;quot;&amp;gt;
&amp;nbsp;&amp;lt;service name=&amp;quot;MyService&amp;quot;/&amp;gt;
&amp;lt;/undeployment&amp;gt;
卸载服务的方法和发布服务的方法相同，只是替换wsdd文件而已，卸载后再调用服务时，查看发生了什么：

也可以使用AdminClient来列出所有发布到服务器上的组件：
D:\axis-1_4&amp;gt;java org.apache.axis.client.AdminClient list
&amp;lt;ns1:deployment xmlns=&amp;quot;http://xml.apache.org/axis/wsdd/&amp;quot; xmlns:java=&amp;quot;http://xml.
apache.org/axis/wsdd/providers/java&amp;quot; xmlns:ns1=&amp;quot;http://xml.apache.org/axis/wsdd/
&amp;quot;&amp;gt;
&amp;nbsp;&amp;lt;ns1:globalConfiguration&amp;gt;
&amp;nbsp;&amp;lt;ns1:parameter name=&amp;quot;sendMultiRefs&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;
&amp;nbsp;......
&amp;lt;ns1:parameter name=&amp;quot;attachments.implementation&amp;quot; value=&amp;quot;org.apache.axis.attach
ments.AttachmentsImpl&amp;quot;/&amp;gt;
&amp;nbsp;&amp;lt;ns1:requestFlow&amp;gt;
&amp;nbsp;&amp;nbsp; &amp;lt;ns1:handler type=&amp;quot;java:org.apache.axis.handlers.JWSHandler&amp;quot;&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ns1:parameter name=&amp;quot;scope&amp;quot; value=&amp;quot;session&amp;quot;/&amp;gt;
&amp;nbsp;&amp;nbsp; &amp;lt;/ns1:handler&amp;gt;
&amp;nbsp;&amp;nbsp; &amp;lt;ns1:handler type=&amp;quot;java:org.apache.axis.handlers.JWSHandler&amp;quot;&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ns1:parameter name=&amp;quot;scope&amp;quot; value=&amp;quot;request&amp;quot;/&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ns1:parameter name=&amp;quot;extension&amp;quot; value=&amp;quot;.jwr&amp;quot;/&amp;gt;
&amp;nbsp;&amp;nbsp; &amp;lt;/ns1:handler&amp;gt;
&amp;nbsp;&amp;lt;/ns1:requestFlow&amp;gt;
&amp;nbsp;&amp;lt;/ns1:globalConfiguration&amp;gt;
&amp;nbsp;&amp;lt;ns1:handler name=&amp;quot;soapmonitor&amp;quot; type=&amp;quot;java:org.apache.axis.handlers.SOAPMonitor
Handler&amp;quot;&amp;gt;
&amp;nbsp;&amp;lt;ns1:parameter name=&amp;quot;wsdlURL&amp;quot; value=&amp;quot;/axis/SOAPMonitorService-impl.wsdl&amp;quot;/&amp;gt;
&amp;nbsp;&amp;lt;ns1:parameter name=&amp;quot;namespace&amp;quot; value=&amp;quot;http://tempuri.org/wsdl/2001/12/SOAPMon
itorService-impl.wsdl&amp;quot;/&amp;gt;
&amp;nbsp;&amp;lt;ns1:parameter name=&amp;quot;serviceName&amp;quot; value=&amp;quot;SOAPMonitorService&amp;quot;/&amp;gt;
&amp;nbsp;&amp;lt;ns1:parameter name=&amp;quot;portName&amp;quot; value=&amp;quot;Demo&amp;quot;/&amp;gt;
&amp;nbsp;&amp;lt;/ns1:handler&amp;gt;
&amp;nbsp;.......other ns1:handler
&amp;nbsp;&amp;lt;ns1:service name=&amp;quot;AdminService&amp;quot; provider=&amp;quot;java:MSG&amp;quot;&amp;gt;
&amp;nbsp;&amp;lt;ns1:parameter name=&amp;quot;allowedMethods&amp;quot; value=&amp;quot;AdminService&amp;quot;/&amp;gt;
&amp;nbsp;&amp;lt;ns1:parameter name=&amp;quot;enableRemoteAdmin&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;
&amp;nbsp;&amp;lt;ns1:parameter name=&amp;quot;className&amp;quot; value=&amp;quot;org.apache.axis.utils.Admin&amp;quot;/&amp;gt;
&amp;nbsp;&amp;lt;ns1:namespace&amp;gt;http://xml.apache.org/axis/wsdd/&amp;lt;/ns1:namespace&amp;gt;
&amp;nbsp;&amp;lt;/ns1:service&amp;gt;
&amp;nbsp;.......other ns1:service
&amp;nbsp;&amp;lt;ns1:transport name=&amp;quot;http&amp;quot;&amp;gt;
&amp;nbsp;&amp;lt;ns1:requestFlow&amp;gt;
&amp;nbsp;&amp;nbsp; &amp;lt;ns1:handler type=&amp;quot;URLMapper&amp;quot;/&amp;gt;
&amp;nbsp;&amp;nbsp; &amp;lt;ns1:handler type=&amp;quot;java:org.apache.axis.handlers.http.HTTPAuthHandler&amp;quot;/&amp;gt;
&amp;nbsp;&amp;lt;/ns1:requestFlow&amp;gt;
&amp;nbsp;&amp;lt;ns1:parameter name=&amp;quot;qs:list&amp;quot; value=&amp;quot;org.apache.axis.transport.http.QSListHand
ler&amp;quot;/&amp;gt;
.......other parameter
&amp;nbsp;&amp;lt;/ns1:transport&amp;gt;
&amp;nbsp;......other transport
&amp;lt;/ns1:deployment&amp;gt;
在上面的打印的信息中，包含了services、handlers、transports和其它的内容。实际上它就是server-config.wsdd文件的内容。我们在稍后会更详细的介绍它。
更多的部署相关&amp;mdash;Handlers和Chains 处理器和链
现在介绍一些Axis更强大的特性。比方说，想统计一下服务被调用了多少次，那么就是用一个handler来完成。在Axis包含这样的例子。当需要使用一个如上的handler类的时候，首先需要部署Handler本身(也就是说在wsdd文件中需要对其进行声明)，然后在service中使用handler的名字，这个名字由你决定。下面是一个handler的wsdd文件：
&amp;lt;deployment xmlns=&amp;quot;http://xml.apache.org/axis/wsdd/&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns:java=&amp;quot;http://xml.apache.org/axis/wsdd/providers/java&amp;quot;&amp;gt;
&amp;nbsp;
&amp;nbsp;&amp;lt;!-- define the logging handler configuration --&amp;gt;
&amp;nbsp;&amp;lt;handler name=&amp;quot;track&amp;quot; type=&amp;quot;java:samples.userguide.example4.LogHandler&amp;quot;&amp;gt;
&amp;nbsp;&amp;lt;parameter name=&amp;quot;filename&amp;quot; value=&amp;quot;d:/MyService.log&amp;quot;/&amp;gt;
&amp;nbsp;&amp;lt;/handler&amp;gt;
&amp;nbsp;
&amp;nbsp;&amp;lt;!-- define the service, using the log handler we just defined --&amp;gt;
&amp;nbsp;&amp;lt;service name=&amp;quot;LogTestService&amp;quot; provider=&amp;quot;java:RPC&amp;quot;&amp;gt;
&amp;nbsp;&amp;lt;requestFlow&amp;gt;
&amp;nbsp;&amp;nbsp; &amp;lt;handler type=&amp;quot;track&amp;quot;/&amp;gt;
&amp;nbsp;&amp;lt;/requestFlow&amp;gt;
&amp;nbsp;
&amp;nbsp;&amp;lt;parameter name=&amp;quot;className&amp;quot; value=&amp;quot;samples.userguide.example4.Service&amp;quot;/&amp;gt;
&amp;nbsp;&amp;lt;parameter name=&amp;quot;allowedMethods&amp;quot; value=&amp;quot;*&amp;quot;/&amp;gt;
&amp;nbsp;&amp;lt;/service&amp;gt;
&amp;nbsp;
&amp;lt;/deployment&amp;gt;
第一部分定义了一个Handler叫做&amp;rdquo;track&amp;rdquo;，实现的类为samples.userguide.example4.LogHandler。这个类接受一个参数filename，用于将日志信息记录到这个文件中。
然后再wsdd重定义了LogTestService服务，和第一个例子相似，也是RPC服务。不同之处在于service元素包含了一个&amp;lt;requestFlow&amp;gt;元素，这表示当服务被调用的时候，一些Handlers会被提前调用。通过插入一个track引用，这样就可以确保在调用服务的时候，每个消息都会被记录。
根据前面的例子，发布服务并调用：

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 执行多次调用后，查看d:/MyService.log文件的内容，如下所示：

远程管理
默认情况下，Axis服务器只允许在本机上访问管理请求，如果希望启用远程管理，那么需要设置AdminService的enableRemoteAdmin属性为true。查看TOMCAT_HOME\webapps\axis\WEB-INF目录下的server-config.wsdd文件，可以看到AdminService的部署描述，添加如下的属性：
&amp;lt;service name=&amp;quot;AdminService&amp;quot; provider=&amp;quot;java:MSG&amp;quot;&amp;gt;
&amp;nbsp;&amp;lt;parameter name=&amp;quot;allowedMethods&amp;quot; value=&amp;quot;AdminService&amp;quot;/&amp;gt;
&amp;nbsp;&amp;lt;parameter name=&amp;quot;enableRemoteAdmin&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;
&amp;nbsp;&amp;lt;parameter name=&amp;quot;className&amp;quot; value=&amp;quot;org.apache.axis.utils.Admin&amp;quot;/&amp;gt;
&amp;nbsp;&amp;lt;namespace&amp;gt;http://xml.apache.org/axis/wsdd/&amp;lt;/namespace&amp;gt;
&amp;nbsp;&amp;lt;/service&amp;gt;
启用远程管理的话将允许未被授权的访问，如果启用的话，需要确保在配置中添加了安全限制。</description><pubDate>Sun, 09 Dec 2007 01:46:00 +0800</pubDate><author>sunjavaduke</author><comments>http://blog.csdn.net/sunjavaduke/archive/2007/12/09/1925341.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/sunjavaduke/archive/2007/12/09/1925341.aspx</guid><dc:creator>sunjavaduke</dc:creator><fs:srclink>http://blog.csdn.net/sunjavaduke/archive/2007/12/09/1925341.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579934/1235704</fs:itemid></item><item><title>反盗版从做节目开始</title><link>http://blog.csdn.net/Jhzyz/archive/2007/12/09/1925340.aspx</link><wfw:comment>http://blog.csdn.net/Jhzyz/comments/1925340.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/Jhzyz/comments/commentRss/1925340.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/Jhzyz/services/trackbacks/1925340.aspx</trackback:ping><description>冯强/文
&amp;nbsp;
反盗版是一个长期的过程，因为我们的工作、生活都和盗版有密切的关系。我是学计算机的，如果没有盗版，做软件开发可能是一个好营生，我也可能还在做技术。当然，就象电影《变形金刚》里面的电脑天才说的&amp;ldquo;Who doesn't?&amp;rdquo;，我们通过网络获得了最新的电影、音乐、软件等等，网络使我们的数字生活变得低成本。虽然很多人认为Share并不是盗版，但我知道这和很多影视文件上面留的Log&amp;ldquo;只作视频技术交流之用&amp;rdquo;，&amp;ldquo;下载后24小时删除&amp;rdquo;等字样一下，只不过是一种自我安慰而已。
&amp;nbsp;
不过，我始终认为，商业应用应该要支持正版，特别是用这些软件、影视产品来做营利之用。比如，企业使用的ERP软件不该去用盗版，广告公司用的绘图软件不该用盗版，电视台使用的音像素材也不该用盗版。。。
&amp;nbsp;
很不幸的是，我近期看到某大台的几档法律和谈心节目，大量使用了国外著名影视的音乐。比如，画面讲监狱的事情时出现了《越狱》里面熟悉的片头音乐，讲感人之事件时出现了《辛特勒的名单》的主题音乐，讲警察叔叔时出现《无间道》的音乐。只有您用心观察，就会发现这个台很多档节目都使用了一些著名影视作品的音乐，当然我敢肯定他们是没有取得版权的。我今天又在某省台预告播出电视剧《远东第一监狱》的片花里发现，《越狱》又被无情地音乐盗版。《越狱》第三季还有热播啊，他们会把音乐版权转给你吗？
&amp;nbsp;
可能是因为成本的关系，电视台对于配乐的素材根本就没有太多的预算，所以音响师随便就找来一些耳熟能详的素材来对付。殊不知，这样会给来中国的外国人，还有咱们自己人一个讯息，那就是&amp;ldquo;共产主义已经在网络上实现了&amp;rdquo;。这真的是一场灾难，在享受盗版的便利的同时，我们的创作力被无情地剥夺了。
&amp;nbsp;
对于个人来讲，可能网络和盗版能给大家带来学习和开眼界的机会，我们的国情要杜绝盗版是不可能的（即使在美国和欧洲盗版现象也是存在的）。但是，我们公司、企业、单位，任何的营利机构（甚至还应有公益机构）都没有选择盗版的权利，这关系到一个民族的尊严和创新能力传承的问题。很多公司使用盗版来开发或制造产品，却希望出来的产品受到知识产权的保护，这本身就是莫大的讽刺。
&amp;nbsp;
对我个人而言，我是尽量支持正版，比如说在网络上下载了某张CD，如果真的喜欢，我会去再买正版收藏，这是我现在能力之内能做的事。对于一些初创的企业，可能现在还不能完全支持正版，但我希望在他们壮大以后，能支持回正版。而那些有影响的传媒机构和大公司，支持正版更责无旁贷，首先从让你们的节目中不再使用盗版素材做起吧。
&amp;nbsp;</description><pubDate>Sun, 09 Dec 2007 01:45:00 +0800</pubDate><author>冯强</author><comments>http://blog.csdn.net/Jhzyz/archive/2007/12/09/1925340.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/Jhzyz/archive/2007/12/09/1925340.aspx</guid><dc:creator>冯强</dc:creator><fs:srclink>http://blog.csdn.net/Jhzyz/archive/2007/12/09/1925340.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579935/1235704</fs:itemid></item><item><title>kruskal算法的实现</title><link>http://blog.csdn.net/yitianfengsun/archive/2007/12/09/1925339.aspx</link><wfw:comment>http://blog.csdn.net/yitianfengsun/comments/1925339.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/yitianfengsun/comments/commentRss/1925339.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/yitianfengsun/services/trackbacks/1925339.aspx</trackback:ping><description>#include&amp;lt;stdio.h&amp;gt;#include&amp;lt;stdlib.h&amp;gt;#define M 20#define MAX 20
typedef struct {&amp;nbsp;int begin;&amp;nbsp;int end;&amp;nbsp;int weight;}edge;
typedef struct{&amp;nbsp;int adj;&amp;nbsp;int weight;}AdjMatrix[MAX][MAX];
typedef struct{&amp;nbsp;AdjMatrix arc;&amp;nbsp;int vexnum, arcnum;}MGraph;void CreatGraph(MGraph *);//函数申明 void sort(edge* ,MGraph *);void MiniSpanTree(MGraph *);int&amp;nbsp; Find(int *, int );void Swapn(edge *, int, int);void CreatGraph(MGraph *G)//构件图{&amp;nbsp;int i, j,n, m;
&amp;nbsp;printf(&amp;quot;请输入边数和顶点数:&amp;quot;);&amp;nbsp;scanf(&amp;quot;%d %d&amp;quot;,&amp;amp;G-&amp;gt;arcnum,&amp;amp;G-&amp;gt;vexnum);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (i = 1; i &amp;lt;= G-&amp;gt;vexnum; i++)//初始化图&amp;nbsp;{&amp;nbsp; for ( j = 1; j &amp;lt;= G-&amp;gt;vexnum; j++)&amp;nbsp; {&amp;nbsp;&amp;nbsp; G-&amp;gt;arc[i][j].adj = G-&amp;gt;arc[j][i].adj = 0;&amp;nbsp; }&amp;nbsp;}
&amp;nbsp;for ( i = 1; i &amp;lt;= G-&amp;gt;arcnum; i++)//输入边和权值 &amp;nbsp;{&amp;nbsp; printf(&amp;quot;\n请输入有边的2个顶点&amp;quot;);&amp;nbsp; scanf(&amp;quot;%d %d&amp;quot;,&amp;amp;n,&amp;amp;m);&amp;nbsp; while(n &amp;lt; 0 || n &amp;gt; G-&amp;gt;vexnum || m &amp;lt; 0 || n &amp;gt; G-&amp;gt;vexnum)&amp;nbsp; {&amp;nbsp;&amp;nbsp; printf(&amp;quot;输入的数字不符合要求 请重新输入:&amp;quot;);&amp;nbsp;&amp;nbsp; scanf(&amp;quot;%d%d&amp;quot;,&amp;amp;n,&amp;amp;m);&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; G-&amp;gt;arc[n][m].adj = G-&amp;gt;arc[m][n].adj = 1;&amp;nbsp; getchar();&amp;nbsp; printf(&amp;quot;\n请输入%d与%d之间的权值:&amp;quot;, n, m);&amp;nbsp; scanf(&amp;quot;%d&amp;quot;,&amp;amp;G-&amp;gt;arc[n][m].weight);&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;printf(&amp;quot;邻接矩阵为:\n&amp;quot;);&amp;nbsp;for ( i = 1; i &amp;lt;= G-&amp;gt;vexnum; i++)&amp;nbsp;{ &amp;nbsp; for ( j = 1; j &amp;lt;= G-&amp;gt;vexnum; j++)&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&amp;quot;%d &amp;quot;,G-&amp;gt;arc[i][j].adj);&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&amp;quot;\n&amp;quot;);&amp;nbsp;}}
void sort(edge edges[],MGraph *G)//对权值进行排序 {&amp;nbsp;int i, j;
&amp;nbsp;for ( i = 1; i &amp;lt; G-&amp;gt;arcnum; i++)&amp;nbsp;{&amp;nbsp; for ( j = i + 1; j &amp;lt;= G-&amp;gt;arcnum; j++)&amp;nbsp; {&amp;nbsp;&amp;nbsp; if (edges[i].weight &amp;gt; edges[j].weight)&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp; Swapn(edges, i, j);&amp;nbsp;&amp;nbsp; }&amp;nbsp; }&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;printf(&amp;quot;权排序之后的为:\n&amp;quot;);&amp;nbsp;for (i = 1; i &amp;lt; G-&amp;gt;arcnum; i++)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&amp;quot;&amp;lt;&amp;lt; %d, %d &amp;gt;&amp;gt;&amp;nbsp;&amp;nbsp; %d\n&amp;quot;, edges[i].begin, edges[i].end, edges[i].weight);&amp;nbsp;}
}
void Swapn(edge *edges,int i, int j)//交换权值 以及头和尾 {&amp;nbsp; &amp;nbsp;&amp;nbsp;int temp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;temp = edges[i].begin;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; edges[i].begin = edges[j].begin;&amp;nbsp;&amp;nbsp;&amp;nbsp; edges[j].begin = temp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp = edges[i].end;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; edges[i].end = edges[j].end;&amp;nbsp;&amp;nbsp;&amp;nbsp; edges[j].end = temp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp = edges[i].weight;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; edges[i].weight = edges[j].weight;&amp;nbsp;&amp;nbsp;&amp;nbsp; edges[j].weight = temp;} 
void MiniSpanTree(MGraph *G)//生成最小生成树 {&amp;nbsp;int i, j, n, m;&amp;nbsp;int k = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp; int parent[M];
&amp;nbsp;edge edges[M];&amp;nbsp;&amp;nbsp;for ( i = 1; i &amp;lt; G-&amp;gt;vexnum; i++)&amp;nbsp;{&amp;nbsp; for (j = i + 1; j &amp;lt;= G-&amp;gt;vexnum; j++)&amp;nbsp; {&amp;nbsp;&amp;nbsp; if (G-&amp;gt;arc[i][j].adj == 1)&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp; edges[k].begin = i;&amp;nbsp;&amp;nbsp;&amp;nbsp; edges[k].end = j;&amp;nbsp;&amp;nbsp;&amp;nbsp; edges[k].weight = G-&amp;gt;arc[i][j].weight;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; k++;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &amp;nbsp; }&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sort(edges, G);&amp;nbsp;&amp;nbsp;&amp;nbsp; for (i = 1; i &amp;lt;= G-&amp;gt;arcnum; i++)&amp;nbsp;{&amp;nbsp; parent[i] = 0;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&amp;quot;最小生成树为:\n&amp;quot;);&amp;nbsp;for (i = 1; i &amp;lt;= G-&amp;gt;arcnum; i++)//核心部分 &amp;nbsp;{&amp;nbsp; n = Find(parent, edges[i].begin);&amp;nbsp; m = Find(parent, edges[i].end);&amp;nbsp; if (n != m)&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; parent[n] = m;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&amp;quot;&amp;lt;&amp;lt; %d, %d &amp;gt;&amp;gt;&amp;nbsp;&amp;nbsp; %d\n&amp;quot;, edges[i].begin, edges[i].end, edges[i].weight);&amp;nbsp; }&amp;nbsp;}}
int Find(int *parent, int f)//找尾 {&amp;nbsp;while ( parent[f] &amp;gt; 0)&amp;nbsp;{&amp;nbsp; f = parent[f];&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp; return f;}
int main(void)//主函数 {&amp;nbsp;MGraph *G;
&amp;nbsp;G = (MGraph*)malloc(sizeof(MGraph));&amp;nbsp;if (G == NULL)&amp;nbsp;{&amp;nbsp; printf(&amp;quot;memory allcation failed,goodbye&amp;quot;);&amp;nbsp; exit(1);&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;CreatGraph(G);&amp;nbsp;&amp;nbsp;&amp;nbsp; MiniSpanTree(G);&amp;nbsp;&amp;nbsp; &amp;nbsp;system(&amp;quot;pause&amp;quot;);&amp;nbsp;return 0;}&amp;nbsp;</description><pubDate>Sun, 09 Dec 2007 01:37:00 +0800</pubDate><author>yitianfengsun</author><comments>http://blog.csdn.net/yitianfengsun/archive/2007/12/09/1925339.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/yitianfengsun/archive/2007/12/09/1925339.aspx</guid><dc:creator>yitianfengsun</dc:creator><fs:srclink>http://blog.csdn.net/yitianfengsun/archive/2007/12/09/1925339.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579936/1235704</fs:itemid></item><item><title>设计通用通用树的节点的方法</title><link>http://blog.csdn.net/Azureus/archive/2007/12/09/1925338.aspx</link><wfw:comment>http://blog.csdn.net/Azureus/comments/1925338.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/Azureus/comments/commentRss/1925338.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/Azureus/services/trackbacks/1925338.aspx</trackback:ping><description>今天学到一种方法struct&amp;nbsp; node{address_t &amp;nbsp;&amp;nbsp;&amp;nbsp; m_prev,address_t&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_next,address_t&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  m_data};其中address_t其实就是一种地址，可以这样定义#define address_t unsigned long并且address_t也可以换成offset_t，表示针对某个位置的偏移。节点中保存的就是地址，使用节点的时候，其实就是获得这个节点指向的内存单元的值，然后根据自己想得到的类型，进行强制转换就可以了。比如说，一个节点，里面保存的地址指向的是long型，那么就是node* pNode = NULL;/*获取pNode*/...long lTmp = *(long *)(pNode-&amp;gt;m_data);然而实际上的其实更加复杂。比如说，有可能节点中保存的不是地址，而是针对某个基地址的偏移，然而道理都是一样的。这样的话，设计树的人，只要考虑到树的实现算法，而不用据泥于树的节点里面到底要存什么。要存什么东西，由使用树的人根据自己的需要往里面存取即可。</description><pubDate>Sun, 09 Dec 2007 01:35:00 +0800</pubDate><author>Azureus</author><comments>http://blog.csdn.net/Azureus/archive/2007/12/09/1925338.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/Azureus/archive/2007/12/09/1925338.aspx</guid><dc:creator>Azureus</dc:creator><fs:srclink>http://blog.csdn.net/Azureus/archive/2007/12/09/1925338.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579937/1235704</fs:itemid></item><item><title>解决org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations)</title><link>http://blog.csdn.net/totogogo/archive/2007/12/09/1925337.aspx</link><wfw:comment>http://blog.csdn.net/totogogo/comments/1925337.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/totogogo/comments/commentRss/1925337.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/totogogo/services/trackbacks/1925337.aspx</trackback:ping><description>相关代码：===============================================public class VoteQuestion {&amp;nbsp;&amp;nbsp;&amp;nbsp; private Set options = new HashSet();&amp;nbsp;&amp;nbsp;&amp;nbsp; 。。。
&amp;nbsp;/**&amp;nbsp; * @hibernate.set cascade = &amp;quot;all&amp;quot; table = &amp;quot;VOTE_OPTION&amp;quot; inverse =&amp;nbsp; *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;true&amp;quot; lazy = &amp;quot;true&amp;quot; order-by = &amp;quot;id&amp;quot;&amp;nbsp; * &amp;nbsp; * @hibernate.collection-one-to-many class =&amp;nbsp; *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;eorg.etoken.pojo.VoteOption&amp;quot;&amp;nbsp; * &amp;nbsp; * @hibernate.collection-key column = &amp;quot;QUESTION_ID&amp;quot;&amp;nbsp; */&amp;nbsp;public Set getOptions() {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return options;&amp;nbsp;}
}
public class VoteOption {&amp;nbsp;&amp;nbsp;&amp;nbsp; private VoteQuestion question;&amp;nbsp;&amp;nbsp; &amp;nbsp;。。。。
&amp;nbsp;/**&amp;nbsp; * @hibernate.many-to-one class = &amp;quot;eorg.etoken.pojo.VoteQuestion&amp;quot; cascade =&amp;nbsp; *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;none&amp;quot; not-null = &amp;quot;true&amp;quot; column = &amp;quot;QUESTION_ID&amp;quot;&amp;nbsp; *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; update = &amp;quot;false&amp;quot;&amp;nbsp; */&amp;nbsp;public VoteQuestion getQuestion() {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return question;&amp;nbsp;}
}
public class VoteServiceImpl{&amp;nbsp;。。。&amp;nbsp;public void deleteVoteOption(int optionId) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Transaction tx = session.beginTransaction();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; VoteOption option = (VoteOption) session.load(VoteOption.class, new Long(optionId));&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;session.delete(option);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tx.commit();&amp;nbsp;}}
===============================================
当调用VoteServiceImpl的deleteVoteOption方法时，就会抛出下列Exception:org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations)
原因是votequestion与voteoption有连带关系，不能直接删除voteoption，而应该从votequestion里remove voteoption！
因此上面的deleteVoteOption方法只需要修改一行即可，见下面代码
===============================================&amp;nbsp;public void deleteVoteOption(int optionId) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Transaction tx = session.beginTransaction();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;VoteOption option = (VoteOption) session.load(VoteOption.class, new Long(optionId));&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; option.getQuestion().getOptions().remove(option);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tx.commit();&amp;nbsp;}===============================================&amp;nbsp;</description><pubDate>Sun, 09 Dec 2007 01:31:00 +0800</pubDate><author>tomsonxu</author><comments>http://blog.csdn.net/totogogo/archive/2007/12/09/1925337.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/totogogo/archive/2007/12/09/1925337.aspx</guid><dc:creator>tomsonxu</dc:creator><fs:srclink>http://blog.csdn.net/totogogo/archive/2007/12/09/1925337.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579938/1235704</fs:itemid></item><item><title>最常用的拍摄技巧</title><link>http://blog.csdn.net/wangjun_pfc/archive/2007/12/09/1925336.aspx</link><wfw:comment>http://blog.csdn.net/wangjun_pfc/comments/1925336.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/wangjun_pfc/comments/commentRss/1925336.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/wangjun_pfc/services/trackbacks/1925336.aspx</trackback:ping><description>最常用的基本方式。 &amp;nbsp; &amp;nbsp; 适用机型：小型摄像机/中型摄像机 &amp;nbsp; &amp;nbsp; 动作要领： &amp;nbsp; &amp;nbsp; 请将右胳膊上臂与身体右侧夹紧，右臂向左后方用力，并利用身体的反作用力形成胳膊与身体之间的动态平衡，增 加机器的稳定性； &amp;nbsp; &amp;nbsp; 必要的时候可在启动录像键前深吸一口气，再屏住呼吸开始拍摄； &amp;nbsp; &amp;nbsp; 如果机器是索尼PD150、松下DVC180等较重的中型摄像机，可同时将左手托住镜头底部，这样既可以保证机器的稳定性，同时又方便手动聚焦和变焦；&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; 第二势 &amp;nbsp; &amp;nbsp; 抢新闻方式。 &amp;nbsp; &amp;nbsp; 适用机型：小型摄像机/中型摄像机[液晶屏型] &amp;nbsp; &amp;nbsp; 动作要领： &amp;nbsp; &amp;nbsp; 当拍摄对象被前方人群阻挡时，建议采用本方式： &amp;nbsp; &amp;nbsp; 把翻盖式液晶屏打开，并向下方旋转45度左右； &amp;nbsp; &amp;nbsp; 右手单手握机，伸过前方人群头顶，从液晶屏上评估拍摄效果； &amp;nbsp; &amp;nbsp; 如果构图合适，即按下录像钮开始记录。&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 第三势 &amp;nbsp; &amp;nbsp; 低机位方式。 &amp;nbsp; &amp;nbsp; 适用机型：小型摄像机/中型摄像机/大型摄像机 &amp;nbsp; &amp;nbsp; 动作要领： &amp;nbsp; &amp;nbsp; 以左脚为着力点蹲下； &amp;nbsp; &amp;nbsp; 把翻盖式液晶屏打开，并向上方旋转45度左右； &amp;nbsp; &amp;nbsp; 左手托住摄像机底部，右手进行变焦、启动录像/暂停按钮等操作； &amp;nbsp; &amp;nbsp; 如果使用无液晶屏的大型摄像机，须将寻像器遮光罩扳起。&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; 第四势 &amp;nbsp; &amp;nbsp; 省力的拍摄方式。 &amp;nbsp; &amp;nbsp; 适用机型：小型摄像机/中型摄像机/大型摄像机 &amp;nbsp; &amp;nbsp; 动作要领： &amp;nbsp; &amp;nbsp; 当干了一天的拍摄工作、双腿如同灌了铅之后，你会很自然地选择这种盘腿坐在地面上地拍摄方式。当然，有了几次这样地经验之后，你可能在拍摄所有的低机位时，都会选择这种&amp;ldquo;偷懒&amp;rdquo;的方式。干活时请穿宽松的服装，女摄像师最好穿长裤，这在高强度的拍摄中肯定让你受益良多。 &amp;nbsp; &amp;nbsp; 把翻盖式液晶屏打开，并向上方旋转45度左右； &amp;nbsp; &amp;nbsp; 左手托住摄像机底部，右手进行变焦、启动录像/暂停按钮等操作； &amp;nbsp; &amp;nbsp; 如果使用无液晶屏的大型摄像机，需将寻像器遮光罩扳起。&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; 第五势 &amp;nbsp; &amp;nbsp; 移动中的中小型摄像机拍摄方式。 &amp;nbsp; &amp;nbsp; 适用机型：小型摄像机/中型摄像机 &amp;nbsp; &amp;nbsp; 动作要领： &amp;nbsp; &amp;nbsp; 如果你拍摄儿童，你会采用什么样的机位？使用常规的&amp;ldquo;第一势&amp;rdquo;？那样，画面中的小宝贝和&amp;ldquo;花骨朵&amp;rdquo;将变成头大脚小的小矮子。很多摄影摄像书都会告诉你，要让镜头与孩子们的眼睛等高，也就是&amp;ldquo;第三势&amp;rdquo;和&amp;ldquo;第四势&amp;rdquo;了。不过，孩子天生爱动，怎么办呢？现在教你&amp;ldquo;第五势&amp;rdquo;： &amp;nbsp; &amp;nbsp; 一反常规，将右手向下插入摄像机手带部分，右手手指部分托住摄像机底部； &amp;nbsp; &amp;nbsp; 如果是带有手柄的中型摄像机，可直接握住手柄，像松下DVC180和佳能XL1等手柄上设置变焦钮和录像启动/暂停按钮的机型，采用这种操作方式更加方便； &amp;nbsp; &amp;nbsp; 把翻盖式液晶屏打开，并向上方旋转45度左右； &amp;nbsp; &amp;nbsp; 注意在移动拍摄的过程中腿部和脚部动作：腿部稍弯曲，前脚掌先落地，脚跟落地要轻。&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 第六势 &amp;nbsp; &amp;nbsp; 移动中的中大型摄像机拍摄方式。 &amp;nbsp; &amp;nbsp; 适用机型：中型摄像机(无液晶屏型)/大型摄像机 &amp;nbsp; &amp;nbsp; 动作要领： &amp;nbsp; &amp;nbsp; 与上一动作的最大区别就是：弯下腰。不过，这是迫不得已，因为要看寻像器！请注意将寻像器遮光罩扳起。 &amp;nbsp; &amp;nbsp; 第七势 &amp;nbsp; &amp;nbsp; 大型摄像机最常用的基本方式。 &amp;nbsp; &amp;nbsp; 适用机型：大型摄像机 &amp;nbsp; &amp;nbsp; 动作要领： &amp;nbsp; &amp;nbsp; 请将右胳膊上臂与身体右侧夹紧，右臂向左后方用力，并利用身体的反作用力形成胳膊与身体之间的动态平衡，增加机器的稳定性； &amp;nbsp; &amp;nbsp; 必要的时候可在启动录像键前深吸一口气，再屏住呼吸开始拍摄； &amp;nbsp; &amp;nbsp; 必要的时候可将背部抵住墙壁等物体。 &amp;nbsp; &amp;nbsp; 第八势 &amp;nbsp; &amp;nbsp; 三脚架方式。 &amp;nbsp; &amp;nbsp; 适用机型：小型摄像机/中型摄像机/大型摄像机 &amp;nbsp; &amp;nbsp; 动作要领： &amp;nbsp; &amp;nbsp; 请尽量选用带有阻尼的摄像机专用三脚架； &amp;nbsp; &amp;nbsp; 如果只能选用照相机用三脚架，请尽量选择自重较重的型号，尽量减少水平摇和俯仰摇动拍摄；如果摇镜头，请尽量向下用力按住摄像机，在与地面反作用力的动态平衡中轻轻完成&amp;ldquo;摇镜头&amp;rdquo;拍摄（请多试验，只能意会，不能言传）。
&amp;nbsp;</description><pubDate>Sun, 09 Dec 2007 01:30:00 +0800</pubDate><author>血色残阳</author><comments>http://blog.csdn.net/wangjun_pfc/archive/2007/12/09/1925336.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/wangjun_pfc/archive/2007/12/09/1925336.aspx</guid><dc:creator>血色残阳</dc:creator><fs:srclink>http://blog.csdn.net/wangjun_pfc/archive/2007/12/09/1925336.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579939/1235704</fs:itemid></item><item><title>怎样提高拍摄技巧</title><link>http://blog.csdn.net/wangjun_pfc/archive/2007/12/09/1925335.aspx</link><wfw:comment>http://blog.csdn.net/wangjun_pfc/comments/1925335.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/wangjun_pfc/comments/commentRss/1925335.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/wangjun_pfc/services/trackbacks/1925335.aspx</trackback:ping><description>&amp;nbsp; 
１，多看ＤＶ拍摄技巧，然后结合着这种东西，去看电影，你会边看边思考，然后会明白很多东西．
２，去买个小的家用ＤＶ机器，搞一些自己的创作，拍点自己的作品，然后自己做后期，（次数多了以后，你就会自然而然的明白很多，你会在前期拍摄的时候，为后期考虑，你会在做后期的时候，看着前期拍摄要达到的目的）．在这种情况下，你后期要制作的效果，不明白的时候，再去找教程，再学，这是很容易让自己记住的．
３，当你对拍摄的技巧上面，或者技术上面有点了解的时候，然后，你就可以去研究硬件了，就是机器，拍摄器材，使用，
&amp;nbsp;
前期是很重要的工作。前期拍摄的不好，后期就不好制作。因为，前期工作是基础，基础不好那是致命的硬伤。光靠后期再高明也枉然。前期后期均不可以偏废，两者都很重要。可以想像一个没有起幅落幅，上下、左右摇晃象机关枪扫射的镜头，你怎么编辑？摇镜头不像摇镜头、定镜不是定镜，要角度没有角度。我看只好一剪刀剪掉得了。玩dv其实也是要学习一下这方面的理论的。光靠实践是要走很多玩路的。就拿镜头的衔接来说，你总该知道了解景别是怎么一回事。远、中、近（包括特写）景怎么衔接，你总该了解什么是前进式、什么是后退式。远景镜头的时间长度（复杂和简单一目了然的）一般需要10几秒时间？中景几秒？特写总不会来个10几秒吧。用dv拍摄一个汽车的轮胎镜头，我们总不至于叫它为汽车的特写镜头吧。同理，我们拍摄一座大山总不就认为是在给地球来特写镜头吧。说到学习，其实不一定都的上专门的高等学府。带着问题学习，进步来的更快。网络是个好东西，多来论坛泡泡，做个潜水员也好啊！不要钱能学习到好多东西。还有，看电影电视和看流媒体的广告也是一种学习。多看看人家的拍摄手法，机位的设置等等。。。。。。我自从买了dv之后，看电视的方式就发生了质的变化。现在我看这些是边看边捉摸，人家为什么要这样拍摄？为什么有不这样拍摄。都多来几个为什么，是有好处的。因为，它能使你进步更快，更能明白这个中道理。节日无事就罗嗦了怎么多。权当灌水。
&amp;nbsp;</description><pubDate>Sun, 09 Dec 2007 01:26:00 +0800</pubDate><author>血色残阳</author><comments>http://blog.csdn.net/wangjun_pfc/archive/2007/12/09/1925335.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/wangjun_pfc/archive/2007/12/09/1925335.aspx</guid><dc:creator>血色残阳</dc:creator><fs:srclink>http://blog.csdn.net/wangjun_pfc/archive/2007/12/09/1925335.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579940/1235704</fs:itemid></item><item><title>你依然坦然么？</title><link>http://blog.csdn.net/herian/archive/2007/12/09/1925333.aspx</link><wfw:comment>http://blog.csdn.net/herian/comments/1925333.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/herian/comments/commentRss/1925333.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/herian/services/trackbacks/1925333.aspx</trackback:ping><description>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 昨天告诉自己我不要AB有一天会喜欢我，我只要她过得开心点就可以了，我的心担心她比我喜欢她那份心还焦急！ 不知道是不是自己错觉，感觉如果没有我的在场，她会很开心，她也不会有拘束！也证实了自己的猜想，我的举动破坏了她一颗平安的心。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我不知道自己是什么样的感觉，只是觉得自己好无助，终究发现自己的爱是不能说出口的！ 我的爱只能存在于对别人的默默祝福中。 所以这种想法又把我逼到一个世俗的想法的境界中去了&amp;mdash;&amp;mdash;我要努力提高我世俗的&amp;ldquo;能力&amp;rdquo;！
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 知道自己仍是不甘的，离开对于我并不能坦然，但是只要我的结果是AB能开心点就够了，自古没有爱是轻松的事情！ 再宽容地相信自己一次：离开是对的！
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我没有放弃，离开不代表放弃，爱不一定要得到她！ 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 然而，我能坦然么？ 给我力量把，上帝！</description><pubDate>Sun, 09 Dec 2007 01:25:00 +0800</pubDate><author>秋歌</author><comments>http://blog.csdn.net/herian/archive/2007/12/09/1925333.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/herian/archive/2007/12/09/1925333.aspx</guid><dc:creator>秋歌</dc:creator><fs:srclink>http://blog.csdn.net/herian/archive/2007/12/09/1925333.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579941/1235704</fs:itemid></item><item><title>今天吃了意大利通心粉</title><link>http://blog.csdn.net/Azureus/archive/2007/12/09/1925334.aspx</link><wfw:comment>http://blog.csdn.net/Azureus/comments/1925334.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/Azureus/comments/commentRss/1925334.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/Azureus/services/trackbacks/1925334.aspx</trackback:ping><description>哈，今天同学的GF请同事来搓一顿，竟然是个意大利MM，然后做了通心粉。哈，第二次吃意大利通心粉，嗯，第一次是牛排打5折的时候去尝的（long long ago），不过当时是中国cook做的。这次可是正宗的。果然不错。还吃了奶酪，说实在的，好腥啊。顺便喝了点红酒，并且发现酒量越来越大了。大家边吃边聊，呵呵，谈笑风生。哈，我英语还好的嘛，还能讲些笑话之类的。大家聊的很开心。没想到这么快已经过上国际化生活了。只是单词懂的太少，比如说像豆腐之类的就不会说。最后告别，welcome here again! We'll invite u for delicious Chinese food. 跟我同住的都是大厨级的人物。昨天刚与项目组喝过酒，喝了不少，走路都有点不清醒了。好在顺利回去。本来一周以来一直对深圳感到蛮陌生，蛮害怕的，现在好了很多。虽然仍然有些陌生，但是不害怕了。这一周看代码，竟然囫囵吞枣的看完了1W多行代码。晕，接下来要消化了。带我的那个蛮厉害的，与师兄很像，两人都是对技术很狂热，甚至说话的口气都一样，并且都有不好的习惯：写代码不写注释。晕，看样子又要发挥我的特长，该写点兰花宝典出来了。不过两人之前有些不太一样之处。暂时不管，三人行，必有吾师。接下来要学的东西蛮多的，linux下的内存页式分布（其实主要是这方面的思想，代码中完全以这种形式实现的）。为了实现性能的最大化，尽量少与磁盘打交道，所有东西都在内存中，然后内存的申请释放都是自己来处理。还有内存与磁盘中内容的同步更新等。多亏过去一直在看linux代码，以这方面的内容有些了解，总算可以了解一下对方的思想。但是离学会还差的远。另外，还有数据结构，T-Tree，AVL Tree，Hash表。还有Hash Tree等等。对我这种反应很迟钝的人来说，确实是非常大的挑战。另外还有多进程的同步等等。自己真是沧海一粟。</description><pubDate>Sun, 09 Dec 2007 01:25:00 +0800</pubDate><author>Azureus</author><comments>http://blog.csdn.net/Azureus/archive/2007/12/09/1925334.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/Azureus/archive/2007/12/09/1925334.aspx</guid><dc:creator>Azureus</dc:creator><fs:srclink>http://blog.csdn.net/Azureus/archive/2007/12/09/1925334.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579942/1235704</fs:itemid></item><item><title>试验网站#3搜索引擎优化收录情况记录2007-12-9</title><link>http://blog.csdn.net/hu_zhenghui/archive/2007/12/09/1925332.aspx</link><wfw:comment>http://blog.csdn.net/hu_zhenghui/comments/1925332.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/hu_zhenghui/comments/commentRss/1925332.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/hu_zhenghui/services/trackbacks/1925332.aspx</trackback:ping><description>试验网站#3搜索引擎优化收录情况记录
        
        
            日期
            Yahoo
            google
            baidu
            sogou
        
        
            每日收录
            每日收录增量
            每日收录
            每日收录增量
            每日收录
            每日收录增量
            每日收录
            每日收录增量
        
        
            2007-7-7
            迁移至不限带宽的服务器，地理位置在美国
        
        
            2007-7-19
            3650
            &amp;nbsp;
            1
            &amp;nbsp;
            6
            &amp;nbsp;
            0
            　
        
        
            2007-7-25
            3703
            53
            114
            113
            22
            16
            0
            0
        
        
            2007-7-26
            3705
            2
            125
            11
            154
            132
            0
            0
        
        
            2007-7-27
            3702
            -3
            148
            23
            183
            29
            0
            0
        
        
            2007-7-28
            解决了url   rewrite的问题，预计对收录有一定的促进作用
        
        
            2007-7-28
            3684
            -18
            161
            13
            178
            -5
            0
            0
        
        
            2007-7-29
            3684
            0
            165
            4
            203
            25
            0
            0
        
        
            2007-7-30
            3692
            8
            232
            67
            190
            -13
            0
            0
        
        
            2007-8-1
            3695
            3
            304
            72
            182
            -8
            1
            1
        
        
            2007-8-3
            百度的收录有了突破性进展
        
        
            2007-8-3
            3787
            92
            548
            244
            1090
            908
            1
            0
        
        
            2007-8-4
            3794
            7
            690
            142
            1080
            -10
            1
            0
        
        
            2007-8-5
            3797
            3
            689
            -1
            1080
            0
            1
            0
        
        
            2007-8-6
            百度的收录又一次明显增多，猜测为三天更新一次
        
        
            2007-8-6
            3774
            -23
            688
            -1
            2300
            1220
            1
            0
        
        
            2007-8-7
            3693
            -81
            685
            -3
            2320
            20
            1
            0
        
        
            2007-8-8
            3821
            128
            634
            -51
            2320
            0
            1
            0
        
        
            2007-8-9
            3979
            158
            662
            28
            1620
            -700
            1
            0
        
        
            2007-8-10
            4133
            154
            663
            1
            1610
            -10
            1
            0
        
        
            2007-8-11
            4264
            131
            664
            1
            1570
            -40
            1
            0
        
        
            2007-8-12
            4308
            44
            664
            0
            1570
            0
            1
            0
        
        
            2007-8-13
            4229
            -79
            664
            0
            1570
            0
            1
            0
        
        
            2007-8-14
            4024
            -205
            667
            3
            1330
            -240
            1
            0
        
        
            2007-8-15
            3766
            -258
            476
            -191
            1230
            -100
            1
            0
        
        
            2007-8-16
            3624
            -142
            482
            6
            2260
            1030
            1
            0
        
        
            2007-8-17
            3624
            0
            482
            0
            2310
            50
            1
            0
        
        
            2007-8-18
            3186
            -438
            487
            5
            2260
            -50
            1
            0
        
        
            2007-8-19
            3186
            0
            483
            -4
            2310
            50
            1
            0
        
        
            2007-8-20
            2480
            -706
            312
            -171
            2290
            -20
            1
            0
        
        
            2007-8-21
            2480
            0
            313
            1
            2240
            -50
            1
            0
        
        
            2007-8-22
            2074
            -406
            346
            33
            2200
            -40
            1
            0
        
        
            2007-8-23
            1250
            -824
            345
            -1
            2270
            70
            1
            0
        
        
            2007-8-24
            1250
            0
            345
            0
            2570
            300
            1
            0
        
        
            2007-8-25
            605
            -645
            344
            -1
            2560
            -10
            1
            0
        
        
            2007-8-26
            385
            -220
            131
            -213
            2550
            -10
            1
            0
        
        
            2007-8-27
            288
            -97
            132
            1
            2330
            -220
            0
            -1
        
        
            2007-8-29
            211
            -77
            134
            2
            2300
            -30
            1
            1
        
        
            2007-8-30
            153
            -58
            135
            1
            1210
            -1090
            1
            0
        
        
            2007-8-31
            147
            -6
            153
            18
            1640
            430
            1
            0
        
        
            2007-9-1
            148
            1
            152
            -1
            1620
            -20
            1
            0
        
        
            2007-9-2
            144
            -4
            154
            2
            1600
            -20
            1
            0
        
        
            2007-9-3
            144
            0
            152
            -2
            1550
            -50
            1
            0
        
        
            2007-9-4
            141
            -3
            153
            1
            1570
            20
            1
            0
        
        
            2007-9-5
            136
            -5
            153
            0
            1570
            0
            1
            0
        
        
            2007-9-6
            136
            0
            150
            -3
            962
            -608
            1
            0
        
        
            2007-9-7
            136
            0
            166
            16
            547
            -415
            1
            0
        
        
            2007-9-8
            145
            9
            180
            14
            577
            30
            1
            0
        
        
            2007-9-9
            1
            -144
            177
            -3
            589
            12
            1
            0
        
        
            2007-9-10
            133
            132
            161
            -16
            458
            -131
            1
            0
        
        
            2007-9-11
            132
            -1
            160
            -1
            447
            -11
            1
            0
        
        
            2007-9-12
            122
            -10
            161
            1
            447
            0
            1
            0
        
        
            2007-9-13
            113
            -9
            161
            0
            407
            -40
            1
            0
        
        
            2007-9-14
            114
            1
            161
            0
            1
            -406
            1
            0
        
        
            2007-9-15
            113
            -1
            189
            28
            313
            312
            1
            0
        
        
            2007-9-16
            113
            0
            190
            1
            67
            -246
            1
            0
        
        
            2007-9-17
            113
            0
            183
            -7
            1
            -66
            1
            0
        
        
            2007-9-18
            111
            -2
            183
            0
            61
            60
            1
            0
        
        
            2007-9-19
            111
            0
            264
            81
            61
            0
            1
            0
        
        
            2007-9-20
            108
            -3
            708
            444
            339
            278
            1
            0
        
        
            2007-9-21
            109
            1
            982
            274
            5
            -334
            1
            0
        
        
            2007-9-22
            112
            3
            983
            1
            1
            -4
            1
            0
        
        
            2007-9-23
            112
            0
            977
            -6
            83
            82
            1
            0
        
        
            2007-9-24
            112
            0
            982
            5
            84
            1
            1
            0
        
        
            2007-9-25
            112
            0
            982
            0
            71
            -13
            1
            0
        
        
            2007-9-26
            113
            1
            1670
            688
            69
            -2
            1
            0
        
        
            2007-9-27
            113
            0
            1670
            0
            71
            2
            1
            0
        
        
            2007-9-28
            113
            0
            1680
            10
            71
            0
            1
            0
        
        
            2007-9-29
            109
            -4
            1680
            0
            0
            -71
            1
            0
        
        
            2007-9-30
            109
            0
            1680
            0
            0
            0
            1
            0
        
        
            2007-10-1
            5
            -104
            1670
            -10
            0
            0
            1
            0
        
        
            2007-10-2
            5
            0
            1670
            0
            0
            0
            1
            0
        
        
            2007-10-3
            5
            0
            1670
            0
            0
            0
            1
            0
        
        
            2007-10-4
            5
            0
            1670
            0
            0
            0
            1
            0
        
        
            2007-10-5
            5
            0
            1670
            0
            0
            0
            1
            0
        
        
            2007-10-6
            5
            0
            1670
            0
            0
            0
            1
            0
        
        
            2007-10-7
            5
            0
            1550
            -120
            0
            0
            1
            0
        
        
            2007-10-8
            5
            0
            1650
            100
            0
            0
            1
            0
        
        
            2007-10-10
            5
            0
            1650
            0
            0
            0
            1
            0
        
        
            2007-10-11
            5
            0
            1650
            0
            0
            0
            1
            0
        
        
            2007-10-12
            5
            0
            1660
            10
            0
            0
            1
            0
        
        
            2007-10-13
            5
            0
            1670
            10
            0
            0
            1
            0
        
        
            2007-10-14
            5
            0
            1670
            0
            0
            0
            1
            0
        
        
            2007-10-15
            5
            0
            1670
            0
            0
            0
            1
            0
        
        
            2007-10-16
            5
            0
            1700
            30
            0
            0
            1
            0
        
        
            2007-10-17
            5
            0
            1700
            0
            0
            0
            1
            0
        
        
            2007-10-18
            5
            0
            1830
            130
            0
            0
            1
            0
        
        
            2007-10-19
            5
            0
            1850
            20
            0
            0
            1
            0
        
        
            2007-10-20
            5
            0
            1910
            60
            0
            0
            1
            0
        
        
            2007-10-21
            5
            0
            1960
            50
            0
            0
            1
            0
        
        
            2007-10-22
            5
            0
            1920
            -40
            0
            0
            1
            0
        
        
            2007-10-23
            5
            0
            1920
            0
            0
            0
            1
            0
        
        
            2007-10-24
            5
            0
            1910
            -10
            0
            0
            1
            0
        
        
            2007-10-25
            5
            0
            1970
            60
            0
            0
            1
            0
        
        
            2007-10-26
            5
            0
            1970
            0
            0
            0
            1
            0
        
        
            2007-10-27
            5
            0
            2000
            30
            0
            0
            1
            0
        
        
            2007-10-28
            5
            0
            2000
            0
            0
            0
            1
            0
        
        
            2007-10-29
            5
            0
            2010
            10
            0
            0
            1
            0
        
        
            2007-10-30
            5
            0
            2010
            0
            0
            0
            1
            0
        
        
            2007-10-31
            5
            0
            2010
            0
            0
            0
            1
            0
        
        
            2007-11-1
            5
            0
            2010
            0
            0
            0
            1
            0
        
        
            2007-11-2
            5
            0
            2010
            0
            0
            0
            1
            0
        
        
            2007-11-3
            5
            0
            4250
            2240
            0
            0
            1
            0
        
        
            2007-11-4
            5
            0
            4250
            0
            0
            0
            1
            0
        
        
            2007-11-5
            5
            0
            4240
            -10
            0
            0
            1
            0
        
        
            2007-11-6
            5
            0
            4240
            0
            0
            0
            1
            0
        
        
            2007-11-7
            5
            0
            4230
            -10
            0
            0
            1
            0
        
        
            2007-11-8
            5
            0
            7000
            2770
            0
            0
            1
            0
        
        
            2007-11-9
            5
            0
            5950
            -1050
            0
            0
            1
            0
        
        
            2007-11-10
            5
            0
            7620
            1670
            0
            0
            1
            0
        
        
            2007-11-11
            5
            0
            6710
            -910
            0
            0
            1
            0
        
        
            2007-11-12
            5
            0
            6720
            10
            0
            0
            1
            0
        
        
            2007-11-13
            5
            0
            7840
            1120
            0
            0
            1
            0
        
        
            2007-11-14
            5
            0
            7840
            0
            0
            0
            1
            0
        
        
            2007-11-15
            5
            0
            7840
            0
            0
            0
            1
            0
        
        
            2007-11-16
            5
            0
            7840
            0
            0
            0
            1
            0
        
        
            2007-11-17
            5
            0
            7860
            20
            0
            0
            1
            0
        
        
            2007-11-18
            5
            0
            7870
            10
            0
            0
            1
            0
        
        
            2007-11-19
            5
            0
            7880
            10
            0
            0
            1
            0
        
        
            2007-11-20
            5
            0
            7880
            0
            0
            0
            1
            0
        
        
            2007-11-21
            5
            0
            7880
            0
            0
            0
            1
            0
        
        
            2007-11-22
            5
            0
            7880
            0
            0
            0
            1
            0
        
        
            2007-11-23
            5
            0
            8010
            130
            0
            0
            1
            0
        
        
            2007-11-24
            5
            0
            8010
            0
            0
            0
            1
            0
        
        
            2007-11-25
            5
            0
            8050
            40
            0
            0
            1
            0
        
        
            2007-11-26
            5
            0
            8050
            0
            0
            0
            1
            0
        
        
            2007-11-27
            5
            0
            8590
            540
            0
            0
            1
            0
        
        
            2007-11-28
            5
            0
            8590
            0
            0
            0
            1
            0
        
        
            2007-11-29
            5
            0
            8620
            30
            0
            0
            1
            0
        
        
            2007-11-30
            5
            0
            8920
            300
            0
            0
            1
            0
        
        
            2007-12-1
            5
            0
            8920
            0
            0
            0
            1
            0
        
        
            2007-12-2
            5
            0
            8910
            -10
            0
            0
            1
            0
        
        
            2007-12-3
            5
            0
            8900
            -10
            0
            0
            1
            0
        
        
            2007-12-4
            5
            0
            9150
            250
            0
            0
            1
            0
        
        
            2007-12-5
            5
            0
            9150
            0
            0
            0
            1
            0
        
        
            2007-12-6
            5
            0
            7680
            -1470
            0
            0
            1
            0
        
        
            2007-12-7
            5
            0
            4950
            -2730
            0
            0
            1
            0
        
        
            2007-12-8
            5
            0
            4950
            0
            0
            0
            1
            0
        
        
            2007-12-9
            5
            0
            5010
            60
            0
            0
            1
            0
        
        
            　
            　
            　
            　
            　
            　
            　
            　
            　</description><pubDate>Sun, 09 Dec 2007 01:24:00 +0800</pubDate><author>胡争辉</author><comments>http://blog.csdn.net/hu_zhenghui/archive/2007/12/09/1925332.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/hu_zhenghui/archive/2007/12/09/1925332.aspx</guid><dc:creator>胡争辉</dc:creator><fs:srclink>http://blog.csdn.net/hu_zhenghui/archive/2007/12/09/1925332.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579943/1235704</fs:itemid></item><item><title>语音笔记</title><link>http://blog.csdn.net/xwchen/archive/2007/12/09/1925331.aspx</link><wfw:comment>http://blog.csdn.net/xwchen/comments/1925331.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/xwchen/comments/commentRss/1925331.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/xwchen/services/trackbacks/1925331.aspx</trackback:ping><description>我的语音笔记1
1.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; debug voice ccapi可以debug模拟信号fxo/fxs的信令。2.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 来电显示是在第一声响铃后的信令交互。之前看不到。3.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; O 口打S口是直接振铃。S口拨O口第一声为O口响应的振铃电压。可通过voice-port模式下的ring number命令修改振铃电压次数。电压都是S口提供的。O口只提供4.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; loop start 和group start都是O 口的信令5.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; loop start不适合大的话务量。因为只要检测到建立连接就会去抓线。6.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Ground start加入了接地检查。接地检测开关会检测到没有其他方向的抓线就会闭合。7.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; E&amp;amp;M是8芯的以太网线。其类型2和5适合背对背连接。8.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; echo&amp;mdash;中文为&amp;ldquo;回声&amp;rdquo;9.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 移动强制选型是TDS-CDMA.而不是CDMA2000.10.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 数字语音适合长途传送。因为有校验机制防止10传送的时候非法。而模拟语音传送时会需要放大，把噪音也放大。11.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 两个O口是不能直接对接的。因为没人提供电压。而两个S口也不能互通。12.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 模拟变成数字步骤1)&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 采用。恩奎斯特定律。不超过两倍频率去采样。频率是采集的密度。采集的密度越细就越不失真。2)&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 量化。方法有线性和对数量化。但如果采样和量化的粒度越小，音质越好。但越消耗带宽。采成一个数值点。3)&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 编码。Encode. 用8bit及256个级别来代表声音的不同特征。有G.711为64K。因为它是8kbit采样。2*4KHZ*8bit采样，所以是64K每路。人的最高频率是3.4Khz.恩奎斯特原理是2倍的采样频率最佳。所以是2*4(3.4)*8bit=64K。4)&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 压缩。G.729 8K.13.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 量化分为a-law和u-law。14.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 数字变成模拟的步骤：1)&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 解压缩。还原。2)&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;Decode。解编码。3)&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 去噪音。15.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 有时候在GW上show interface看到有IP呼叫，是G.711。但看接口上并没有占到64K。有可能是因为开启了VAD静音检测。可以节省大致30%的带宽。16.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DSP处理分中密度和高密度。G.729为高密度处理。17.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; T1/E1的线路出来两种头，rj48和db9。都需要转成BNC头，然后才能和传输出来的BNC头对接。传输出来的都是BNC头。18.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; T1的速率是(8b*24+1)*8k=1.544M。其中加1是一个frame bit。其中8b是仿造PCM中的采样标准。每一个ds0都是8bit。而每一个ds0的速率是8b*8000次采样为64kbps.&amp;nbsp; &amp;nbsp;所以你的framing bit也有8k个。SF是将12个framing bit位为1组，而ESF则是24个framing bit位为1组。用来做同步检查等等。19.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 如果是随路信令的话，将每6个frame的最后一个bit也就是第48 bit拿出来用来传信令。比如4个bit就可以有16种信令组合。比如0001代表on-hook.0010代表off-hook。20.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 但是DTMF不能在随路信令的第48位里面传，而必须要在语音channel里面传。因为数字拨号有时候是输入数字拨号，但有时候代表的内容。比如通过语音提示输入身份证号码。所以这样肯定不能在信令channel里面传。21.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 如果在TG上的ISDN port中不起DID的话，比如4083670268。直接拨是拨不通的。需要二次拨号才行。如果不配DID，就直接有个channel起来了。而不会再转destination-pattern.22.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 查询路由的顺序是先看incoming-called-number。比如被叫号为2001。在去查整个dial-peer，看有哪个dial-peer关联哪个接口。比如.然后没有incoming-called-number.则查找answering-number。然后才第三优先级去匹配destination-pattern.第四优先级去匹配port.23.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 写了destination-pattern 就必须写port。否则show voice port summary则不会看到operation是up的状态。24.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; QSIG是一种通用的ISDN类型。用来解决不同的isdn交换机类型互联的。25.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; timeout initial是多长时间不拨号就放另一种声音不能拨号了。Timeout ringing是想多少声对方不应答就断。Timeout interdigit是拨号音之间的间隔时间。比如第一个和第二个号码之间。Timing digit 是按键时间长度。Timing interdigit是拨第一个号码和第二个号码之间必须要有足够的间隔。26.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; busyout是说如果有voip peer和pots peer的话。如有优选voip。Busyout会监控voip有没有应答。如果没有，就丢给传统pstn。27.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 数据库是怎么分工的？&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;User是放在DC-Directory，而其他所有的数据库需求包括计费这些。通过三方接口可以读取SQL计费信息。通过ldap协议可以调用dc-directory用户信息，和sql无关。好处是不用重新创建用户。 28.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 注册时的mac地址是写到skinny消息里的。不是直接查包里的mac。所以可以跨网段注册。29.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 安装CCM的前提条件是什么？J2ME要装。
&amp;nbsp;
30.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; publisher的sql数据库可以读写。而subscriber的数据库只能读不能写。因为数据库的唯一性。假如publisher为10.1。而suscriber为10.2。你可以登录10.1或者10.2修改CCM的配置。实际上都是在修改10.1的配置。但你从web配置界面是看不到此机是pub还是sub的。唯一可以确认的是到sql的库里去看。是在安装的时候就决定的。一个簇里面只有一个pub。所有在sub上所做的操作都其实是在远程修改pub上的数据库。Sub的数据库是不能更改的。只能被动的等待pub来进行复制和同步。同步是由pub主动发起去和sub同步的。但sub除了不能改库，但可以进行呼叫处理等信令消息。所以基本上pub主要是用来同步数据的。库不光包含user，也包含ip pool，region，pattern等所有添加的配置信息。31.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 如何安装BAT工具?如何使用？1)&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 32.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 除了VG248是唯一的用Skinny和CCM通讯的GW。33.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CCM里面如果加FXO口的MGCP注册的时候，attdent number号码是外线从FXO口拨近来的话，如果attdent number 是1001的话，那外面拨进来到总机的话，CCM就会转到1001这台分机去振铃。34.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 在route-list里调用一个group，group里再调用两个GW。和route-list里调用两个group，每个group里调用1个GW有什么区别？&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;答：如果两个GW的策略是一样的。哪第一种好，比较精简。但如果两个GW策略不同，如第一个GW是IP的。第二个是传统的。一个拨9，一个直拨外线。则区分不出来。这样的就只能在第二种里面配。因为在配置route-list的时候可以针对每一个group单独修改拨号规则。35.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;GW和CCM都是逐位匹配。但CCM必须要等到最长匹配的才拨出去。而GW则只要有精确的匹配的话就直接出去了。比如有个route-pattern是4567，还有个是4！。那如果拨了4567的话，是不能直接拨出去的。除了等10秒。因为还有更长的匹配是4！。36.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 如果是大型的部署在GW上，那么可以通过写translation-profile来调用多个translation-rule来突破translation-rule只能配10个的限制。37.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 为什么我们的SJC的TG拨美国本地要加1呢？需要确认。因为在北美拨号方案里拨前缀1是长途。38.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Cisco的前台都是51505150。而每个员工都有个直线为51505xxx。是如何实现的呢？&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;呼叫进来以后，总是先看最优最长匹配。但在dn号码里肯定没有51505182（engchang的号码）。所以CCM就会去查找CCM的translation-pattern。我们可以在里面配置translation-pattern里面设置mask为5xxx。这样就变成你的分机号码了。一般1条E1线的话可以申请300个号码。而如果对方呼叫号码拨叫错误拨的是51505183。而没有5183这个分机号。那就是忙音。那这样子还可以在translation-pattern里面指定一个tranform-mask为5000。这样的话，如果拨叫错误号码则可以转到前台分机。39.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 在line-group里面可以设置多个号码，如果第一个分机无人接听则自动转入第二台分机。40.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; MTP和trasncoding都是用来做不同编码格式转换。前者是软件。后者是硬件。41.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Partition是被访问权。CSS是访问权。所以当两部电话在同一个Partition里面是不一定能通的。因为只是具备了被访问权，而必须要配置CSS才具备了访问权。使用方法为所有的partition都是用在号码上。（号码包括RP，DN和translation-pattern）.而CSS是配置在device下面。 CSS默认是deny any any的。也就是说只要当一个DN分配了Partition.那其他人如果没有分配相应的权限。是不能够去拨这台有partition的分机的。同时，当两台电话都用相同的partition的话，如果这两部电话都没有被分配CSS赋予权限，那就不能相互拨通。即使他们在同一个partition里面。所以partition相当于是in方向的访问列表。而CSS则相当于是 将访问列表应用到接口。42.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 不建议在一个route－group里调用多个device。例如多个device可能一个是便宜的，一个是贵的。如果都放到一个group里面，将非常不好做策略。比如说有这样一个需求。当北京两部分机为1001和1002。美国有分机2001。正常情况1001和1002都能正常走IP的remote－gw去访问美国的2001。但当IP断掉，只允许1001走PSTN去访问2001。因为1001是老板。因为国际的PSTN很贵。所以需要在device里面去加国际前缀。当放到同一个device里面，实际上是无法区分开的。43.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; EM的tomcat链接为https://localhost/manager/list和https://localhost/ccmuser/logon.asp44.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 当用户手工去按Hold键叫User hold audio source。而其他的入Trasfer和电话会议或者Park等的叫Network Hold Audio Source。45.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Call Pickup的配置的号码不是给人拨打使用的。外线拨打的还是分机号。只是说在同一个pickup group里的电话可以相互接听。但如果一个group里的电话想接听另一个group里的电话，就需要输入group的号码才能接听。也就是说这个配置的group号码是给其他group用的，不是给外线使用的。46.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 配置AC的步骤：1)&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 启动CTI Manager和Dispatch服务。重新启动。2)&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 配置Pilot point。填写名称。和piolt point号码分配一个虚拟的电话号码做分发。3)&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 配置hunt group。加入member。成员是你想分发的实际的DN号码成员。4)&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 添加user。用户名为ac。密码为12345（必须）。5)&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 在左面板将user关联到设备device association.关联到4个设备。即一个pilot point和3个成员DN。6)&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 创建AC登录的用户名。添加user为test.关联你自己的DN号码。7)&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 在AC user配置里添加user。然后可以登录。47.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 在Vmware里选择option里的有各磁盘选项选择indepent就可以使得在虚拟机关机的时候不保存配置。（重起会保存）。48.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 在设置CME的时候，可以设置Dual-line。Dual-line的意思是一个DN可以同时看到两路电话进来。比如你这个号码正和一个人在说话，而另一个人又呼进来了，那他仍然能听到呼叫的声音。你在屏幕上也可以看到有个电话进来。可以选择是否接听。而如果没有dual-line的话，你在通话，人家再拨就是忙音。然后你也看不到有呼叫进来。 49.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 用Cor list来做拨号限制？首先是首先在进来的in-coming cor来成员member有谁。然后再去检查out-going方向的dial-peer.如果在in-coming cor里的成员包含out-going方向的成员。就能通。否则不行。50.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Translation-rule的使用范围？1 Voip的incoming2 port 的in coming3 dial-peer的outgoing.51.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CAC的种类.有四种:1 Router CAC2 CCM Location3 GK CAC4 RTR CAC。基于QOS的CAC。（是通过配置rtr的responder，新板命令是ip sla monitor以及saa responder加上fallback来实现的。）通过show call fall-back cache等状态来查看，在安装RTR探针后，可以自动按照所配置的丢包率和延时等特征来确定是否切换到pstn.可以用test callfallback命令来发送探针。52.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 什么叫做AAR？怎么做？当在CCM上使用LOCATOION，当带宽不够时，但比如说是老板，很急。想打出去。可以自动切到PSTN上打。就叫AAR。AAR也需要定义权限。可以通过AAR-Group去分配权限。53.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 路由器之间是默认G.729.54.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SRST的MOH的话只能针对外部的电话来看。当两台内部的电话被hold的时候是没有MOH的。只有外部呼内部才行。55.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SRST的transfer-pattern只得是当外部的电话达到内部时，防止内部的话机转到长途时用的。可以定义transfer-pattern来定义当外线拨内线后，内线只能帮忙再trasfer到一个800的外部免费电话。当然，内部不限。56.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; GK的好处？1 当分之站点很多躲e&amp;nbsp;&amp;nbsp;qingkuang&amp;nbsp;&amp;nbsp;xia&amp;nbsp;&amp;nbsp;,57.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; GK的配置過程？1 h323-gateway voip interface。在某一個接口上。用debug ras 可以來debug2 還有 voip-incoming translation-rule命令在全局下配置。58.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 当在配置Route-pattern的时候，你可以将urgent priority打上钩。这样你的这个rp就会率先命中。而不会等待更长的RP去匹配。比如就不会再等9.!#超时，而直接拨9110就出去了。59.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 如果要让CCM通过IP转到GW，然后GW再通过IP转发到远端的GW或CCM，这就可能需要下载新的IP-TO-IP的语音IOS。60.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SQL库的复制和同步？&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;在3.34版本以后，支持在SQL上pull subscription, 就是去拉配置。3.34 之前只支持在publisher上去push subscription.61.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CDR分析器的初始用户名和密码是admin。然后进去将一个user加入管理员组。然后退出用这个用户进去。在安装完分析器以后，在Publisher的库里面会生成一张ART的表单。62.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 库同步的步骤：1 同步时间。2 同步netbios名字。有两种方法。开启winserver来解析netbios名字。改本地的lmhost.conf文件。用nbtstat &amp;ndash;c检查是否注册成功。但这只是本地有效。63.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 如何同步时间？停掉ntp服务，然后在cmd窗口下敲ntpdate x.x.x.x或者在c:\winnt\ntp.conf文件里面去改。在疑难解析那本书里有。64.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CCS和CAS的区别是什么？一个随路信令。一个共路信令。比如T1的话，有1个channel用来为剩余的24个channel提供信令通道。叫共路。而随路是指每个channel都可以传信令和语音。如果是CAS就是配ds-group.CCS就是pri-group。而跑数据则是channle-group</description><pubDate>Sun, 09 Dec 2007 01:23:00 +0800</pubDate><author>xwchen</author><comments>http://blog.csdn.net/xwchen/archive/2007/12/09/1925331.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/xwchen/archive/2007/12/09/1925331.aspx</guid><dc:creator>xwchen</dc:creator><fs:srclink>http://blog.csdn.net/xwchen/archive/2007/12/09/1925331.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579944/1235704</fs:itemid></item><item><title>成功的条件</title><link>http://blog.csdn.net/yichangxin/archive/2007/12/09/1925330.aspx</link><wfw:comment>http://blog.csdn.net/yichangxin/comments/1925330.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/yichangxin/comments/commentRss/1925330.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/yichangxin/services/trackbacks/1925330.aspx</trackback:ping><description>&amp;nbsp;
&amp;nbsp;
什么是成功我也不知道，应该是因人而异。
也许实现目标就是一种成功，我认为。
成功需要什么条件？
第一、性格，这个大部分来自先天性，来自基因与家教！
第二、经验，这个是后天性的，主要是生活中的思考与努力！
二者不一定是成功的充要条件，但至少是必要条件，我认为。
你说哪？
&amp;nbsp;</description><pubDate>Sun, 09 Dec 2007 01:22:00 +0800</pubDate><author>Shadow</author><comments>http://blog.csdn.net/yichangxin/archive/2007/12/09/1925330.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/yichangxin/archive/2007/12/09/1925330.aspx</guid><dc:creator>Shadow</dc:creator><fs:srclink>http://blog.csdn.net/yichangxin/archive/2007/12/09/1925330.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579945/1235704</fs:itemid></item><item><title>试验网站#1搜索引擎优化收录情况记录(断续运行)2007-12-9</title><link>http://blog.csdn.net/hu_zhenghui/archive/2007/12/09/1925329.aspx</link><wfw:comment>http://blog.csdn.net/hu_zhenghui/comments/1925329.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/hu_zhenghui/comments/commentRss/1925329.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/hu_zhenghui/services/trackbacks/1925329.aspx</trackback:ping><description>试验网站#1搜索引擎优化收录情况记录(断续运行)
        
        
            日期
            Yahoo
            google
            baidu
            sogou
        
        
            每日收录
            每日收录增量
            每日收录
            每日收录增量
            每日收录
            每日收录增量
            每日收录
            每日收录增量
        
        
            2007-6-24
            288
            　
            333
            　
            1060
            　
            4813
            　
        
        
            2007-6-25
            1640
            1352
            333
            0
            1080
            20
            4813
            0
        
        
            2007-6-26
            空间超过6月流量限制&amp;hellip;&amp;hellip;，快到6月底了，也就不搬了，修改了一些参数配置，预计收录会有所下降
        
        
            2007-6-26
            1640
            0
            333
            0
            1080
            0
            4813
            0
        
        
            2007-6-27
            1850
            210
            322
            -11
            1100
            20
            4813
            0
        
        
            2007-6-28
            1118
            -732
            331
            9
            1100
            0
            4813
            0
        
        
            2007-6-29
            1230
            112
            363
            32
            1100
            0
            4813
            0
        
        
            2007-6-30
            1560
            330
            400
            37
            1100
            0
            4813
            0
        
        
            2007-7-1
            7月第一天的流量就达到了400M字节,几乎都是搜索引擎过来的，看来SEO真耗带宽啊，考虑搬家了,Sogou的收录情况有了突破性的进展
        
        
        
        
            2007-7-1
            1560
            0
            419
            19
            1100
            0
            10993
            6180
        
        
            2007-7-3
            1550
            -10
            445
            26
            1100
            0
            10993
            0
        
        
            2007-7-7
            2970
            1420
            515
            70
            983
            -117
            26759
            15766
        
        
            2007-7-7
            由于带宽原因迁移至试验网站#2
        
        
            2007-7-19
            56
            -2914
            576
            61
            17
            -966
            29524
            2765
        
        
            2007-7-25
            35
            -21
            780
            204
            46
            29
            28050
            -1474
        
        
            2007-7-26
            34
            -1
            783
            3
            22
            -24
            28050
            0
        
        
            2007-7-27
            34
            0
            787
            4
            21
            -1
            28050
            0
        
        
            2007-7-28
            34
            0
            792
            5
            20
            -1
            28050
            0
        
        
            2007-7-29
            34
            0
            792
            0
            20
            0
            28050
            0
        
        
            2007-7-30
            34
            0
            788
            -4
            20
            0
            28050
            0
        
        
            2007-8-1
            34
            0
            874
            86
            20
            0
            28048
            -2
        
        
            2007-8-3
            409
            375
            838
            -36
            0
            -20
            28048
            0
        
        
            2007-8-4
            1265
            856
            826
            -12
            0
            0
            28026
            -22
        
        
            2007-8-5
            2663
            1398
            826
            0
            0
            0
            28026
            0
        
        
            2007-8-6
            4061
            1398
            827
            1
            0
            0
            28026
            0
        
        
            2007-8-7
            5190
            1129
            826
            -1
            0
            0
            28026
            0
        
        
            2007-8-8
            5943
            753
            790
            -36
            0
            0
            28026
            0
        
        
            2007-8-9
            6480
            537
            670
            -120
            0
            0
            28026
            0
        
        
            2007-8-10
            6520
            40
            704
            34
            0
            0
            28026
            0
        
        
            2007-8-11
            6098
            -422
            704
            0
            0
            0
            28026
            0
        
        
            2007-8-12
            5174
            -924
            704
            0
            0
            0
            28026
            0
        
        
            2007-8-13
            3083
            -2091
            704
            0
            0
            0
            28026
            0
        
        
            2007-8-14
            2191
            -892
            705
            1
            0
            0
            28026
            0
        
        
            2007-8-15
            935
            -1256
            610
            -95
            0
            0
            28026
            0
        
        
            2007-8-16
            438
            -497
            635
            25
            393
            393
            28026
            0
        
        
            2007-8-17
            438
            0
            636
            1
            357
            -36
            28026
            0
        
        
            2007-8-18
            55
            -383
            650
            14
            366
            9
            28026
            0
        
        
            2007-8-19
            55
            0
            636
            -14
            314
            -52
            28026
            0
        
        
            2007-8-20
            29
            -26
            561
            -75
            251
            -63
            28026
            0
        
        
            2007-8-21
            29
            0
            557
            -4
            228
            -23
            28026
            0
        
        
            2007-8-22
            28
            -1
            460
            -97
            218
            -10
            28026
            0
        
        
            2007-8-23
            31
            3
            458
            -2
            134
            -84
            28026
            0
        
        
            2007-8-24
            31
            0
            458
            0
            122
            -12
            28026
            0
        
        
            2007-8-25
            27
            -4
            464
            6
            122
            0
            28026
            0
        
        
            2007-8-26
            18
            -9
            386
            -78
            122
            0
            28026
            0
        
        
            2007-8-27
            18
            0
            387
            1
            19
            -103
            28026
            0
        
        
            2007-8-29
            14
            -4
            387
            0
            21
            2
            28026
            0
        
        
            2007-8-30
            12
            -2
            387
            0
            13
            -8
            28026
            0
        
        
            2007-8-31
            7
            -5
            371
            -16
            9
            -4
            28026
            0
        
        
            2007-9-1
            7
            0
            96
            -275
            9
            0
            28026
            0
        
        
            2007-9-2
            7
            0
            97
            1
            19
            10
            28026
            0
        
        
            2007-9-3
            7
            0
            97
            0
            23
            4
            28026
            0
        
        
            2007-9-4
            31
            24
            100
            3
            17
            -6
            38559
            10533
        
        
            2007-9-5
            55
            24
            99
            -1
            19
            2
            38559
            0
        
        
            2007-9-6
            55
            0
            90
            -9
            5
            -14
            38559
            0
        
        
            2007-9-7
            85
            30
            58
            -32
            8
            3
            38559
            0
        
        
            2007-9-8
            24
            -61
            56
            -2
            8
            0
            38559
            0
        
        
            2007-9-9
            6
            -18
            47
            -9
            6
            -2
            38559
            0
        
        
            2007-9-10
            47
            41
            55
            8
            5
            -1
            38559
            0
        
        
            2007-9-11
            55
            8
            54
            -1
            5
            0
            38559
            0
        
        
            2007-9-12
            61
            6
            57
            3
            5
            0
            38559
            0
        
        
            2007-9-13
            38
            -23
            58
            1
            1
            -4
            41222
            2663
        
        
            2007-9-14
            55
            17
            58
            0
            3
            2
            41222
            0
        
        
            2007-9-15
            44
            -11
            60
            2
            1
            -2
            41222
            0
        
        
            2007-9-16
            31
            -13
            60
            0
            1
            0
            41222
            0
        
        
            2007-9-17
            31
            0
            59
            -1
            1
            0
            41222
            0
        
        
            2007-9-18
            8
            -23
            62
            3
            1
            0
            41865
            643
        
        
            2007-9-19
            8
            0
            66
            4
            1
            0
            41865
            0
        
        
            2007-9-20
            3
            -5
            65
            -1
            1990
            1989
            41865
            0
        
        
            2007-9-21
            3
            0
            97
            32
            1990
            0
            41865
            0
        
        
            2007-9-22
            2
            -1
            97
            0
            1520
            -470
            41865
            0
        
        
            2007-9-23
            2
            0
            97
            0
            645
            -875
            41865
            0
        
        
            2007-9-24
            2
            0
            97
            0
            722
            77
            41865
            0
        
        
            2007-9-25
            2
            0
            97
            0
            723
            1
            41865
            0
        
        
            2007-9-26
            2
            0
            314
            217
            596
            -127
            40474
            -1391
        
        
            2007-9-27
            2
            0
            314
            0
            424
            -172
            40474
            0
        
        
            2007-9-28
            2
            0
            314
            0
            299
            -125
            40474
            0
        
        
            2007-9-29
            2
            0
            314
            0
            108
            -191
            40474
            0
        
        
            2007-9-30
            2
            0
            314
            0
            97
            -11
            40474
            0
        
        
            2007-10-1
            1
            -1
            314
            0
            88
            -9
            40469
            -5
        
        
            2007-10-2
            1
            0
            314
            0
            70
            -18
            40469
            0
        
        
            2007-10-3
            1
            0
            314
            0
            76
            6
            40469
            0
        
        
            2007-10-4
            1
            0
            314
            0
            251
            175
            40469
            0
        
        
            2007-10-5
            1
            0
            314
            0
            117
            -134
            40469
            0
        
        
            2007-10-6
            5
            4
            314
            0
            160
            43
            40469
            0
        
        
            2007-10-7
            5
            0
            13
            -301
            160
            0
            40469
            0
        
        
            2007-10-8
            6
            1
            292
            279
            160
            0
            40469
            0
        
        
            2007-10-10
            6
            0
            292
            0
            270
            110
            40469
            0
        
        
            2007-10-11
            5
            -1
            292
            0
            210
            -60
            0
            -40469
        
        
            2007-10-12
            6
            1
            292
            0
            153
            -57
            0
            0
        
        
            2007-10-13
            6
            0
            292
            0
            153
            0
            0
            0
        
        
            2007-10-14
            6
            0
            87
            -205
            99
            -54
            0
            0
        
        
            2007-10-15
            6
            0
            87
            0
            82
            -17
            0
            0
        
        
            2007-10-16
            7
            1
            85
            -2
            28
            -54
            0
            0
        
        
            2007-10-17
            7
            0
            85
            0
            27
            -1
            0
            0
        
        
            2007-10-18
            2
            -5
            82
            -3
            51
            24
            0
            0
        
        
            2007-10-19
            2
            0
            83
            1
            46
            -5
            0
            0
        
        
            2007-10-20
            2
            0
            299
            216
            45
            -1
            0
            0
        
        
            2007-10-21
            2
            0
            317
            18
            57
            12
            0
            0
        
        
            2007-10-22
            2
            0
            317
            0
            42
            -15
            0
            0
        
        
            2007-10-23
            1
            -1
            316
            -1
            31
            -11
            0
            0
        
        
            2007-10-24
            1
            0
            317
            1
            25
            -6
            0
            0
        
        
            2007-10-25
            1
            0
            318
            1
            24
            -1
            0
            0
        
        
            2007-10-26
            1
            0
            319
            1
            10
            -14
            0
            0
        
        
            2007-10-27
            1
            0
            319
            0
            7
            -3
            0
            0
        
        
            2007-10-28
            1
            0
            319
            0
            6
            -1
            0
            0
        
        
            2007-10-29
            1
            0
            390
            71
            3
            -3
            0
            0
        
        
            2007-10-30
            1
            0
            391
            1
            4
            1
            1000
            1000
        
        
            2007-10-31
            1
            0
            390
            -1
            2
            -2
            1000
            0
        
        
            2007-11-1
            1
            0
            392
            2
            2
            0
            1000
            0
        
        
            2007-11-2
            1
            0
            392
            0
            0
            -2
            1000
            0
        
        
            2007-11-3
            1
            0
            317
            -75
            0
            0
            1000
            0
        
        
            2007-11-4
            2
            1
            321
            4
            2
            2
            1000
            0
        
        
            2007-11-5
            4
            2
            321
            0
            3
            1
            1000
            0
        
        
            2007-11-6
            6
            2
            323
            2
            3
            0
            1000
            0
        
        
            2007-11-7
            6
            0
            323
            0
            3
            0
            1000
            0
        
        
            2007-11-8
            6
            0
            79
            -244
            5
            2
            1000
            0
        
        
            2007-11-9
            4
            -2
            95
            16
            5
            0
            1000
            0
        
        
            2007-11-10
            6
            2
            80
            -15
            5
            0
            1000
            0
        
        
            2007-11-11
            6
            0
            271
            191
            5
            0
            1000
            0
        
        
            2007-11-12
            6
            0
            270
            -1
            5
            0
            1000
            0
        
        
            2007-11-13
            4
            -2
            80
            -190
            2
            -3
            1000
            0
        
        
            2007-11-14
            2
            -2
            80
            0
            2
            0
            1000
            0
        
        
            2007-11-15
            2
            0
            82
            2
            7
            5
            1000
            0
        
        
            2007-11-16
            2
            0
            81
            -1
            7
            0
            1000
            0
        
        
            2007-11-17
            1
            -1
            160
            79
            7
            0
            1000
            0
        
        
            2007-11-18
            1
            0
            186
            26
            8
            1
            1000
            0
        
        
            2007-11-19
            1
            0
            183
            -3
            7
            -1
            1000
            0
        
        
            2007-11-20
            1
            0
            185
            2
            5
            -2
            39556
            38556
        
        
            2007-11-21
            1
            0
            182
            -3
            5
            0
            39556
            0
        
        
            2007-11-22
            1
            0
            182
            0
            4
            -1
            39556
            0
        
        
            2007-11-23
            1
            0
            172
            -10
            3
            -1
            39556
            0
        
        
            2007-11-24
            1
            0
            172
            0
            3
            0
            39556
            0
        
        
            2007-11-25
            1
            0
            174
            2
            2
            -1
            39556
            0
        
        
            2007-11-26
            1
            0
            175
            1
            1
            -1
            39556
            0
        
        
            2007-11-27
            1
            0
            218
            43
            1
            0
            39556
            0
        
        
            2007-11-28
            1
            0
            218
            0
            1
            0
            39556
            0
        
        
            2007-11-29
            1
            0
            217
            -1
            1
            0
            39556
            0
        
        
            2007-11-30
            1
            0
            215
            -2
            1
            0
            39556
            0
        
        
            2007-12-1
            1
            0
            215
            0
            1
            0
            39556
            0
        
        
            2007-12-2
            1
            0
            214
            -1
            1
            0
            39556
            0
        
        
            2007-12-3
            1
            0
            137
            -77
            1
            0
            39556
            0
        
        
            2007-12-4
            1
            0
            136
            -1
            1
            0
            39556
            0
        
        
            2007-12-5
            1
            0
            136
            0
            0
            -1
            39556
            0
        
        
            2007-12-6
            1
            0
            138
            2
            0
            0
            39556
            0
        
        
            2007-12-7
            1
            0
            131
            -7
            0
            0
            39556
            0
        
        
            2007-12-8
            1
            0
            131
            0
            0
            0
            39556
            0
        
        
            2007-12-9
            1
            0
            98
            -33
            0
            0
            39556
            0
        
        
            　
            　
            　
            　
            　
            　
            　
            　
            　</description><pubDate>Sun, 09 Dec 2007 01:21:00 +0800</pubDate><author>胡争辉</author><comments>http://blog.csdn.net/hu_zhenghui/archive/2007/12/09/1925329.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/hu_zhenghui/archive/2007/12/09/1925329.aspx</guid><dc:creator>胡争辉</dc:creator><fs:srclink>http://blog.csdn.net/hu_zhenghui/archive/2007/12/09/1925329.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579946/1235704</fs:itemid></item><item><title>闹剧总归会结束</title><link>http://blog.csdn.net/DBCOLOR/archive/2007/12/09/1925328.aspx</link><wfw:comment>http://blog.csdn.net/DBCOLOR/comments/1925328.aspx</wfw:comment><wfw:commentRss>http://blog.csdn.net/DBCOLOR/comments/commentRss/1925328.aspx</wfw:commentRss><slash:comments>0</slash:comments><trackback:ping>http://blog.csdn.net/DBCOLOR/services/trackbacks/1925328.aspx</trackback:ping><description>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 罗说他要走了,饿想哭,饿想起了很多事情,思望,阿飞,阿燕等等等等好些很久没见的人,想起我们在一起的那些快乐时光,想起一切恩恩怨怨,&amp;nbsp;不知道多久以后我还能见到思望,不知道我还能不能开口再去叫他&amp;quot;旺才&amp;quot;,他走的时候估计是已经想着与我没有多少瓜葛了,就那么默默的走了,隔阂啊隔阂它已经形成了,思望还打电话问我阿燕的事情,我总是推脱说自己没时间去看她,她打了我好多次电话吧,每次都是在12点以后,我很倔强的以为她这只是在耍我,来海口一年了,总共就见了她一面,现在她结婚也有一年了吧,似乎记得她说我变冷漠了,表现出一副不想跟她交往的样子了,那时候我从车窗看她,那是她在强迫着自己接受一切的,我已经预料到后果了,后来她突然结婚了,我跟阿飞他们三个去她家,我看到一个我觉得并不能给她带来幸福的男人,她也曾如是说,我想我这辈子都无法忘记了,这是我第一次面对这种尴尬的局面,我知道我并不是很喜欢她,可是那现实确是在逼迫着我承认,我甚至有觉得这些都是我造成的,今晚打她电话,她也不接,估计是完蛋了,本来就已经结束的算是永远结束了,我想我已经麻木了,但我却似乎都不想要去面对这所谓的感情问题了,狗屁,纯粹是瞎闹腾,阿飞更让人不解,他从我生活里蒸发了,我在没有意识到的时候,似乎这事情已经在进行了,只是最终是成现实了,我记得我们有一次闹翻了,他对我说:&amp;quot;这是永远无法抹去的伤痛了&amp;quot;.或许他看似柔弱的外表其实很倔强,我们都只是倔强的孩子,在一个人的世界里实施着一个人的倔强.罗也要走了,今年我有见他三次吧,好象是,反正是可以拿指头数出来的,但这却是我曾经在家乡的时候,睡过一张床,穿过一条裤子的兄弟啊,屈指可数的见面次数!!!我想我是真的冷漠了,完全的麻木了.我总是以为,不论对方是什么人,不管你有多想他,多惦记挂念他,他不知道,那你所有的付出都是徒劳的,最近我很有感触,或许我自己是一个不适合与别人亲近的人吧,那不如远离那想要亲近的人最好了.我害怕付出,我很害怕,我害怕每一个即将远离我的人,那不仅仅是不能见面,而是沉封于心底永无天日.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我在想着自己了,我想我最近变的浮躁了很多,有人对我说,要爱惜自己,那好吧,我就只爱惜自己就行了.对自己好一点,让心灵沉静,我什么也不想,什么也不要,好好的努力,好好的学习.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 闹剧总归会结束,人最终都是要面对自己心灵的疑问.那就这样吧</description><pubDate>Sun, 09 Dec 2007 01:20:00 +0800</pubDate><author>阿拜彩带</author><comments>http://blog.csdn.net/DBCOLOR/archive/2007/12/09/1925328.aspx#comment</comments><guid isPermaLink="false">http://blog.csdn.net/DBCOLOR/archive/2007/12/09/1925328.aspx</guid><dc:creator>阿拜彩带</dc:creator><fs:srclink>http://blog.csdn.net/DBCOLOR/archive/2007/12/09/1925328.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/rsspages/0.xml</fs:srcfeed><fs:itemid>feedsky/csdnblog/~1222210/579947/1235704</fs:itemid></item></channel></rss>
