关于作者

用户名:superbelief
笔名:superbelief
地区: 广东-广州
行业:其他

日历  

快速登录

+ 用户名:
+ 密 码:

在线留言



http://blog.cnool.net/月影琴桥/

访问统计:
文章个数:226
评论个数:77
留言条数:4




Powered by BlogDriver 2.1

心灵感悟,学习工作体验

 

许多人都说,当你拥有的时候,你不懂得去珍惜,但当你失去之后,你会后悔莫及.大学四年,匆而过,希望我们能好好珍惜大学的美好时光,有所作为. 时间不等人,要我们去追赶,能提前完成自己的计划,已经是赶超时间了.............. 人生的坎坎坷坷,起起落落,是一种磨练,我总是在苦后觉得:没有挫折的人生是不完整的人生,生活给了希望、勇气、洗礼......... 生活的每一天,我总会提醒自己要学会微笑面对,因为每一天是很可贵的,我要珍惜度过。 得意淡然,失意坦然!努力开拓属于自己的一瞬间,虽然有得有失,但扪心自问,我不会后悔,因为曾经尽力过,面对人生起起落落,坎坎坷坷,我的态度是:岂能尽如人意,但求无愧于心..........

文章

是福不是祸,是祸躲不过....
摘要:现在好点了,运动真的很有必要的,但更要尽量注意避免不必要的伤害! 查看全文

- 作者: superbelief 2007年10月31日, 星期三 20:51  回复(0) |  引用(2) 加入博采

农村的孩子与城市的孩子
摘要:有时候,我反思同事提出很难教好大学基础英语的学生,其实我认为很大程度上不是他们学不好,关键是他们没有突破自己长久积累问题而无法自我突破的心理问题,如果这个心结解开,把压力变为动力,把不利变有利,相信真的是没有教不好的学生,只有教不好的教师。 查看全文

- 作者: superbelief 2007年10月28日, 星期日 23:24  回复(1) |  引用(2) 加入博采

国际会议(IVEF 2007)所思
摘要:不过很多事情,不经历过,又怎能进步呢?怎能积累经验呢? 查看全文

- 作者: superbelief 2007年10月26日, 星期五 18:34  回复(0) |  引用(2) 加入博采

有空常到外面看看
摘要:那天晚上,我带着微笑入睡...... 查看全文

- 作者: superbelief 2007年10月26日, 星期五 18:33  回复(0) |  引用(2) 加入博采

国际会议(IVEF)后的日子里.....
摘要:一个人来到这个世界,健康快乐平安就是福,这样活起来也年轻点,起码心态是年轻点..... 查看全文

- 作者: superbelief 2007年10月26日, 星期五 18:29  回复(0) |  引用(2) 加入博采

虚拟内存知识
什么是虚拟内存
 虚拟内存是用硬盘空间做内存来弥补计算机RAM空间的缺乏。当实际RAM满时(实际上,在RAM满之前),虚拟内存就在硬盘上创建了。当物理内存用完后,虚拟内存管理器选择最近没有用过的,低优先级的内存部分写到交换文件上。这个过程对应用是隐藏的,应用把虚拟内存和实际内存看作是一样的。
虚拟内存的作用
  不知大家发现没有,在Windows2000(XP)目录下有一个名为pagefile.sys的系统文件(Windows98下为Win386.swp),它的大小经常自己发生变动,小的时候可能只有几十兆,大的时候则有数百兆,这种毫无规律的变化实在让很多人摸不着头脑。其实,pagefile.sys是Windows下的一个虚拟内存,它的作用与物理内存基本相似,但它是作为物理内存的“后备力量”而存在的,也就是说,只有在物理内存已经不够使用的时候,它才会发挥作用。
虚拟内存的产生
  我们都知道,虽然在运行速度上硬盘不如内存,但在容量上内存是无法与硬盘相提并论的。当运行一个程序需要大量数据、占用大量内存时,内存就会被“塞满”,并将那些暂时不用的数据放到硬盘中,而这些数据所占的空间就是虚拟内存。现在我们也明白为什么pagefile.sys的大小会经常变化了。

  内存在计算机中的作用很大,电脑中所有运行的程序都需要经过内存来执行,如果执行的程序很大或很多,就会导致内存消耗殆尽。为了解决这个问题,Windows中运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,当内存占用完时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。举一个例子来说,如果电脑只有128MB物理内存的话,当读取一个容量为200MB的文件时,就必须要用到比较大的虚拟内存,文件被内存读取之后就会先储存到虚拟内存,等待内存把文件全部储存到虚拟内存之后,跟着就会把虚拟内里储存的文件释放到原来的安装目录里了。下面,就让我们一起来看看如何对虚拟内存进行设置吧。
虚拟内存的设置
  对于虚拟内存主要设置两点,即内存大小和分页位置,内存大小就是设置虚拟内存最小为多少和最大为多少;而分页位置则是设置虚拟内存应使用那个分区中的硬盘空间。对于内存大小的设置,如何得到最小值和最大值呢?你可以通过下面的方法获得:选择“开始→程序→附件→系统工具→系统监视器”(如果系统工具中没有,可以通过“添加/删除程序”中的Windows安装程序进行安装)打开系统监视器,然后选择“编辑→添加项目”,在“类型”项中选择“内存管理程序”,在右侧的列表选择“交换文件大小”。这样随着你的操作,会显示出交换文件值的波动情况,你可以把经常要使用到的程序打开,然后对它们进行使用,这时查看一下系统监视器中的表现值,由于用户每次使用电脑时的情况都不尽相同,因此,最好能够通过较长时间对交换文件进行监视来找出最符合您的交换文件的数值,这样才能保证系统性能稳定以及保持在最佳的状态。

  找出最合适的范围值后,在设置虚拟内存时,用鼠标右键点击“我的电脑”,选择“属性”,弹出系统属性窗口,选择“性能”标签,点击下面“虚拟内存”按钮,弹出虚拟内存设置窗口,点击“用户自己指定虚拟内存设置”单选按钮,“硬盘”选较大剩余空间的分区,然后在“最小值”和“最大值”文本框中输入合适的范围值。如果您感觉使用系统监视器来获得最大和最小值有些麻烦的话,这里完全可以选择“让Windows管理虚拟内存设置”。

  调整分页位置

  Windows9x的虚拟内存分页位置,其实就是保存在C盘根目录下的一个虚拟内存文件(也称为交换文件)Win386.swp,它的存放位置可以是任何一个分区,如果系统盘C容量有限,我们可以把Win386.swp调到别的分区中,方法是在记事本中打开System.ini(C:Windows下)文件,在[386Enh]小节中,将“PagingDrive=C:WindowsWin386.swp”,改为其他分区的路径,如将交换文件放在D:中,则改为“PagingDrive=D:Win386.swp”,如没有上述语句可以直接键入即可。

  而对于使用Windows2000和WindowsXP的,可以选择“控制面板→系统→高级→性能”中的“设置→高级→更改”,打开虚拟内存设置窗口,在驱动器[卷标]中默认选择的是系统所在的分区,如果想更改到其他分区中,首先要把原先的分区设置为无分页文件,然后再选择其他分区。

  或者,WinXP一般要求物理内存在256M以上。如果你喜欢玩大型3D游戏,而内存(包括显存)又不够大,系统会经常提示说虚拟内存不够,系统会自动调整(虚拟内存设置为系统管理)。

  如果你的硬盘空间够大,你也可以自己设置虚拟内存,具体步骤如下:右键单击“我的电脑”→属性→高级→性能设置→高级→虚拟内存更改→选择虚拟内存(页面文件)存放的分区→自定义大小→确定最大值和最小值→设置。一般来说,虚拟内存为物理内存的1.5倍,稍大一点也可以,如果你不想虚拟内存频繁改动,可以将最大值和最小值设置为一样。{另一种说法:调整时我们需要注意,不要将最大、最小页面文件设为等值。因为通常内存不会真正“塞满”,它会在内存储量到达一定程度时,自动将一部分暂时不用的数据放到硬盘中。最小页面文件越大,所占比例就低,执行的速度也就越慢。最大页面文件是极限值,有时打开很多程序,内存和最小页面文件都已“塞满”,就会自动溢出到最大页面文件。所以将两者设为等值是不合理的。一般情况下,最小页面文件设得小些,这样能在内存中尽可能存储更多数据,效率就越高。最大页面文件设得大些,以免出现“满员”的情况。

PS:①1.5倍虚拟内存设置,是网上技术文档通用说明的,个人认为可以根据常用软件的实际情况设定。推荐有经验的用户使用。
②现在有很多工具软件(例如WINDOWS优化大师、超级兔子),可以很好的更改这些设置,工具软件也会根据你的电脑的实际情况进行相应的推荐设置。
虚拟内存使用技巧
  对于虚拟内存如何设置的问题,微软已经给我们提供了官方的解决办法,对于一般情况下,我们推荐采用如下的设置方法:

  (1)在Windows系统所在分区设置页面文件,文件的大小由你对系统的设置决定。具体设置方法如下:打开"我的电脑"的"属性"设置窗口,切换到"高级"选项卡,在"启动和故障恢复"窗口的"写入调试信息"栏,如果你采用的是"无",则将页面文件大小设置为2MB左右,如果采用"核心内存存储"和"完全内存存储",则将页面文件值设置得大一,跟物理内存差不多就可以了。

  小提示:对于系统分区是否设置页面文件,这里有一个矛盾:如果设置,则系统有可能会频繁读取这部分页面文件,从而加大系统盘所在磁道的负荷,但如果不设置,当系统出现蓝屏死机(特别是STOP错误)的时候,无法创建转储文件(Memory.dmp),从而无法进行程序调试和错误报告了。所以折中的办法是在系统盘设置较小的页面文件,只要够用就行了。

  (2)单独建立一个空白分区,在该分区设置虚拟内存,其最小值设置为物理内存的1.5倍,最大值设置为物理内存的3倍,该分区专门用来存储页面文件,不要再存放其它任何文件。之所以单独划分一个分区用来设置虚拟内存,主要是基于两点考虑:其一,由于该分区上没有其它文件,这样分区不会产生磁盘碎片,这样能保证页面文件的数据读写不受磁盘碎片的干扰;其二,按照Windows对内存的管理技术,Windows会优先使用不经常访问的分区上的页面文件,这样也减少了读取系统盘里的页面文件的机会,减轻了系统盘的压力。

  (3)其它硬盘分区不设置任何页面文件。当然,如果你有多个硬盘,则可以为每个硬盘都创建一个页面文件。当信息分布在多个页面文件上时,硬盘控制器可以同时在多个硬盘上执行读取和写入操作。这样系统性能将得到提高。
虚拟内存设置注意事项
  允许设置的虚拟内存最小值为2MB,最大值不能超过当前硬盘的剩余空间值,同时也不能超过32位操作系统的内存寻址范围——4GB。

  1、禁用页面文件

  当拥有了1G以上的内存时,页面文件的作用将不再明显,因此我们可以将其禁用。方法是:依次进入注册表编辑器“HKEY_LOCAL_MACHINESystemCurrentControlSetControlSessionMa-nagerMemoryManagement”下,在“DisablePa-gingExecutive”(禁用页面文件)选项中将其值设为“1”即可。

PS:此举可能会造成系统不稳定.某些程序无法运行或死机。请根据自己实际情况更改。
1G以上内存就比较够用了,玩游戏、使用大型软件不推荐禁用虚拟内存。当然如果内存有2G的时候,可以根据自己的实际情况选择虚拟内存的使用大小(我个人认为2G内存可以禁用虚拟内存以提升系统性能,VISTA系统内存使用比较大,可以根据实际情况设定)。

  2、清空页面文件

  在同一位置上有一个“ClearPageFileAtShutdown(关机时清除页面文件)”,将该值设为“1”。这里所说的“清除”页面文件并非是指从硬盘上完全删除pagefile.sys文件,而是对其进行“清洗”和整理,从而为下次启动WindowsXP时更好地利用虚拟内存做好准备。

- 作者: superbelief 2007年09月20日, 星期四 11:36  回复(1) |  引用(2) 加入博采

最新百姓生活关注

问:此次猪肉价格上涨,主要有哪些原因?

答:此次猪肉价格上涨,最根本的原因是猪肉供不应求,拉动价格上涨。

首先,我国生猪以分散养殖为主,由于信息传导不畅,经常发生“供不应求”和“供大于求”交替出现的周期性波动。2006年上半年,全国生猪价格持续大幅下跌,养殖户为减轻损失,宰杀母猪,贱卖小猪,导致今年上半年生猪存栏和出栏数量严重不足。据发展改革委、农业部、商务部等部门联合调查,今年5月份生猪存栏数量比去年同期下降15%-20%左右,主要屠宰企业的生猪屠宰量也出现明显下降,上市猪肉明显减少。

其次,部分生猪主产区发生生猪蓝耳病等疫情,造成母猪流产、死胎,生猪存栏进一步下降,也是一个重要原因。由于担心疫病带来的风险损失,养殖户在当前猪价升高的情况下,补栏积极性仍然不是很高,尤其是不敢补充母猪。据对部分种猪养殖企业调查,6月份后备母猪销售量同比下降了20%-30%。

再次,国内外饲料价格持续上涨,加大养殖成本,对生猪供应产生不利影响。受深加工需求快速增长等因素影响,国内市场玉米价格持续上涨,直接影响到养殖成本。7月10日全国玉米平均价格达每吨1650元,较4月中旬上涨7.1%,平均每吨上涨110元。国际市场饲料价格今年以来也一路上扬,今年6月美国芝加哥期货交易所玉米期货价格同比上涨57.6%,大豆价格上涨39.7%。

此外,今年夏天我国部分地区持续高温,严重洪涝灾害频发,不少道路中断,给产销区之间的生猪及猪肉调运造成很大困难。加上我国物流体系总体还比较落后,运输成本高,也影响了商务部门进行区域调剂。

问:针对此次猪肉价格上涨,商务部门采取了哪些方面的措施稳定市场?

答:解决猪肉供求矛盾,要从生产、流通两大环节入手。生产环节增加生猪产量,提供数量充分、无病无害的生猪上市,这是根本性、基础性的措施。流通环节加强产销衔接,做好区域调剂,保证质量安全,也是不可缺少的。商务部作为主管贸易的政府部门,主要做了以下工作:

第一,加强市场供求和价格监测。商务部5月下旬及时启动了生活必需品市场监测日报制度,全面监测从养殖尝屠宰尝肉食加工厂到批发市尝超市的全过程,对猪肉价格上涨原因、后期走势等问题进行分析,将市场动态及时上报国务院,并提出对策建议。同时,通过商务部网站“商务天气预报”栏目和社会媒体,发布猪肉及其替代品的市场供求及价格信息,指导企业生产经营,引导居民理性消费。5月中旬以来,共向社会发布猪肉市场信息880余篇。

第二,做好产销、供求衔接。商务部组织北京与吉林、天津点击查看天津及更多城市天气预报与山东、上海点击查看上海及更多城市天气预报与河南等地商务主管部门,签订了猪肉主销区和主产区产销衔接合作意向书。北京市商务局组织屠宰企业与吉林省养殖基地合作,目前北京市场上产自吉林省的猪肉已达20%以上。7月11日,北京市重点肉类加工企业生猪屠宰量较6月30日增加7.3%。其他传统的产、销区之间,也抓紧签订生猪长期供应协议,组织生猪采购调运,增加销区市场供应。

第三,根据应急预案加强市场调剂。商务部制定了猪肉市场供应应急预案,在发展改革委、农业部支持下,会同财政部进一步完善了中央、地方两级储备制度,要求各地对辖区内猪肉储备进行检查,确保应急时能够调得动、用得上。为保障遭受严重自然灾害地区的猪肉供应不脱销、不断档,商务部已经投放了部分国家储备肉,保障当地人民群众的正常生活。今后如有必要,将继续适时向市场投放储备肉。

第四,加强肉品质量安全管理。商务部会同公安、卫生、工商、食品药品监管等部门,严厉打击私屠滥宰、制售注水肉和病害肉等不法行为,加强肉品市场管理,维护市场正常秩序,确保消费者食肉安全。商务部组织了6个检查组,对全国17个省市生猪屠宰和肉品安全情况进行检查。

- 作者: superbelief 2007年07月15日, 星期日 14:12  回复(0) |  引用(3) 加入博采

ASPUpload上传的实现代码
关于无组件上传类被认为是病毒的公告

最近发现不少上传组件被认为是病毒而杀掉,具体表现为客户论坛名为upload.inc,upload_fun.asp的文件被认为是病毒文件而杀掉,具体原因是因为国内很多论坛程序使用了名为“无惧上传类”的一段通过ado.stream组件上传的代码。这段代码被不少安全机构认为是对于Web服务器有恶意威胁,自从五月起将其归类为backdoor.sinups恶意程序而查杀。具体安全公告请参阅http://www.sarc.com/avcenter/venc/data/backdoor.sinups.html

所谓“无组件上传”,是指通过Windows服务器内建ADO.Stream对象实现的一种文件上传方式,一般用于客户的图片,文件等Web上传程序,相对于其他上传方式来说,无组件上传没有特殊的组件要求,但是其上传功能是继承自asp内部对象,上传功能不是非常稳定,对于asp脚本执行时间有较高要求,并对于上传大小有一定限制。因此,推荐客户使用我们提供的ASPUpload上传组件。使用aspupload可以使您站点的上传功能更为稳定,健壮。对于aspupload,目前使用中的绝大多数程序都可以支持,只需要将您的站点程序设置为使用aspupload上传功能即可。并请客户不要使用“无惧上传类”这段代码,以避免不必要的麻烦。

请慎重处理好您站点程序的上传功能,以避免站点可能出现的安全隐患。

下面送上ASPUpload上传的实现代码(测试通过):
fileconfig.asp
<%
Dim UploadFilePath,UploadLimitSize,UploadfileAllowext,BrowerFilePath
UploadFilePath = "/upfile/"&year(now)&"_"&month(now)&"_"&day(now)&"/"
'文件上传路径

BrowerFilePath = "/upfile/"

UploadLimitSize = 1024*50'50M
'最大上传文件大小,单位为K

UploadfileAllowext = ".txt|.asp|.rar"
'可以上传的文件类型

function CanUpload(Fileurl)
Fileurl = lcase("|"& Mid(Fileurl, InstrRev(Fileurl, ".") + 1)& "|")
UploadfileAllowextstr = "|"&UploadfileAllowext&"|"
if instr(UploadfileAllowextstr,Fileurl)>0 then
CanUpload = false
else
CanUpload = true
end if
end function

Function CreateFolder(Filepath)
Dim fso, f
on error resume next
Set fso = CreateObject("Scripting.FileSystemObject")
if not fso.FolderExists(Filepath) then
Set f = fso.CreateFolder(Filepath)
set f = Nothing
end if
set fso = Nothing
End Function
%>
framebar.asp
<%@EnableSessionState=False%>
<% Response.Expires = -1 %>
<title>正在上传............</title>
<style type='text/css'>td {font-family:Tahoma; font-size: 8pt }</style>
<BODY BGCOLOR="menu" scroll="NO" frameborder="NO" status="no" style="border:0px;">
<script language="JavaScript">
<!--
function Stopupload()
{
if (typeof(window.opener)!="undefined"){
try{
window.opener.document.execCommand("stop");
}
catch(e){}
}
else if(typeof(window.dialogArguments)!="undefined"){
try{
window.dialogArguments.document.execCommand("stop");
}
catch(e){}
}
window.close();
}
//-->
</script>
<IFRAME src="bar.asp?PID=<%= Request("PID") & "&to=" & Request("to") %>" title="Uploading" noresize scrolling=no
frameborder=0 framespacing=10 width=369 height=115></IFRAME>
<TABLE BORDER="0" WIDTH="100%" cellpadding="2" cellspacing="0">
<TR><TD ALIGN="center"><button onclick="Stopupload()" style="font-size:12px;">取消上传</button>
</TD></TR>
</TABLE>
</BODY>
</HTML>
bar.asp
<%@EnableSessionState=False%>
<%
Response.Expires = -1
PID = Request("PID")
TimeO = Request("to")
Set UploadProgress = Server.CreateObject("Persits.UploadProgress")
format = "<br><CENTER><b>正在上传,请耐心等待...</b></CENTER><br>%T%t%B3%T 速度:(%S/秒) 估计剩余时间:%R %r%U / %V(%P)%l%t"
bar_content = UploadProgress.FormatProgress(PID, TimeO, "#00007F", format)
If "" = bar_content Then
%>
<HTML>
<HEAD>
<TITLE>Upload Finished</TITLE>
<SCRIPT LANGUAGE="JavaScript">
function CloseMe()
{
window.parent.close();
return true;
}
</SCRIPT>
</HEAD>
<BODY OnLoad="CloseMe()" BGCOLOR="menu">
</BODY>
</HTML>
<%
Else ' Not finished yet
%>
<HTML>
<HEAD>
<meta HTTP-EQUIV="Refresh" CONTENT="1;URL=<%
Response.Write Request.ServerVariables("URL")
Response.Write "?to=" & TimeO & "&PID=" & PID %>">
<TITLE>正在上传文件...</TITLE>
<style type="text/css">
body,td {font-family:Tahoma; font-size: 8pt }
td.spread {font-size: 6pt; line-height:6pt }
td.brick {font-size:6pt; height:12px}
</style>
</HEAD>
<BODY BGCOLOR="menu" topmargin=0>
<% = bar_content %>
</BODY>
</HTML>
<% End If %>
uploadfile.asp
<!--#include file='fileconfig.asp'-->
<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="Keywords" content="">
<meta name="Author" content="haiwa">
<title>Upload</title>
<style>
<!--
* {font:12px;}
-->
</style>
</head>
<body>
<%
On Error Resume Next
Server.ScriptTimeOut=999999
if request("act")="upload" then
dim folder,savepath
savepath=Server.MapPath(UploadFilePath)
CreateFolder(savepath)
Set Upload=Server.CreateObject("Persits.Upload")
Upload.SetMaxSize UploadLimitSize*1024, True
Upload.OverwriteFiles = false
if Request.QueryString("PID") = "" then
Upload.ProgressID="010D60EB00C5AA4B"
else
Upload.ProgressID=Request.QueryString("PID")
end i
Count=Upload.Save(savepath)
If Err.Number <> 0 Then
Response.Write "<div style=""color:red;font-size:12px;"">出现错误: " & Err.Number & "、" & Err.Description &"<a href=""javascript:history.go(-1)"">重新上传</a></div>"
End If
If Err.Number = 8 Then
Response.Write "<div style=""color:red;font-size:12px;"">你上传的文件超过限制("& UploadLimitSize/1024 &"M)<a href=""javascript:history.go(-1)"">重新上传</a></div>"
response.end
end if
dim inputname
dim size,rs_upfile
For Each File in Upload.Files
if not CanUpload(File.ext) then
File.Delete
response.write "<div style=""color:red;font-size:12px;"">"&file.filename &"("& file.size &") 格式不正确!<a href=""javascript:history.go(-1)"">重新上传</a></div>"
else
response.write "<div style=""color:green;font-size:12px;""><!-- "&file.filename &"("& file.size &") --> 上传成功"%><a href="javascript:history.go(-1)">重新上传</a></div><%
end if
next
else
%>
<%
dim SPid,PID,barref
Set UploadProgress = Server.CreateObject("Persits.UploadProgress")
SPid = UploadProgress.CreateProgressID()
PID = "PID=" & SPid
barref = "framebar.asp?to=10&" & PID
%>
<SCRIPT LANGUAGE="JavaScript">
function ShowProgress()
{
strAppVersion = navigator.appVersion;
if (document.MyForm.FILE1.value != "")
{
if (strAppVersion.indexOf('MSIE') != -1 && strAppVersion.substr(strAppVersion.indexOf('MSIE')+5,1) > 4)
{
winstyle = "dialogWidth=375px; dialogHeight:175px; center:yes;status:no";
window.showModelessDialog('<% = barref %>&b=IE',window,winstyle);
}
else
{
window.open('<% = barref %>&b=NN','','width=370,height=165', true);
}
}
return true;
}
function chk()
{
if (MyForm.FILE1.value=="")
{
alert("请从硬盘选择你要上传的文件...");
return false;
}
}
</SCRIPT>
<FORM NAME="MyForm" method="post" ENCTYPE="multipart/form-data" ACTION="?<% = PID %>&act=upload" OnSubmit="return ShowProgress();">
<INPUT NAME="FILE1" TYPE="FILE" SIZE="16"> <input name="Submit" type="submit" value="上 传" onclick="return chk()"></FORM>
<%end if%>
</body>
</html>

- 作者: superbelief 2007年06月12日, 星期二 16:35  回复(0) |  引用(3) 加入博采

rs.open sql,conn,3,3语句中的3,3是什么用处
摘要:rs.open sql,conn,3,3语句中的3,3是什么用处 查看全文

- 作者: superbelief 2007年06月12日, 星期二 15:45  回复(1) |  引用(3) 加入博采

检测用户是否安装RealPlayer播放器

在页面的<head></head>部分加入以下JavaScript代码,用以检测用户是否安装RealPlayer播放器:

<SCRIPT LANGUAGE=JavaScript>

<!--

var RealMode=0;

var RealPlayer5=0;

var RealPlayer4=0;

var RealPlayerG2=0;

if (navigator.userAgent.indexOf("MSIE")< 0 )

{

        numPlugins = navigator.plugins.length;

        for (i = 0; i < numPlugins; i++)

        {

            plugin = navigator.plugins[i];

            if (plugin.name.substring(0,10)=="RealPlayer")

            {

                RealMode=1;

            }

        }

    }


- 作者: superbelief 2007年05月29日, 星期二 16:34  回复(0) |  引用(3) 加入博采

如何判断客户端是否已安装播放器或插件
如何判断客户端是否已安装播放器或插件
解决思路
       其实每个播放器或插件都是以ActivX控件的形式调用的,而且都有clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 这样的控件ID号,而在IE的默认行为clientCaps中有isComponentInstalled方法可以判断指定控件是否已被安装。
具体步骤
代码示例:

<script>
function isInsalled(oID){
with(event.srcElement){//给事件发生的对象添加clientCaps默认行为
addBehavior(’#default#clientcaps’)                 
//根据控件的ID检测是否已经安装,是的话继续检测控件版本,否则提示"未安装"
isComponentInstalled(oID,"componentid")?alert(’已安装,版本:’+getComponentVersion(oID,"componentid")):alert("未安装")        
}}
</script>
<button onclick="isInsalled(’{D27CDB6E-AE6D-11cf-96B8-444553540000}’)">Micromedia Flash Player</button>
<button onclick="isInsalled(’{22d6f312-b0f6-11d0-94ab-0080c74c7e95}’)">Window Media Player</button>


特别提示
代码运行后,单击按钮,将弹出警告框,提示播放器插件是否已安装。图2.4.4是单击【Window Media Player】按钮后的检测结果。

图2.4.4 检测是否已安装Mediw Player插件的结果

特别说明


本例问题的解决,主要是依靠IE的强大的默认行为clientCaps。在单击按钮时调用isInsalled函数,用addBehavior方法给该按钮添加clientCaps行为,然后利用clientCaps行为的isComponentInstalled方法判断指定控件是否已安装,如果已安装,继续用getComponentVersion方法获取已安装的控件版本号。 
clientCaps 行为的方法说明如下:
addComponentRequest 添加指定组件到将要安装的组件队列。
clearComponentRequest 清除所有请求下载的组件队列。
compareVersions 比较两个版本号。
doComponentRequest 下载所有用addComponentRequest方法添加到队列的组件。
getComponentVersion 获取指定组件的版本号。
isComponentInstalled 获取指定组件是否已安装。

- 作者: superbelief 2007年05月29日, 星期二 16:32  回复(0) |  引用(3) 加入博采

常用网页播放器代码
 常用网页播放器代码

我在网页上看到的播放器无外乎WMP/RealOne/Macromedia Flash Player,其他的无非是面板不同,或者添加了其他控件,对于计算机上安装的一些播放器也都是编码和解码器的整合,其最核心的编码和解码技术是相同的。例如:网络上最流行的windows media流(asf,wma,wmv格式...),Real流(rm,rmvb...),还有MPEG系列编码格式(MP4/MP3格式...)
Windows Media Video 是微软推出的一种流媒体格式,它是在“同门”的ASF(Advanced Stream Format)格式升级延伸来得.在同等视频质量下,WMV格式的体积非常小,因此很适合在网上播放和传输。Windows Media Player9兼容所有格式的WMV,官方编码器是Windows Media Encoder ,但是如果你想转制 高质量的wmv文件,那您一定要有超大的内存来处理数据...
无意中发现CASTPOST的播放器可以自己定义大小,对于WMV格式的在线播放可以说已经足够快了,然后就费了好大劲把一些精彩的短片和一些经典的MTV转化WMV格式放了上来,尽管现在不能下载了,但是只要不是连接人数过多,播放起来还是很流畅的^_^

WMP加入了ActiveX解码器控件,不仅可以放曲子,还能放Flash和其它视频文件
<object align=middle classid="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95" class=OBJECT id=MediaPlayer width=196 height=196>
<param name=ShowStatusBar value=0>
<param name=Filename value="http://202.116.*.*/video/story/chinese/hynh/b.wmv">
<embed type=application/x-oleobject codebase="http://activex.microsoft.com/activex/con ... n/nsmp2inf.cab#Version=5,1,52,701" >
</embed>
</object>
想用WMP连续播放请参照ASX元文件使用讲解:使用ASX播放列表吧

上面的这个播放器是老式的那种,6.4版本!新式播放器是在MediaPlayer9.0以后出现的,也就是说只有装了9.0或9.0以上的播放器才能正常使用的。


下面是新式播放器代码,相对以前的来说要简单很多:
<object id="player" height="64" width="260" classid="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6">
<param NAME="AutoStart" VALUE="-1">
<!--是否自动播放-->
<param NAME="Balance" VALUE="0">
<!--调整左右声道平衡,同上面旧播放器代码-->
<param name="enabled" value="-1">
<!--播放器是否可人为控制-->
<param NAME="EnableContextMenu" VALUE="-1">
<!--是否启用上下文菜单-->
<param NAME="url" value="/blog/1.wma">
<!--播放的文件地址-->
<param NAME="PlayCount" VALUE="1">
<!--播放次数控制,为整数-->
<param name="rate" value="1">
<!--播放速率控制,1为正常,允许小数,1.0-2.0-->
<param name="currentPosition" value="0">
<!--控件设置:当前位置-->
<param name="currentMarker" value="0">
<!--控件设置:当前标记-->
<param name="defaultFrame" value="">
<!--显示默认框架-->
<param name="invokeURLs" value="0">
<!--脚本命令设置:是否调用URL-->
<param name="baseURL" value="">
<!--脚本命令设置:被调用的URL-->
<param name="stretchToFit" value="0">
<!--是否按比例伸展-->
<param name="volume" value="50">
<!--默认声音大小0%-100%,50则为50%-->
<param name="mute" value="0">
<!--是否静音-->
<param name="uiMode" value="mini">
<!--播放器显示模式:Full显示全部;mini最简化;None不显示播放控制,只显示视频窗口;invisible全部不显示-->
<param name="windowlessVideo" value="0">
<!--如果是0可以允许全屏,否则只能在窗口中查看-->
<param name="fullScreen" value="0">
<!--开始播放是否自动全屏-->
<param name="enableErrorDialogs" value="-1">
<!--是否启用错误提示报告-->
<param name="SAMIStyle" value>
<!--SAMI样式-->
<param name="SAMILang" value>
<!--SAMI语言-->
<param name="SAMIFilename" value>
<!--字幕ID-->
</object>


--------------------------------------------------------------------------------


RealOne播放器代码:
<object id="vid" classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" width=427 height=300>
<param name="_ExtentX" value="11298">
<param name="_ExtentY" value="7938">
<param name="AUTOSTART" value="-1">
<param name="SHUFFLE" value="0">
<param name="PREFETCH" value="0">
<param name="NOLABELS" value="-1">
<param name="SRC" value="rtsp://211.89.225.1/encoder/cnr3";>
<param name="CONTROLS" value="Imagewindow">
<param name="CONSOLE" value="clip1">
<param name="LOOP" value="0">
<param name="NUMLOOP" value="0">
<param name="CENTER" value="0">
<param name="MAINTAINASPECT" value="0">
<param name="BACKGROUNDCOLOR" value="#000000">
</object> <object id="vid2" classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" width=427 height=30>
<param name="_ExtentX" value="11298">
<param name="_ExtentY" value="794">
<param name="AUTOSTART" value="-1">
<param name="SHUFFLE" value="0">
<param name="PREFETCH" value="0">
<param name="NOLABELS" value="-1">
<param name="SRC" value="rtsp://211.89.225.1/encoder/cnr3";>
<param name="CONTROLS" value="ControlPanel">
<param name="CONSOLE" value="clip1">
<param name="LOOP" value="0">
<param name="NUMLOOP" value="0">
<param name="CENTER" value="0">
<param name="MAINTAINASPECT" value="0">
<param name="BACKGROUNDCOLOR" value="#000000">
</object>

--------------------------------------------------------------------------------

看着很多很复杂的样子,其实就是多了些播放器参数,可以不要...
Real Player 网页播放器 参数含义

参数:autostart 属性:True或是False 作用:指定是否自动播放指定的源文件
参数:backgroundcolor 属性:任何用符号“#”开头的16进制数值或是任何预定义的颜色作用:指定图像窗口的背景颜色
参数:center 属性:True或是False 作用:指定片断使用初始编码大小播放,并且在图像窗口的中央。
参数:classid 属性:"clsid:CFCDAA03-8BE4-1lcf-B84B0020AFBBCCFA:** 作用:用于指定ActiveX控件的唯一的字符串标示,可以认出嵌入的RealPalyer播放器。
参数:console 属性:任何字符串作用:可以将各种不同的RealPlayer控制聚集在网页上,这样它们可以交互使用或是保持独立,而且互相不影响
参数:controls 属性:ImageWindow,All,ControlPanel,PlavButton,PlayOnlyButton, PauseButton,StopButton,FFCtrl,RWCtrl,MuteCtrl,MuteVolume,VolumeSlider,PositionSlider,TACCtrl,HomeCtrl,InfoVolumePanel,InfoPanel,StatusBar,StatusField,PositionField 作用:可以让你指定那些控制是可见的。
参数:height 属性:任何整数值作用:指定RealPlayer元素的高度,单位:像素
参数:id 属性:任何字符串作用:为标签中的RealPlayer元素指定名字。
参数:imagestatus 属性:True或是False 作用:指定是否在图像窗口中显示状态信息,默认值是true
参数:loop 属性:True或是False 作用:可以让你指定片断是否无限循环
参数:maintainaspect 属性:True是False 作用:默认RealPlayer拉伸所有的片断来充满整个图像窗口。
参数:name 属性:任何字符串作用:为标签中的RealPlayer元素指定名字(在标签中使用id)
参数:nojava 属性:True或是False 作用:避免启动Java虚拟机
参数:nolabels 属性:True或是False 作用:可以禁止显示标题或是版权信息(realplayer5.0以上时,它是垃圾...)
参数:nologo 属性:True或是False 作用:避免RealPlayer启动时在图像窗口中显示
参数:numloop 属性:任何整数值作用:让你能够指定文件片循环的次数,不需要参数loop
参数:prefetch 属性:True或是False 作用:指定在播放前,RealPlayer是否可以获得流描述信息,默认值是False
参数:region 属性:任何字符串作用:同SMIL一起使用。允许你指定使用HTML代替SMIL
参数:scriptcallbacks 属性:用逗号分割的列表作用:指定浏览器的回调监控(好高级的东东!)
参数:shuffle 属性:True或是False 作用:同多文件片的ram文件或是SMIL文件一起使用。可以让RealPlayer随机播放列表中的文件
参数:src 属性:任何合法的相对或是完整的URL 作用:指定播放的文件或是源文件的地址
参数:type 属性:字符串作用:为嵌入插件指定MIME类型
参数:width 属性:任何整数值作用:指定RealPlayer元素的宽度


RealPlayer的一些函数、方法和过程

这是 Real Player ActiveX Control Library (Version 1.0) 的所有函数与方法,有兴趣可以研究一下。

function GetSource: WideString;
procedure SetSource(const lpszNewValue: WideString);
function GetConsole: WideString;
procedure SetConsole(const lpszNewValue: WideString);
function GetControls: WideString;
procedure SetControls(const lpszNewValue: WideString);
function GetNoLabels: WordBool;
procedure SetNoLabels(bNewValue: WordBool);
function GetAutoStart: WordBool;
procedure SetAutoStart(bNewValue: WordBool);
function GetAutoGotoURL: WordBool;
procedure SetAutoGotoURL(bNewValue: WordBool);
function GetVolume: Smallint;
procedure SetVolume(nVol: Smallint);
function GetMute: WordBool;
procedure SetMute(bMute: WordBool);
function GetLoop: WordBool;
procedure SetLoop(bVal: WordBool);
function GetImageStatus: WordBool;
procedure SetImageStatus(bEnable: WordBool);
function GetPacketsTotal: Integer;
function GetPacketsReceived: Integer;
function GetPacketsOutOfOrder: Integer;
function GetPacketsMissing: Integer;
function GetPacketsEarly: Integer;
function GetPacketsLate: Integer;
function GetBandwidthAverage: Integer;
function GetBandwidthCurrent: Integer;
procedure DoPlayPause;
procedure DoStop;
procedure DoNextItem;
procedure DoPrevItem;
function CanPlayPause: WordBool;
function CanStop: WordBool;
function HasNextItem: WordBool;
function HasPrevItem: WordBool;
function HasNextEntry: WordBool;
function HasPrevEntry: WordBool;
procedure DoNextEntry;
procedure DoPrevEntry;
procedure AboutBox;
procedure EditPreferences;
procedure HideShowStatistics;
function IsStatisticsVisible: WordBool;
procedure DoGotoURL(const url: WideString; const target: WideString);
procedure DoPlay;
procedure DoPause;
function GetPosition: Integer;
function GetPlayState: Integer;
function GetLength: Integer;
function GetTitle: WideString;
function GetAuthor: WideString;
function GetCopyright: WideString;
function GetClipWidth: Integer;
function GetClipHeight: Integer;
function CanPlay: WordBool;
function CanPause: WordBool;
procedure SetPosition(lPosition: Integer);
function GetNumLoop: Integer;
procedure SetNumLoop(lVal: Integer);
function GetCenter: WordBool;
procedure SetCenter(bVal: WordBool);
function GetNoLogo: WordBool;
procedure SetNoLogo(bVal: WordBool);
function GetMaintainAspect: WordBool;
procedure SetMaintainAspect(bVal: WordBool);
function GetBackgroundColor: WideString;
procedure SetBackgroundColor(const pVal: WideString);
function GetStereoState: WordBool;
function GetLiveState: WordBool;
function GetShowStatistics: WordBool;
procedure SetShowStatistics(bVal: WordBool);
function GetShowPreferences: WordBool;
procedure SetShowPreferences(bVal: WordBool);
function GetShowonmouseover WordBool;
procedure SetShowAbout(bVal: WordBool);
function GetOriginalSize: WordBool;
procedure SetOriginalSize;
function GetDoubleSize: WordBool;
procedure SetDoubleSize;
function GetFullScreen: WordBool;
procedure SetFullScreen;
function GetEnableContextMenu: WordBool;
procedure SetEnableContextMenu(bVal: WordBool);
function GetEnableOriginalSize: WordBool;
procedure SetEnableOriginalSize(bVal: WordBool);
function GetEnableDoubleSize: WordBool;
procedure SetEnableDoubleSize(bVal: WordBool);
function GetEnableFullScreen: WordBool;
procedure SetEnableFullScreen(bVal: WordBool);
function GetEnableMessageBox: WordBool;
procedure SetEnableMessageBox(bVal: WordBool);
procedure SetTitle(const pVal: WideString);
procedure SetAuthor(const pVal: WideString);
procedure SetCopyright(const pVal: WideString);
function GetWantKeyboardEvents: WordBool;
procedure SetWantKeyboardEvents(bWantsEvents: WordBool);
function GetWantMouseEvents: WordBool;
procedure SetWantMouseEvents(bWantsEvents: WordBool);
function GetNumEntries: Smallint;
function GetCurrentEntry: Smallint;
function GetEntryTitle(uEntryIndex: Smallint): WideString;
function GetEntryAuthor(uEntryIndex: Smallint): WideString;
function GetEntryCopyright(uEntryIndex: Smallint): WideString;
function GetEntryAbstract(uEntryIndex: Smallint): WideString;
procedure SetCanSeek(bCanSeek: WordBool);
function GetCanSeek: WordBool;
function GetBufferingTimeElapsed: Integer;
function GetBufferingTimeRemaining: Integer;
function GetConnectionBandwidth: Integer;
function GetPreferedLanguageString: WideString;
function GetPreferedLanguageID: Integer;
function GetUserCountryID: Integer;
function GetNumSources: Smallint;
function GetSourceTransport(nSourceNum: Smallint): WideString;
function GetWantErrors: WordBool;
procedure SetWantErrors(bVal: WordBool);
function GetShuffle: WordBool;
procedure SetShuffle(bVal: WordBool);
function GetVersionInfo: WideString;
function GetLastMessage: WideString;
function GetLastErrorSeverity: Integer;
function GetLastErrorRMACode: Integer;
function GetLastErrorUserCode: Integer;
function GetLastErrorUserString: WideString;
function GetLastErrorMoreInfoURL: WideString;
procedure SetPreFetch(bVal: WordBool);
function GetPreFetch: WordBool;
procedure SetRegion(const pVal: WideString);
function GetRegion: WideString;
function GetIsPlus: WordBool;
function GetConsoleEvents: WordBool;
procedure SetConsoleEvents(bVal: WordBool);
function GetDRMInfo(const pVal: WideString): WideString;
property ControlInterface: IRealAudio read GetControlInterface;
property DefaultInterface: IRealAudio read GetControlInterface;
 


网页中wmp视频控制之使用指南

//wmplayer.controls.currentPosition = wmplayer.currentMedia.duration * (i / 100)
//
//
//
□播放方法和属性
除播放、暂停、停止外,媒体播放器还可用下面的属性:
扫描(Scanning)——与录像机的快进快倒功能类似;
搜索(Seeking)——直接移到剪辑中标记的特定上演时间;

□播放
媒体播放器提供了两种技术来指定要播放的媒体名称(剪辑),你可以设置 FileName 属性,或调用 Open 方法。 如果 AutoStart 属性的值是 true 的话,当 FileName 属性被设置成该电影剪辑的 URL 后,该电影剪辑将开始播放;否则电影剪辑不会开始播放, 除非你调用 Play 方法。 Open 方法开始播放是异步的,它不象 Play 方法要等到其他的进程结束后才开始播放。
媒体播放器提供了下面的类似录像机的属性和方法来控制流媒体的播放:
Play、Stop、Pause 方法,来开始、停止、暂停流媒体。
PlayCount 属性,设置文件播放的次数。
AtoRewind 属性,确定当停止播放时是否返回到电影剪辑的开始部分。

□音频控制
媒体播放器提供了下面的属性来管理音频:
Balance 属性,确定左右音箱的声音平衡;
Volume 属性,用来加大或降低音量;
Mute 属性,用来关闭或打开声音;
※你可以将 ShowAudioControls 属性设为 true 来在控制栏添加处理声音的控件。

□扫描
媒体播放器提供了下面的属性用以扫描:
FastForward 方法,快进;
FastReverse 方法,快倒;
Rate属性,改变播放速率;
※要想使电影剪辑能被扫描,必须将 CanScan 和 AllowScan 属性设为 true。

□搜索
用于搜索的属性有:
MarkerCount 属性,指剪辑中标记的总数量;
CurrentMaker、GetMarkerName、GetMarkerTime 方法,用于返回标记信息;
MarkerHit 事件,当遇到标记时触发;
CurrentPosition 属性,当前位置(用秒度量),可用来将播放头移到剪辑中指定的点;
PositionChange 事件,当设置 CurrentPosition 属性时触发;
※要想搜索到任意的时间,必须将 CanSeek 属性设为 true,要想搜索到标记点,必须将 CanSeekToMarkers 属性设为 true。

□媒体播放器的外观界面
在网页中,你可以通过相关属性来控制媒体播放器的哪些部分出现,哪些部分不出现。
媒体播放器包括如下元素:
Video Display Panel:视频显示面板;
Video Border:视频边框;
Closed Captioning Display Panel;字幕显示面板;
Track Bar;搜索栏;
Control Bar with Audio and Position Controls:带有声音和位置控制的控制栏;
Go To Bar:转到栏;
Display Panel:显示面板;
Status Bar:状态栏;
下面的属性用来决定显示哪一个元素:
ShowControls 属性:是否显示控制栏(包括播放控件及可选的声音和位置控件);
ShowAudioControls 属性:是否在控制栏显示声音控件(静音按钮和音量滑块);
ShowPositionControls 属性:是否在控制栏显示位置控件(包括向后跳进、快退、快进、向前跳进、预览播放列表中的每个剪辑);
ShowTracker 属性:是否显示搜索栏;
ShowDisplay 属性:是否显示显示面板(用来提供节目与剪辑的信息);
ShowCaptioning 属性:是否显示字幕显示面板;
ShowGotoBar 属性:是否显示转到栏;
ShowStatusBar 属性:是否显示状态栏;

□播放列表
媒体播放器提供下面的方法来访问播放列表中的剪辑:
Next 方法,跳到节目(播放列表)中的下一个剪辑;
Previous 方法,跳回到节目中的上一个剪辑;
媒体播放器的一个特性是能够预览节目中的每一个剪辑,使用如下属性:
PreviewMode 属性,决定媒体播放器当前是否处于预览模式;
CanPreview 属性,决定媒体播放器能否处于预览模式;
在windows 媒体元文件中,可以为每一个剪辑指定预览时间——PREVIEWDURATION,如果没有指定,那么默认的预览时间是10秒钟。
你也可以用Windows 媒体元文件来添加 watermarks 与 banners,元文件也支持插入广告时的无间隙流切换。

□节目信息
使用 GetMediaInfoString 方法可以返回相关剪辑或节目的如下信息:
文件名:File name
标题:Title
描述:Description
作者:Author
版权:Copyright
级别:Rating
URLs:logo icon、watermark、banner的地址
剪辑信息可以放在媒体文件中,也可以放在Windows 媒体元文件中,或者两者都放。

剪辑信息可以放在媒体文件中,也可以放在windows 媒体元文件中,或者两者都放。如果在元文件中指定了剪辑信息,那么用 GetMediaInfoString 方法返回的就是元文件中的信息,而不会返回剪辑中包含的信息。
在元文件中,附加信息可以放置在每一个剪辑或节目的 PARAM标签中。你可以为每个剪辑添加任意多个 PARAM 标签,用来存储自定义的信息或链接到相关站点。在 PARAM 标签中的信息可以通过 GetMediaParameter 方法来访问。
下面的属性返回有关大小和时间的信息:
ImageSourceHeight、ImageSourceWidth:返回图像窗口的显示尺寸;
Duration 属性,返回剪辑的长度(秒), 要检测这个属性是否包含有效的数值,请检查IsDurationValid 属性。(对于广播的视频,其长度是不可预知的)。

□字幕
你可以用 .smi 文件来为你的节目添加字幕。媒体播放器支持下面的属性来处理字幕:
SAMIFileName 属性,指定 .smi 文件的名字;
SAMILang 属性,指定字幕的语言(如果没有指定则使用第一种语言);
SAMIStyle 属性,指定字幕的文字大小和样式;
ShowCaptioning 属性,决定是否显示字幕显示面板;

□脚本命令
伴随音频、视频流,你可以在流媒体文件中加入脚本命令。脚本命令是多媒体流中与特定时间同步的多对Unicode串。第一个串标识待发命令的类型,第二个串指定要执行的命令。
当流播放到与脚本相关的时间时,控件会向网页发送一个 scriptCommand事件,然后由事件处理进程来响应这个事件。脚本命令字符串会作为脚本命令事件的参数传递给事件处理器。
媒体播放器会自动处理下面类型的内嵌脚本命令:
1)URL型命令:当媒体播放器控件收到一个URL型的命令时,指定的URL会被装载到用户的默认浏览器。如果媒体播放器嵌在一个分帧的HTML文件中,URL页可以装载到由脚本命令指定的帧内。如果脚本命令没有指定一个帧,将由 DefaultFrame 属性决定将 URL 页装入哪一帧。
你可以通过设置 InvokeURLs 属性来决定是否自动处理 URL 型的脚本命令。如果这个属性的值为 false ,媒体播放器控件将忽视 URL型命令。但是脚本命令事件仍会触发,这就允许你有选择地处理 URL 型命令。
URL 型命令指定的是 URL 的相对地址。基地址是由 BaseURL属性指定的。媒体播放器控件传送的脚本命令事件的命令参数是链接好的地址。
2)FILENAME型命令:当媒体播放器控件收到一个FILENAME型的命令时,它将 FileName属性设置为脚本命令提供的文件,之后媒体播放器会打开这个文件开始播放。 媒体播放器控件总是自动处理 FILENAME 型命令,不象 URL 型命令,它们不能被禁止。
3)TEXT型命令:当媒体播放器控件收到一个 TEXT型的命令时,它会将命令的内容显示在控件的字幕窗口。内容可以是纯文本的,也可以是 HTML。
4)EVENT型命令:当媒体播放器控件收到一个 EVENT型的命令时,它会在媒体元文件中搜索 EVENT 元素的 NAME 属性。如果 NAME 属性与脚本命令中的第二个字符串匹配,媒体播放器控件就执行包含在 EVENT 元素中的条目。
5)OPENEVENT型命令:当媒体播放器控件收到一个 OPENEVENT型的命令时,它会在媒体元文件中检查 EVENT 元素,并打开匹配的标题,但不播放,直到收到来自 EVENT型命令的同名真实事件。

□捕捉键盘和鼠标事件
EnableContextMenu 与 ClickToPlay 属性为用户提供了在图像窗口进行操作的方法。
如果 EnableContextMenu 属性为 true ,在图像窗口右击鼠标可以打开关联菜单,如果将ClickToPlay 属性设为 true ,用户可以单击图像窗口进行播放与暂停的切换。
要接收鼠标移动和单击事件,请将 SendMouseMoveEvents 和 SendMouseClickEvents 属性设为 true 。鼠标事件有:
MouseDown,当用户按下鼠标时产生;
MouseUp,当用户释放鼠标时产生;
MouseMove,当用户移动鼠标时产生;
Click,当用户在媒体播放器上单击鼠标按钮时产生;
DbClick,当用户在媒体播放器上双击鼠标按钮时产生;
要接收键盘事件,请将 SendKeyboardEvents 属性设为 true 。键盘事件有:
KeyDown,当用户按下一个键时产生;
KeyUp,当用户释放一个键时产生;
KeyPress,当用户按下并释放一个键时产生;

□监测流状态与网络链接
流状态属性包括:
PlayState:播放状态;
OpenState:打开状态;
Bandwidth:带宽;


监测流状态与网络链接
流状态属性包括:
PlayState:播放状态;
OpenState:打开状态;
Bandwidth:带宽;
支持的事件有:
OpenStateChange:打开状态改变(仅当SendOpenStateChangeEvents属性为true时触发)
PlayStateChange:播放状态改变(仅当SendPlayStateChangeEvents属性为true时触发)
EndOfStream:流结束时触发;
NewStream:打开新流时触发;
网络接收属性包括:
ReceptionQuality:接收质量;
ReceivedPackets:已经收到的包;
LostPackets:丢失的包;
监测缓冲的属性有:
BufferingTime:缓冲时间;
BufferingCount:缓冲次数;
BufferingProgress:缓冲进程;
Buffering:缓冲事件;

□错误处理
媒体播放器提供了内建的错误处理功能——在对话框或状态栏显示错误信息。 另外,你可以自己添加错误处理程序。如果 SendErrorEvents 属性设置为 true,将不会显示错误框,而是发送错误事件;如果 SendErrorEvents 属性设置为 false,将显示错误框,而是发送错误事件。
媒体播放器支持下面的错误处理事件:
Error 事件,指有危险性错误发生;
Warning 事件,指发生了非危险性的错误;
当你的应用程序接收到一个错误事件,你可以检测下面的属性来确定具体的错误信息:
HasError:检测目前的媒体播放器是否有错误;
ErrorCode:提供与该类型错误相关的代码值;
ErrorDescription:提供错误的描述信息;
ErrorCorrection:指定媒体播放器对该类型的错误进行校正;

□播放CD
媒体播放器将 CD 看作(在每个音轨的开头具有标记的)单一音频流。 要在网页中使用CD,你需要将 FileName 属性设为 CDAUDIO:,必须带有冒号,如下所示:
<HTML>
<HEAD><TITLE>CD Audio Playbck Example</TITLE></HEAD>
<BODY>
<OBJECT ID="MediaPlayer"
CLASSID="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95"
WIDTH="320"
HEIGHT="508"
STYLE="position:absolute; left:0px; top:70px;" >
<PARAM NAME="FileName" VALUE="cdaudio:">
<PARAM NAME="AutoStart" VALUE="0">
<PARAM NAME="ShowControls" VALUE="1">
<PARAM NAME="ShowStatusBar" VALUE="1">
<PARAM NAME="ShowDisplay" VALUE="1">
</OBJECT>
</BODY>
</HTML>

////////////////////////////////////////////////////////////
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

WMP、Real 的方法、事件和属性都很多,这里只列出一些常用同时又是最基本与重要的方法及属性。学习制作网页播放器必须首先熟练掌控她们!

 
她们真的非常重要。一个网页播放器,不管如何变化多端,都是这些方法、事件和属性衍生的功能延伸,如快进、快退,左、右声道,截取片段,重复、循环、随机播放,拖放,点播,进度条滚动,时间正序、倒序及上一首、下一首、第一首、末一首等等。这里需要说明的是,上面 Windows Media Player 的方法属性是针对 WMP 6.4 以上版本而言,6.4 以下版本的某些地方如全屏等是不同而有区别的。
简单的网页播放器谱乐在前面的专题中已列举了许多实例。即在 HTML 代码中插入:
<object classid = "clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6">
<param name = "url" value = "http://aboutplayer.com/aboutplayer.asx">// 参数 url 定义播放媒体的路径。
<param name = ……>// 还有很多这样的参数,都具有重要的功用!
……
</object>
上面是播放音频的代码,播放视频的只需在<object ……>中插入 width = "205" height = "100" 确定视频区域的宽、高即可,宽高比有 4:3、16:9 两种模式。
若再插入 type = "application/x-oleobject" 的代码,即可播放 SWF 等 Flash 类和 jpg、gif、png、bmp 等图片类媒体。
上述综合代码就是:
<object classid = "clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6" width = "205" height = "100" type = "application/x-oleobject">
<param name = "url" value = "http://aboutplayer.com/aboutplayer.asx">
<param name = ……>
……
</object>
这里 "clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6" 是 WMP 6.4 以上版本控件,6.4 以下版本控件代码是 "clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95"。两者在参数等方面的定义上是有许多差异的!

windows Media Player 9.0网页播放器

(mp3.wma.wmv.asf)

以下图片为一般播mp3.wma文件时调用windows自带播放器windows Midia Player9.0所显示外观,非9.0版所显示的面板外观可能不同!
 
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
代码简介:

width(播放器面板宽度)

height(播放器面板高度)

autostart(自动播放,“=1”或“=true”即是功能有效,“=0”即是手动播放)

loop(循环播放,“=2”即是循环播放两次,“=-1”或“=true”即是无限次循环播放)

可变值:false 或 0(手动开启);true 或 1(自动开启)
 
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
(无文件信息显示)
 
银灰面板

<embed src="链接地址" width="300" height="45" loop="-1" autostart="true"></EMBED>


 
灰白面板

<embed style="FILTER: Gray()" src="链接地址" width="300" height="45" loop="-1" autostart="true"></EMBED>


 
棕色面板

<embed style="FILTER: invert()" src="链接地址" width=300 height=45 loop="-1" autostart="true"></EMBED>

 

 
黑色面板

<embed style="FILTER: xray()" src="链接地址" width=300 height=45 loop="-1" autostart="true"></EMBED>


 
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
(带显示文件播放信息)
 
<embed src="链接地址" width=300 height=69 type=application/x-mplayer2 loop="-1" showcontrols="1" ShowDisplay="0" ShowStatusBar="1" autostart="1"></EMBED>


 
灰白色面板

<embed style="FILTER: Gray()" src="链接地址" width=300 height=69 type=application/x-mplayer2 loop="-1" showcontrols="1" ShowDisplay="0" ShowStatusBar="1" autostart="1"></EMBED>


 
<embed style="FILTER: invert()" src="链接地址" width=300 height=69 type=application/x-mplayer2 loop="-1" showcontrols="1" ShowDisplay="0" ShowStatusBar="1" autostart="1"></EMBED>

 
 
<embed style="FILTER: xray()" src="链接地址" width=300 height=69 type=application/x-mplayer2 loop="-1" showcontrols="1" ShowDisplay="0" ShowStatusBar="1" autostart="1"></EMBED>

 
 
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
(显示文件标签信息)
 
<embed src="链接地址" loop="-1" width=300 height=140 balance="true" showpositioncontrols="true" showtracker="true" showaudiocontrols="true" showcontrols="true" showstatusbar="true" showdisplay="true" displaysize="0" volume="100" autosize="true" autostart="true" animationatstart="true" transparentatstart="true"></EMBED>

 
 
<embed style="FILTER: Gray()" src="链接地址" loop="-1" width=300 height=140 balance="true" showpositioncontrols="true" showtracker="true" showaudiocontrols="true" showcontrols="true" showstatusbar="true" showdisplay="true" displaysize="0" volume="100" autosize="true" autostart="true" animationatstart="true" transparentatstart="true"></EMBED>

 


 
<embed style="FILTER: invert()" src="链接地址" loop="-1" width=300 height=140 balance="true" showpositioncontrols="true" showtracker="true" showaudiocontrols="true" showcontrols="true" showstatusbar="true" showdisplay="true" displaysize="0" volume="100" autosize="true" autostart="true" animationatstart="true" transparentatstart="true"></EMBED>

 
 
<embed style="FILTER: xray()" src="链接地址" loop="-1" width=300 height=140 balance="true" showpositioncontrols="true" showtracker="true" showaudiocontrols="true" showcontrols="true" showstatusbar="true" showdisplay="true" displaysize="0" volume="100" autosize="true" autostart="true" animationatstart="true" transparentatstart="true"></EMBED>

 
 
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
(有图像的media播放器)
 

<param name="volume" value="100">是调整默认音量的选项,100是最大音量!


<object id="mPlayer1" width=300 height=300 classid="CLSID:6BF52A52-394A-11D3-B153-00C04F79FAA6">
  <param name="URL" value="链接地址">
        <param name="rate" value="1">
        <param name="balance" value="0">
        <param name="currentPosition" value="0">
        <param name="defaultFrame" value>
        <param name="playCount" value="100">
        <param name="autoStart" value="1">
        <param name="currentMarker" value="0">
        <param name="invokeURLs" value="1">
        <param name="baseURL" value>
        <param name="volume" value="100">
        <param name="mute" value="0">
        <param name="uiMode" value="full">
        <param name="stretchToFit" value="0">
        <param name="windowlessVideo" value="0">
        <param name="enabled" value="1">
        <param name="enableContextMenu" value="1">
        <param name="fullScreen" value="0">
        <param name="SAMIStyle" value>
        <param name="SAMILang" value>
        <param name="SAMIFilename" value>
        <param name="captioningID" value>
        <param name="enableErrorDialogs" value="0">
        <param name="_cx" value="7779">
        <param name="_cy" value="1693">
      </object>


 


 
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
以下三种加特效面板修改播放面板尺寸时,须将两组播放尺寸数值修改为一致才能正确显示。

如下例:width: 300px; HEIGHT: 300px"  width="300" height="300" 
 
 
光晕特效。

-----------------

opacity(不透明度)、finishopacity(平滑度)、style(风格类型)

style(风格类型):

“1”(强光偏左)、“2”(强光居中)、

“3”(方形发散强光)“4”(透明)
 
<embed style="filter:Alpha(opacity=10,finishOpacity=100,style=2); WIDTH: 300px; HEIGHT: 300px" src="链接地址" width="300" height="300" type="audio/mpeg" volume="100" loop="true" autostart="true" showstatusbar="1"></EMBED>


 
波浪扭曲:

lightstrength(亮度)、strength(波幅)、freq(波频)

-----------------------------------------------------------------------

<embed style="FILTER: wave(add=0,lightstrength=10,strength=8,freq=20,phrase=30); WIDTH: 300px; HEIGHT: 300px" src="链接地址" width="300" height="300" volume="0" loop="true" autostart="true" showstatusbar="1"></EMBED>


 
边缘雾化

-----------

<table style="FILTER: Alpha(Opacity=100, FinishOpacity=0, Style=2, StartX=20, StartY=40, FinishX=0, FinishY=0)gray(); WIDTH: 300px; HEIGHT: 45px">
<TBODY>
<TR>
<TD>
<EMBED style="BORDER-RIGHT: silver 1px solid; BORDER-TOP: silver 1px solid; BORDER-LEFT: silver 1px solid; BORDER-BOTTOM: silver 1px solid" src="链接地址" width=300 height=45 type=audio/x-mplayer2 console="video" showstatusbar="0" EnableContextMenu="0" volume="0" autostart="1" loop="-1">
</EMBED>
</TD>
</TR>
</TBODY>
</TABLE>
 
 
 

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 

RealPlayer网页播放面板

(rm.rmvb.ram)
 
音频播放器(无信息显示)

<OBJECT id=video2 height=30 width=300 classid=CLSID:CFCDAA03-8BE4-11CF-B84B-0020AFBBCCFA>
<PARAM NAME="_ExtentX" VALUE="13229">
<PARAM NAME="_ExtentY" VALUE="847">
<PARAM NAME="AUTOSTART" VALUE="-1">
<PARAM NAME="SHUFFLE" VALUE="0">
<PARAM NAME="PREFETCH" VALUE="0">
<PARAM NAME="NOLABELS" VALUE="0">
<PARAM NAME="SRC" VALUE="链接地址">
<PARAM NAME="CONTROLS" VALUE="controlpanel">
<PARAM NAME="CONSOLE" VALUE="Clip1">
<PARAM NAME="LOOP" VALUE="0">
<PARAM NAME="NUMLOOP" VALUE="0">
<PARAM NAME="CENTER" VALUE="0">
<PARAM NAME="MAINTAINASPECT" VALUE="0">
<PARAM NAME="BACKGROUNDCOLOR" VALUE="#000000">
</OBJECT>


 
音频播放器(显示播放数据)

<object classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" width="300" height="50" id="RP2">
     <param name="_ExtentX" value="10001">
     <param name="_ExtentY" value="1270">
     <param name="AUTOSTART" value="-1">
     <param name="SHUFFLE" value="0">
     <param name="PREFETCH" value="0">
     <param name="NOLABELS" value="-1">
     <param name="SRC" value="链接地址">
     <param name="CONTROLS" value="ControlPanel,StatusBar">
     <param name="CONSOLE" value="clip1">
     <param name="LOOP" value="true">
     <param name="NUMLOOP" value="0">
     <param name="CENTER" value="0">
     <param name="MAINTAINASPECT" value="0">
     <param name="BACKGROUNDCOLOR" value="#000000">
</object>


 

调整高度可变化面板

显示播放数据

<embed src="链接地址" width="300" height="60" autostart="true" loop="true"></EMBED>

 

显示播放数据及文件信息

<embed src="链接地址" width="300" height="90" autostart="true" loop="true"></EMBED>


 
视频播放器

面板分为上下两部分,所以上下分别需要输入链接、调整高宽度。
上部为显示屏,宽高一般为:300x240、400x320、500x400。
下部播放面板的宽度和上部一致即可,高度不必调整。

-----------------------------------------

<object classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" name="player" width="300" height"240 d="player">
      <param name="_ExtentX" value="10001">
      <param name="_ExtentY" value="6879">
      <param name="AUTOSTART" value="-1">
      <param name="SHUFFLE" value="0">
      <param name="PREFETCH" value="0">
      <param name="NOLABELS" value="-1">
      <param name="SRC" value="链接地址">
      <param name="CONTROLS" value="Imagewindow">
      <param name="CONSOLE" value="clip1">
      <param name="LOOP" value="true">
      <param name="NUMLOOP" value="0">
      <param name="CENTER" value="0">
      <param name="MAINTAINASPECT" value="0">
      <param name="BACKGROUNDCOLOR" value="#000000">
</object>
<object classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" width="300" height="50" id="RP2">
      <param name="_ExtentX" value="10001">
      <param name="_ExtentY" value="1270">
      <param name="AUTOSTART" value="-1">
      <param name="SHUFFLE" value="0">
      <param name="PREFETCH" value="0">
      <param name="NOLABELS" value="-1">
      <param name="SRC" value="链接地址">
      <param name="CONTROLS" value="ControlPanel,StatusBar">
      <param name="CONSOLE" value="clip1">
      <param name="LOOP" value="true">
      <param name="NUMLOOP" value="0">
      <param name="CENTER" value="0">
      <param name="MAINTAINASPECT" value="0">
      <param name="BACKGROUNDCOLOR" value="#000000">
</object>

- 作者: superbelief 2007年05月29日, 星期二 16:17  回复(0) |  引用(3) 加入博采

jsp调试常见错误
500 是Server Error
400 是Clinet Error
300 Route change
200 OK

应答代码,虽然是SIP的但同样适用于HTTP,只是加了一些东西

应答代码
应答码是包含了,并且扩展了HTTP/1.1应答码。并不是所有的HTTP/1.1应答码都适当应用,只有在折里指出的是适当的。其他HTTP/1.1应答码不应当使用。并且,SIP也定义了新的应答码系列,6xx。

1 临时应答1xx
临时应答,也就是消息性质的应答,标志了对方服务器正在处理请求,并且还没有决定最后的应答。如果服务器处理请求需要花200ms以上才能产生终结应答的时候,它应当发送一个1xx应答。
注意1xx应答并不是可靠传输的。他们不会导致客户端传送一个ACK应答。临时性质的(1xx)应答可以包含消息体,包含会话描述。
1.1 100 Trying
这个应答表示下一个节点的服务器已经接收到了这个请求并且还没有执行这个请求的特定动作(比如,正在打开数据库的时候)。这个应答,就像其他临时应答一样,种植了UAC重新传送INVITE请求。100(Trying)应答和其他临时应答不同的是,在这里,它永远不会被有状态proxy转发到上行流中。
1.2 180 Ringing
UA收到INVITE请求并且试图提示给用户。这个应答应当出世化一个本地回铃。
1.3 818 Call is Being Forwarded(呼叫被转发)
服务器可以用这个应答代码来表示呼叫正在转发到另一个目的地集合。
1.4 182 Queued
当呼叫的对方暂时不能接收呼叫的时候,并且服务器决定将呼叫排队等候,而不是拒绝呼叫的时候,那么就应当发出这个应答。当被叫方一旦恢复接收呼叫,他会返回合适的终结应答。对于这个呼叫状态,可以有一个表示原因的短语,比如:”5 calls queued;expected waiting time is 15minutes”。服务器可以给出好几个182(Queued)应答告诉呼叫方排队的情况(比如排队靠前了等等)。
1.5 183 会话进度
183(Session Progress)应答用于提示建立对话的进度信息。Reason-Phrase(表达原因的句子)、头域或者消息体可以用于提示呼叫进度的更消息的信息。
2 成功信息2xx
这个应答表示请求是成功的。
2.1 200 OK
请求已经处理成功。这个信息取决于不同方法的请求的应答。
3 转发请求3XX
3xx系列的应答是用于提示用户的新位置信息的,或者为了满足呼叫而转发的额外服务地点。
3.1 300 Multiple Choices
请求的地址有多个选择,每个选择都有自己的地址,用户或者(UA)可以选择合适的通讯终端,并且转发这个请求到这个地址。
应答可以包含一个具有每一个地点的在Accept请求头域中允许的资源特性,这样用户或者UA可以选择一个最合适的地址来转发请求。没有未这个应答的消息体定义MIME类型。
这些地址选择也应当在Contact头域中列出(20.10节)。不同于HTTP,SIP应答可以包含多个Contact头域或者一个Contact头域中具有一个地址列表。UA可以使用Contact头域来自动转发或者要求用户确认转发。不过,本规范没有定义自动转发的标准。
如果被叫方可以在多个地址被找到,并且服务器不能或者不愿意转发请求的时候,可以使用这个应答来给呼叫方。
3.2 301 Moved Permently
当不能在Request-URI指定的地址找到用户的时候,请求的客户端应当使用Contact头域(20.10)所指出的新的地址重新尝试。请求者应当用这个新的值来更新本地的目录,地址本,和用户地址cache,并且在后续请求中,发送到这个/这些列出的地址。
3.3 302 Moved Temporarily
请求方应当把请求重新发到这个Contact头域所指出的新地址(20.10)。新请求的Request-URI应当用这个应答的Contact头域所指出的值。
在应答中的Expires(20.19节)或者Contact头域的expires参数定义了这个Contact URI的生存周期。UA或者proxy在这个生存周期内cache这个URI。如果没有严格的有效时见,那么这个地址仅仅本次有效,并且不能在以后的事务中保存。
如果cache的Contact头域的值失败了,那么被转发请求的Request-URI应当再次尝试一次。临时URI可以比超时时间更快的失效,并且可以有一个新的临时URI。
3.4 305 Use Proxy
请求的资源必须通过Contact头域中指出的proxy来访问。Contact头域指定了一个proxy的URI。接收到这个应答的对象应当通过这个proxy重新发送这个单个请求。305(UseProxy)必须是UAS产生的。
3.5 380 Alternative Service
呼叫不成工,但是可以尝试另外的服务。另外的服务在应答的消息体中定义。消息体的格式在这里没定义,可能在以后的规范中定义。
4 请求失败4xx
4xx应答定义了特定服务器响应的请求失败的情况。客户端不应当在不更改请求的情况下重新尝试同一个请求。(例如,增加合适的认证信息)。不过,同一个请求交给不同服务器也许就会成功。
4.1 400 Bad Request
请求中的语法错误。Reason-Phrase应当标志这个详细的语法错误,比如”Missing Call-ID header field”。
4.2 401 Unauthorized
请求需要用户认证。这个应答是由UAS和注册服务器产生的,当407(Proxy Authentication Required)是proxy服务器产生的。
4.3 402 Payment Required
保留/以后使用
4.4 403 Forbidden
服务端支持这个请求,但是拒绝执行请求。增加验证信息是没有必要的,并且请求应当不被重试。
4.5 404 Not Found
服务器返回最终信息:用户在Request-URI指定的域上不存在。当Request-URI的domain和接收这个请求的domain不匹配的情况下, 也会产生这个应答。
4.6 405 Method Not Allowed
服务器支持Request-Line中的方法,但是对于这个Request-URI中的地址来说,是不允许应用这个方法的。
应答必须包括一个Allow头域,这个头域包含了指定地址允许的方法列表。
4.7 Not Acceptable
请求中的资源只会导致产生一个在请求中的Accept头域外的,内容无法接收的错误。
4.8 407 Proxy Authentication Required
这个返回码和401(Unauthorized)很类四,但是标志了客户端应当首先在proxy上通过认证。SIP对认证的访问请参见26节和22.3节。
这个返回码用于应用程序访问通讯网关(比如,电话网关),而很少用于被叫方要求认证。
4.9 408 Request Timeout
在一段时间内,服务器不能产生一个终结应答,例如,如果它无法及时决定用户的位置。客户端可以在稍后不更改请求的内容然后重新尝试请求。
4.10 410 Gone
请求的资源在本服务器上已经不存在了,并且不知道应当把请求转发到哪里。这个问题将会使永久性的。如果服务器不知道,或者不容易检测,这个资源消失是临时性质的还是永久性质的,那么应当返回一个404(Not Found)。
4.11 413请求实体过大。
服务器拒绝处理请求,因为这个请求的实体超过了服务器希望或者能够处理的大小。这个服务器应当关闭连接避免客户端重发这个请求。
如果这个情况是暂时的,那么服务端应当包含一个Retry-After头域来表明这是一个暂时的故障,并且客户端可以过一段时间再次尝试。
4.12 414 Request-URI Too Long
服务器拒绝这个请求,因为Request-URI超过了服务器能够处理的长度。
4.13 415 Unsupported Media Type
服务器由于请求的消息体的格式本服务器不支持,所以拒绝处理这个请求。这个服务器必须根据内容的故障类型,返回一个Accept,Accpet-Encoding,或者Accept-Language头域列表。UAC根据8.1.3.5节定义的方法处理这个应答。
4.14 416 Unsupported URI Scheme
服务器由于不支持Request-URI中的URI方案而终止处理这个请求。客户端处理这个应答参照8.1.3.5。
4.15 Bad Extension
服务器不知道在请求中的Proxy-Require(20.29)或者Require(20.32)头域所指出的协议扩展。服务器必须在Unsupported头域中列出不支持的扩展。UAC处理这个应答请参见8.1.3.5
4.16 421Extension Required
UAS需要特定的扩展来处理这个请求,但是这个扩展并没有在请求的Supported头域中列出。具有这个应答码的应答必须包含一个Require头域列出所需要的扩展。
UAS不应当使用这个应答除非它真的不能给客户端提供有效的服务。相反,如果在Support头域中没有列出需要的扩展,服务器应当根据基准的SIP兼容的方法和客户端支持的扩展来进行处理。
4.17 423 Interval Too Brief
服务器因为在请求中设置的资源刷新时间(或者有效时间)过短而拒绝请求。这个应答可以用于注册服务器来拒绝那些Contact头域有效期过短的注册请求。这个应答的用法和相关的Min-Expires头域在10.2.8,10.3,20.23节中介绍和说明。
4.18 480 Temporarily Unavailable
请求成功到达被叫方的终端系统,但是被叫方当前不可用(例如,没有登陆,或者登陆了但是状态是不能通讯,或者有”请勿打扰”的标记)。应答应当在Retry-After中标志一个合适的重发时间。这个用户也有可能在其他地方是有效的(在本服务器中不知道)。Reason-Phrase(原因短句)应当提示更详细的原因,为什么被叫方暂时不可用。这个值应当是可以被UA设置的。状态码486(Busy Here)可以用来更精确的表示本请求失败的特定原因。
这个状态码也可以是转发服务或者proxy服务器返回的,因为他们发现Request-URI指定的用户存在,但是没有一个给这个用户的合适的当前转发的地址。
4.19 481 Call/Transaction Does Not Exist
这个状态表示了UAS接收到请求,但是没有和现存的对话或者事务匹配。
4.20 482 Loop Detected
服务器检测到了一个循环(16.3/4)
4.21 483 Too Many Hops
服务器接收到了一个请求包含的Max-Forwards(20.22)头域是0
4.22 484 Address InComplete
服务器接收到了一个请求,它的Request-URI是不完整的。在原因短语中应当有附加的信息说明。这个状态码可以和拨号交叠。在和拨号交叠中,客户端不知道拨号串的长度。它发送增加长度的字串,并且提示用户输入更多的字串,直到不在出现484(Address Incomplete)应答为止。
4.23 485 Ambiguous
Request-URI是不明确的。应答可以在Contact头域中包含一个可能的明确的地址列表。这个提示列表肯囊个在安全性和隐私性对用户或者组织造成破坏。必须能够由配置决定是否以404(NotFound)代替这个应答,又或者禁止对不明确的地址使用可能的选择列表。
给带有Request-URI的请求的一个应答例子:
sip: lee@example.com:
SIP/2.0 485 Ambiguous
Contact: Carol Lee
Contact: Ping Lee
Contact: Lee M.Foote
部分email和语音邮箱系统提供了这个功能。这个状态码和3xx状态码不同:对于300来说,它是假定同一个人或者服务有不同的地址选择。所以对3xx来说,自动选择系统或者连续查找就有效,但是对485(Ambiguous)应答来说,一定要用户的干预。
4.24 486 Busy Here
当成功联系到被叫方的终端系统,但是被叫方当前在这个终端系统上不能接听这个电话,那么应答应当回给呼叫方一个更合适的时间在Retry-After头域重试。这个用户也许在其他地方有效,比如电话邮箱系统等等。如果我们知道没有其他终端系统能够接听这个呼叫,那么应当返回一个状态码600(Busy Everywhere)。
4.25 487 Request Terminated
请求被BYE或者CANCEL所终止。这个应答永远不会给CANCEL请求本身回复。
4.26 488 Not Acceptable Here
这个应答和606(Not Acceptable)有相同的含义,但是只是应用于Request-URI所指出的特定资源不能接受,在其他地方请求可能可以接受。
包含了媒体兼容性描述的消息体可以出现在应答中,并且根据INVITE请求中的Accept头域进行规格化(如果没有Accept头域,那么就是application/sdp)。这个应答就像给OPTIONS请求的200(OK)应答的消息体一样。
4.27 491 Request Pending
在同一个对话中,UAS接收到的请求有一个依赖的请求正在处理。14.2描述了这种情况应当怎样解决。
4.28 493 Undecipherable
UAS接收到了一个请求,包含了一个加密的MIME,并且不知道或者没有提供合适的解密密钥。这个应答可以包含单个包体,这个包体包含了合适的公钥,这个公钥用于给这个UAS通讯中加密包体使用的。细节描述在23.2节。
5 Server Failure 5xx
5xx应答是当服务器本身故障的时候给出的失败应答。
5.1 500 Server Internal Error
服务器遇到了未知的情况,并且不能继续处理请求。客户端可以显示特定的错误情况,并且可以在几秒种以后重新尝试这个请求。
如果这个情况是临时的,服务器应当在Retry-After头域标志客户端过多少秒钟之后重新尝试这个请求。
5.2 501 Not Implemented
服务器没有实现相关的请求功能。当UAS不认识请求的方法的时候,并且对每一个用户都无法支持这个方法的时候,应当返回这个应答。(proxy不考虑请求的方法而转发请求)。
注意405(Method Not Allowed)是因为服务器实现了这个请求方法,但是这个请求方法在特定请求中不被支持。
5.3 502 Bad Gateway
如果服务器,作为gateway或者proxy存在,从下行服务器上接收到了一个非法的应答(这个应答对应的请求是本服务器为了完成请求而转发给下行服务器的)。
5.4 503 Service Unavailable
由于临时的过载或者服务器管理导致的服务器暂时不可用。这个服务器可以在应答中增加一个Retry-After来让客户端重试这个请求。如果没有Retry-After指出,客户端必须就像收到了一个500(Server Internal Error)应答一样处理。
客户端(proxy或者UAC)收到503(Service Unavailable)应当尝试转发这个请求到另外一个服务器处理。并且在Retry-After头域中指定的时间内,不应当转发其他请求到这个服务器。
作为503(Service Unavaliable)的替代,服务器可以拒绝连接或者把请求扔掉。
5.5 504 Server Time-out
服务器在一个外部服务器上没有收到一个及时的应答。这个外部服务器是本服务器用来访问处理这个请求所需要的。如果从上行服务器上收到的请求中的Expires头域超时,那么应当返回一个408(Request TimeOut)错误。
5.6 505 Version Not Supported
服务器不支持对应的SIP版本。服务器是无法处理具有客户端提供的相同主版本号的请求,就会导致这样的错误信息。
5.7 Message To Large
服务器无法处理请求,因为消息长度超过了处理的长度。
6 Global Failures 6xx
6xx应答意味这服务器给特定用户有一个最终的信息,并不只是在Request-URI的特定实例有最终信息
6.1 600 Busy Everywhere
成功联系到被叫方的终端系统,但是被叫方处于忙的状态,并不打算接听电话。这个应答可以通过增加一个Retry-After头域更明确的告诉呼叫方多久以后可以继续呼叫。如果被叫方不希望提示拒绝的原因,被叫方应当使用603(Decline)。只有当终端系统知道没有其他终端节点(比如语音邮箱系统)能够访问到这个用户的时候才能使用这个应答。否则应当返回一个486(Busy Here)的应答。
6.2 603 Decline
当成功访问到被叫方的设备,但是用户明确的不想应答。这个应答可以通过增加一个Retry-After头域更明确的告诉呼叫方多久以后可以继续呼叫。只有当终端知道没有其他任何终端设备能够响应这个呼叫的势能才能给出这个应答。
6.3 604 Does Not Exists Anywhere
服务器验证了在请求中Request-URI的用户信息,哪里都不存在
6.4 606 Not Acceptable
当成功联系到一个UA,但是会话描述的一些部分比如请求的媒体,带宽,或者地址类型不被接收。
606(NotAcceptable)应答意味着用户希望通讯,但是不能充分支持会话描述。606(Not Acceptable)应答可以在Warning头域中包含一个原因列表,用于解释为何会话描述不能被支持。警告原因代码在20.43节中列出。
在应答中,可以出现一个包含媒体兼容性描述的消息体,这个消息体的格式根据INVITE请求中的Accept头域指出的格式进行规格化(如果没有Accept头域,那么就是application/sdp),就像给OPTIONS亲求的200(OK)应答中的消息一样。
我们希望这些媒体协商不要经常需要,并且当一个新用户被邀请加入已经存在的会话的时候,这个媒体协商可能不需要。这取决于邀请的初始化者是否需要对606(Not Acceptable)进行处理。
这个应答只有当客户端知道没有其他终端能够处理这个请求的时候才能发出。

- 作者: superbelief 2007年05月6日, 星期日 11:05  回复(0) |  引用(3) 加入博采

JSP中站点中的WEB-INF下的web.xml文件有什么用呢?
凡是以.xml 结尾的文件,都是XML语言文件。它是一种标记语言。
WEB-INF 下的web.xml文件中,定义了xml的版本号,如version="1.0" ,所使用的国际标准码,如encoding="ISO-8859-1" 。 还有Tomcat 的版本以及一些初始,登陆信息。 你可以用记事本打开这个文件看看就知道了!
另外,我帮你介绍一下xml.
XML是一种标记语言。
结构化的信息中包含了一些内容(例如文字,图片等)和一些指示出内容的重现手段的标记(例如,在一个章节头部的信息和其脚注处的信息是有不同含义的。)所有的文档都有不同的结构。一种标记语言,是定义文档结构的机制。XML规范定义了一个对文档进行标记的标准。
什么是文档(Document)当前在XML基础上进行的开发或应用的总数,是非常令人吃惊的(XML开始应用也不过是一年左右的时间,注:该文写于1998年)。在我们的所描述的意图中,单词"Document" 并不单指传统的文档,同样也有"数据格式"的语意。他包括向量图,电子商务处理数据,数学方程式,对象附加数据,服务器APIs,以及数千种结构化信息。
XML的开发目标

XML规范展示了如下的目标:
1. 在Internet上直接使用XML。用户能够象使用HTML文档那样快速而简单的打开和浏览XML文档。在实际应用中,只有当XML浏览器象HTML浏览器那样被大量广泛的使用时,才能达到这个目标。

2. XML应该支持非常广泛的应用,XML能够在:著作,浏览,内容分析等等领域发挥巨大的作用。当初仅因为需要在Web上传送结构化文档而定义XML的想法到显得十分的狭隘了。

3. 由于XML可以兼容SGML,所以很多人用他来处理那些来自于组织机构中十分庞大、烦琐,原本需要SGML来处理的信息。XML被设计的很实用,能够兼容已经存在的标准,并且能够解决在Web中传输结构化文档的新问题。

4. 计算机程序能够很处理的处理XML文档。说得比较通俗一点,任何一个能力相当于计算机系毕业的学生的程序员,都只需要大概两个星期就能编制一个处理XML文档的程序。

5. 在XML中,随意数值保持足够的小,理想上是0。随意特征不可避免的带来兼容性的问题,以至于用户在共享文档时会出现失败的情况。

6. XML文档应该保持可读性和一定的清晰程度。如果你没有XML浏览器,或是你从什么地方接受到一个篇幅巨大的XML文档,你也能够通过常用的文字编辑器来阅读他,并且了解大致的意思。

7. XML的设计应该很快就准备好。通常一个标准的产生需要很长的时间。XML需要能够尽快的被开发出来。

8. XML的设计应该是结构合理而简洁的。可以用很多种办法实现上面的第4条所提到的目标,归根结底来说,XML应符合EBNF(Extended Backus-Naur Form)的表述规范,并遵从现代编译工具和方法来实现。 从很多点上可以说明SGML的语法是不符合EBNF的表述规范的,写一个合适的SGML解析器需要处理繁杂而少见的工作,而且难以解析语言的特性,XML不应该如此。

9. XML文档应该是易于创建的。尽管最终需要使用专用的编辑器来创建和修改XML内容,但是那并不是很紧迫的。在中间过渡期,我们可以选择一些其他的方法来创建XML文档:例如直接用手写板生成,或者是使用简单的Shell和Perl脚本来生成,等等。
10.XML标记的简练是其最大的价值所在。XML并不支持SGML中一些功能强大的特性,但这些特性也使得SGML解析器增加额外的负担。

- 作者: superbelief 2007年05月6日, 星期日 10:40  回复(0) |  引用(3) 加入博采

XP下JSP环境的配置

XP下JSP环境的配置
一:所需软件
1、j2sdk

  版本:j2sdk1.4.1(35.9MB)

  地址:http://java.sun.com/j2se/1.4.1/download.html
2、Tomcat4

  版本:4.1.21(8.33MB)

  地址:http://jakarta.apache.org/builds/jakarta-tomcat-4.0/release/
二、 配置前的准备

  (一)准备一个测试用的JSP网页

  打开文本编辑器,比如记事本,输入下列代码,并保存为test .jsp(注意扩展名为.jsp)。

<HTML>
<HEAD>
<TITLE>JSP测试页面</TITLE>
</HEAD>
<BODY>
<%out.println("<h1>Hello World! </h1>");%>
</BODY>
</HTML>

  (二)安装J2SDK

  不管哪种方案,在安装和配置JSP引擎之前必须先完成J2SDK的安装。

  1、安装J2SDK

p>  在Windows下,直接运行下载的j2sdk-1_4_1_01-windows-i586.exe文件,根据安装向导安装到一个目录,例如安装到f:\j2sdk 1.4.1;

  2、 添加环境变量

  (1)如果你的操作系统是Win 98,可以用记事本直接编辑Autoexec.bat,添加下面命令行:

PATH=%PATH%;f:\j2sdk1.4.1\bin
SET JAVA_HOME=f:\j2sdk1.4.1
SET CLASSPATH=f:\j2sdk1.4.1\lib\tools.jar

  保存后,重新启动计算机,这样所添加的环境变量才会有效。

  (2)如果你的操作系统是Win2000,那么按如下方式配置环境变量。右键单击"我的电脑",在弹出菜单中选择"属性"→"系统特性" →"高级" →"环境变量", 弹出环境变量对话框,就可以编辑系统的环境变量了。添加PATH、JAVA_HOME和CLASSPATH三个变量,变量值同上。

  四、 JSP环境的配置方案

  (一)方案一:J2SDK+Tomcat

  在这种方案里Tomcat既作为JSP引擎又作为Web服务器,配置比较简单。

  1、安装Tomcat

  直接运行下载的jakarta-tomcat-4.0.1.exe,按照一般的Windows程序安装步骤即可安装好Tomcat,安装时它会自动寻找J2SDK的位置。例如安装到f:\tomcat4。

  2、配置Tomcat的环境变量

  添加一个新的环境变量TOMCAT_HOME,变量值为f:\tomcat4,添加方法同J2SDK环境变量的配置方法。

  3、测试默认服务

  设置完毕后就可以运行Tomcat服务器了。用f:\tomcat4\bin\startup.exe启动Tomcat,用f:\tomcat4\bin\shutdown.exe关闭。(如果在执行startup.exe或shutdown.exe的时候提示Out of Environment Space错误,选择DOS 窗口的菜单中的"属性"→" 内存"→" 常规内存", 把"初始环境"由"自动"修改成"2816"就可以了。)

  启动Tomcat后,打开浏览器,在地址栏中输入http://localhost:8080(Tomcat默认端口为8080),如果在浏览器中看到Tomcat的欢迎界面,表示Tomcat工作正常。

  4、测试项目

  把刚才准备好的test.jsp放在f:\Tomcat\webapps\examples\jsp目录下, 在地址栏中输入http://localhost:8080/examples/jsp/test.jsp,如果浏览器中显示"Hello World!",则说明你的JSP环境配置成功了!

  由于Tomcat本身具有web服务器的功能,因此我们不必安装Apache,当然它也可以与Apache集成到一起。
 

- 作者: superbelief 2007年04月27日, 星期五 23:02  回复(0) |  引用(3) 加入博采

XP怎样跳过登录介面直接进入系统?
摘要:XP怎样跳过登录介面直接进入系统? 查看全文

- 作者: superbelief 2007年01月14日, 星期日 07:32  回复(2) |  引用(3) 加入博采

人在他乡之温暖
摘要:和他们一起聊天交流,倍感亲切,在快要回来的时候,还亲自买了四会的特产----砂糖桔.这个时候,你真的感到非常温暖,除了真情地说声"谢谢",我真的无言以对,希望下次他们到广州来,我们好好玩个痛快,亲自为他们做一顿美味的晚餐. 查看全文

- 作者: superbelief 2006年12月27日, 星期三 10:16  回复(0) |  引用(3) 加入博采

患难之中见真情
摘要:凡事看开,好好的生活着吧!虽然我不相信命运,但有的时候即使你再反抗和努力,在冥冥之中命运早有安排...... 查看全文

- 作者: superbelief 2006年12月19日, 星期二 16:05  回复(0) |  引用(3) 加入博采

“走鬼”真的是会走的鬼吗?
摘要:我不想妄自推测,起码我就觉得生活在大城市的低层的弱势群体,是否有人去关心和爱护他们,给他们一点温暖和关怀呢?如果我们一味去驱赶他们,逼他们在生活边沿挣扎,社会真的会多很多犯罪之人!因为生活和社会的歧视,执法人员的驱赶,他们无法生活....... 或许一个城市的安定和规范化,除了要有完善的法律法规和严格执法的人员外,是否考虑一个和谐城市的应该用善良的心去帮助那些弱势群体,提供一些稳定的谋生机会给他们呢? 查看全文

- 作者: superbelief 2006年11月26日, 星期日 17:50  回复(0) |  引用(3) 加入博采

工作阵地的再次转移

经过一番辛辛苦苦的准备,我们开始新一轮的工作阶段,我们转移到广轩大厦。

今天我们很早就可以下班了,大概三点多......

听同事说,那边很多好吃好玩的,我也怀着美好的希望......

要下班拉,比心机好好完成自己的工作吧......

- 作者: superbelief 2006年10月20日, 星期五 15:34  回复(0) |  引用(3) 加入博采

海阔天空,无所不吹
昨天晚上,我上QQ和同学聊天,没有想到又碰到靓仔艺,因此两个臭皮象大吹特吹起来!
首先他问我:“我们学校有人真的跳楼吗?”
“是哦,一个计算机科学系大二的师妹!”
“靓女不?”
“我怎么知道哦?现场和消息都被封锁。”
“那靓仔为何有此一问?”
“天那,更都不知道?”
“莫非你有心怀鬼胎?”
“嘿,要是靓女就可惜了,如果是我都想......”
“你也想跳?”
“忡使讲?”
“那跳的时候记得通知我一声,等我亲眼目睹这天下奇观,奇观天下!米走宝了!”
“好,不过你在楼下我们刚好压住你。”
“shift,我避,避,避......”
“避?无用个!既是事实,是祸是福都逼不过!你刚好在我们下面垫住,我们两个没有事,游山玩水,双宿双栖,你瓜左......”
“扑街,我就算死了也变成孤魂野鬼整天跟住你地,冤魂不散,要你地人不成人,鬼不成鬼!”
“问你怕左未?”
“嘿嘿,最好做个女美鬼?”
“好,没问题,就算做个女美鬼也要把你搞得精尽人亡,痛不欲生......”
“绝,无得顶......”

- 作者: superbelief 2006年10月16日, 星期一 08:48  回复(0) |  引用(3) 加入博采

纵有千种风情,更与何人说(转)
摘要:寒蝉凄切。对长亭晚,骤雨初歇。都门帐饮无绪,留恋处、兰舟催发。执手相看泪眼,竟无语凝噎。念去去、千里烟波,暮霭沉沉楚天阔。 多情自古伤离别,更那堪冷落清秋节!今宵酒醒何处?杨柳岸、晓风残月。此去经年,应是良辰好景虚设。便纵有千种风情,更与何人说? ——雨霖铃·柳永 查看全文

- 作者: superbelief 2006年10月15日, 星期日 15:21  回复(0) |  引用(3) 加入博采

生命不能承受之轻
摘要:直视惨谈残酷的人生,才是真正的生活者。人生的起起落落,是一种磨练和洗礼,正是由于生活的考验,我们才坚强、成熟起来。我经常提醒自己,每次遇到挫折的时候,我会把它当作一种上天给我考验,勇敢面对,采取实际的行动,让时间去证明一切。生命固然是有强和弱之分,也有生命不可承受之重和生命不可承受只轻之分,但是我们不能因此和放弃,世界还有很多美好的事等着我们去做呢?哪里那么容易就放弃呢?何不放开胸怀,以平静的心态寻找解决问题的途径和方法呢?何不微笑积极度过生活每一天呢? 查看全文

- 作者: superbelief 2006年10月15日, 星期日 14:40  回复(0) |  引用(3) 加入博采

闲谈成竹在胸
摘要:许多人都希望自己无论做什么事情都胸有成竹,游刃有余,当然我也不例外,一直孜孜不倦的追求...... 我刚从"象牙塔"里走出来,一直以为孜孜不倦是很容易做到的,只要一直坚持不懈,百折不挠的追求自己的目标就行了。其实这是一种很天真的想法,哲学是上所得对,具体问题要具体分析,三思而后行,取最佳的策略或方法,努力去实践,才能略有所成,并非容易件事...... 查看全文

- 作者: superbelief 2006年10月13日, 星期五 16:23  回复(0) |  引用(3) 加入博采

老毛病又犯时有所悟
摘要:总之,要不是四千块以的(所谓金领)上,在广州生活不像样,更不要发什么白日梦买房子,像我们这样真的一年也买不到一个厕所...... 查看全文

- 作者: superbelief 2006年10月11日, 星期三 15:56  回复(0) |  引用(3) 加入博采

书包的变更
摘要:现在,很多专家都在呐喊着要给孩子减负,家长望子成龙,望女成凤,给孩子浇灌知识,真的可为用心良苦,为什么不实际点,设身处地为孩子想想...... 查看全文

- 作者: superbelief 2006年10月10日, 星期二 08:43  回复(0) |  引用(3) 加入博采

上班第一次迟到
摘要:经历这次,我学聪明了,宁愿早一分钟也不要迟一分钟赶公车。 查看全文

- 作者: superbelief 2006年10月9日, 星期一 12:24  回复(0) |  引用(3) 加入博采

美好的笑声

我是有个习惯,总喜欢思考问题,但是往往一个很简单的问题,或许在我思维当中,很可能是一个复杂的问题。

昨天,就是中秋节,我有个很好的同学来我这里吃饭,所以准备的菜还是不少的!但足够两个人吃,谁知道,他因计划有变,而不能及时来我这里吃饭,我只好把菜全部的做好。没有办法,无论自己怎么吃,都吃不完,反而越想吃多点,但就是吃不下。最后,我吃到肚子都快爆炸了,但菜好像什么也没有动过一样。为什么呢?我一直在思考这个问题,或许我那时真的有点饱,吃不下,或许是太多了,任你怎么吃,也吃不动!

今天,我和首富去买菜,看到他好象有小孩的肚子,想想以前我们一起都能把饭菜消灭干净,才大彻大悟,原来少了首富,看来以后做菜吃饭,真的少不了他……(纯属开玩笑)

收复听了我所言,大笑起来:“扑街,你是说我吃得多是吗?”

我也边笑边道:“你说的,我没有说过哦…..能吃是件好事,我都不知道你的身材,恐怕我都没有这个希望,再努力也不能实现。嘿,同人不同命,我认拉……”

“你这个人见人说人话,见鬼说鬼话,我理解。”

说完,大家相觑大笑起来……

- 作者: superbelief 2006年10月7日, 星期六 20:57  回复(0) |  引用(3) 加入博采

中秋节

中秋节,一般都回家团圆,但我例外,一直都在广州过,虽然过得不是非常开心那种,但算是可以的......

到清远玩,中秋和同学一起吃饭聊天,虽然没有回成家,但也过的挺有意义的,大家很久没有见面,话题也特别多,一聊就是半天......

我很爱我的家,很想回去一趟,要不是有点事情要办,我真的回家了......

转眼间,七天假期就过去,时间过的真快,很快要上班了,真的有点犹豫.....

- 作者: superbelief 2006年10月7日, 星期六 00:38  回复(0) |  引用(3) 加入博采

清远发展之思考
摘要:教育是百年大计,大家都知道,但是没有一定的经济基础,是很难大力发展教育的,清远为什么能不断的投资教育,一个很重要的原因,市财政有钱,什么事情,有钱就好办了...那钱哪里来呢?工业和旅游业为之提供强大的经济支持。一个城市,一个国家,要发展,真的关键在于经济建设。 查看全文

- 作者: superbelief 2006年10月6日, 星期五 10:49  回复(0) |  引用(3) 加入博采