More servicesWindows Live
HomeHotmailSpacesOneCare
 
MSN
Sign in
 
 
Spaces home  痕 TraceStudioPhotosProfileFriendsBlog Tools Explore the Spaces community

Blog

空间关闭

本空间关闭,以后不再更新。谢谢朋友们!

难得一记

自去Coolsand以后就少有写博客,也不是没有时间,只是少了写的心情而已。整日忙于调程序,发布版本,心绪少有整理,陷于终日的生活奔波之中。冲动与激情逐渐远离,剩下的只有现实的机械,周而复始有条不紊的运作,就像一部钟表。

决定换工作,换个环境发展另一片天地,希望经历更丰富的东西!

GSM手机的MMI窗口管理原理

摘要:

采用面向对象的程序设计技术,用C语言开发窗口结构的GSM手机MMI(人机接口)软件,程序结构清晰,代码效率高,模块可再用性好。本文粗浅地谈了GW手机MMI软件开发的功能模块组织、窗口管理等技术,并以快捷功能为例,说明具体功能的实现方法。

关键词:人机接口(MMI) 功能模块组织 窗口管理。GSM手机是直接为移动用户服务的移动通信终端。其组成一般包括4个部分:射频单元、基带单元、人机接口(Man Machine Interface,缩写MMI)和软件。

1 MMI的功能及对软件的要求

MMI是进行移动通信的人与提供移动通信服务的手机之间交往的界面。它包括硬件和软件:硬件有键盘、显示器、话筒、耳机和SIM卡等;软件有基本人机界面功能、用户SIM卡功能、公众移动网功能、菜单与电话本功能等。 MMI主要有以下功能: (1)输入用户操作信息。 (2)以声、光、振动等手段显示手机及网络的状态、输出操作结果。 (3)实现GSM相关协议,如DRAFT pr ETS 300 906珍动台特性,ETS300 907移动台MMI等标准对MMI的各项要求。 (4)提供合理、方便的操作方法。 (5)对众多的功能进行分类、组织,以方便用户使用。(6)增加计算器等附加功能,提高手机的实用性。 (7)加入动画、图标、问候语等修饰功能,使产品界面美观、友好。 为了满足上述功能,对MMI软件的开发工作提出了以下相关要求:(1)充分消化GSM协议,完整地实现协议要求的各项基本功能。 (2)软件工作稳定可靠,与底层软件接口方便,以保证整机的性能。 (3)选用代码效率高,表达能力强,可移植性好的编程语言,以便提高产品的性能价格比,降低开发成本。(4)根据GSM手机界面的具体情况,充分利用LCD显示器的表达能力,借鉴、采用最新的软件开发技术,运用图形、动画及汉化界面、汉字功能,美化产品、方便使用。 (5)精心组织程序结构,使软件结构清晰,各模块独立性强,可扩充性、可封装性好,便于开发小组分工合作以及各阶段开发成果的充分利用,达到缩短产品开发周期、丰富产品功能的目的。(6)发挥创造性,开发特色功能、实用功能,提高产品吸引力。

2 MMI软件功能模拟的组织结构

GSM手机的MMI软件有一个主程序,主要作用是建立消息循环,负责分发消息。当收到来自底层的开机消息时,MMI层软件进行初始化,并创建基本窗口。窗口(window)是一个术语,它可以接收消息,可能在显示屏上有一个对应的显示区域,也可以没有。字符显示区,编辑域,或者既有字符显示区又有编辑域的对话窗口都是窗口的例子。基本窗口是MMI层所有窗口的“根”,其它窗口都是这个窗口的子窗口。到达MMI 层的GSM消息,其它窗口不处理时,都送到基本窗口中作缺省处理。在基本窗口中,根据不同情况,进行状态转换,分别创建等待关机、充电、等待插入SIM卡、等待输入PIN、等待SIM卡解锁等子窗口,处理开机及关机过程中的各项工作。顺利完成各项开机工作后,转人待机状态,创建待机窗口。如果因接听来电或拨打电话进入通话状态,则取消待机窗口,创建通话窗口。待机窗口可以完成拨号、启动快捷功能等工作,也可以进一步创建电话本、功能菜单等子窗口。 菜单窗口可以派生一系列子菜单窗口,形成一棵菜单树。这棵菜单村把手机的众多功能有机地组织在一起。各个菜单窗口都是菜单窗口类的实例,菜单的选择、显示等功能都在菜单类中完成。

3 MMI软件的核心结构——窗口管理

根据GSM手机MMI软件开发的具体情况,采用面向对象的程序设计技术,用C语言以窗口方式和消息驱动机制来组织软件结构,可以满足对MMI软件开发工作的各项要求。在这个技术方案中,窗口管理是整个MMI软件的核心结构。窗口管理为对话窗口、菜单、编辑及其它用户输入输出操作提供了一个基本框架,为消息处理提供了基本手段。由于使用了面向对象的程序设计方法,MMI软件采用消息驱动机制。窗口管理收集所有的输人信息,然后把这些输入信息以消息的形式送往合适的窗口。这些消息的执行结果又可能产生新的消息,新消息的传送仍由窗口管理负责。窗口管理通过调用窗口函数,向窗口函数传递消息参数,把消息送到目的窗口。窗口函数是其所属窗口在窗口管理中注册的系统函数,是窗口最重要的属性。窗口管理调用窗口函数对窗口进行操作,处理窗口接收到的所有消息。窗口函数对消息的处理方法确定了窗口的表现和行为特征。窗口管理调用标准的窗口函数,自动处理窗口的许多特性,应用程序只要负责创建窗口、处理窗口产生的高级事件及窗口的异常情况。在这个环境中,用户可以对GSM 消息作处理,也可以让系统对GSM消息作缺省处理。窗口管理把来自键盘和软件中其它实体的消息送到具有当前焦点的窗口。在软件的整个运行过程中,总存在一个具有焦点的窗口,它负责处理输人消息,或者把消息沿着从子窗口到父窗口方向递送的传递链送到一个可以处理该消息的窗口。 MMI层主要有两类输入消息:它们是来自系统其它部分的键盘事件消息和GSM协议栈消息。窗口消息按一定的规则选择传递路径。键盘消息是由按键的按下和释放产生的,被送往具有焦点的窗口。键盘消息最多只能传到父窗口,不能再往上传送。GSM协议栈消息可以从子窗口到父窗口按窗口层次结构一直传递,直到有一个窗口接受这条消息为止。窗口管理也提供了一种使消息直达某一窗口的机制,使消息可以直接送往请求这个消息的窗口。这个方法在某条消息只有一个特定的窗口感兴趣的情况下非常有用。 MMI层内部产生的消息,一般不按窗口层次结构由于窗口向父窗口传送。如果要把该类消息从子窗口向父窗口传送,子窗口要负责这项工作。未处理的消息如何传送,由缺省的消息处理函数负责。系统提供了一些窗口类。如文本类,用于显示固定字符;菜单类,用于菜单的显示和处理;编辑类,用于字符的编辑等。应用程序可以向窗口管理注册新的窗口类。 窗口类实现了许多窗口的共同特性。向窗口管理注册后的窗口类,可以生成窗口实例,很方便地为许多窗口再用。例如,菜单窗口的工作方式相同,只有当菜单窗口的一个菜单项被选定时,才需要一段特定的程序来处理这特定的选择。菜单类窗口的每个实例在选定特定的菜单项前的窗口管理都可以用窗口类中的同一段程序管理。这里强调一下,只有向窗口管理注册了的窗口类,才能生成窗口实例。窗口实例继承了窗口类的特性,也可以增加自己的特性,还可以通过重载消息处理函数改变从窗口类继承来的特性。生成窗口实例时,要把窗口类名、窗口名、窗口识别号、窗口函数名、窗口位置数据、父窗口、窗口风格、窗口状态、窗口键盘和窗口私有数据等参数送往窗口管理。为了方便,预先定义了一些通用的对话窗口生成函数。如通知消息对话窗口,可以显示通知信息;开/关选择对话窗口,可以用于类似“开”或“关”等开关量的选择;PIN输入对话窗口,可以用于输入PIN码等等。窗口消息在窗口函数中处理。窗口消息送往一个窗口时,实际上是送往这个窗口的窗口函数。每个窗口类都必须有一个窗口函数。在窗口实例中不处理的消息一般用缺省消息处理函数自动送往该窗口的窗口类的窗口函数中处理。某些在窗口类中不处理的消息,如GSM事件消息,则沿着从子窗口到父窗口方向递送的传递链自动送往父窗口处理。对话窗口的子窗口可能会有一个子类窗口过程,这时窗口消息首先送往具有焦点的子窗口,如在待机窗口中,数字键消息首先送往电话号码编辑子窗口的窗口函数中处理。下面以快捷功能为例,说明如何实现具体功能。

4快捷功能及其实现

菜单一般按功能分类编排,有时常用的功能安排在较深的菜单下面,使用时常感不便。为了方便用户访问常用功能,许多手机都有快捷功能。几种不同方法都可以实现快速访问菜单项的目的。

4.1功能编号法

给每个菜单项一个功能编号,在主菜单下键入这个编号,就可以进入这项菜单。例如主菜单第五项一子菜单第四项一下一级子菜单第一项的功能编号为5-4-1。只要在主菜单下键人5、4、1,就可以进入这项功能。 每项菜单在其所属窗口中都有一个编号。这种方法其实是每次按下数字键时,选中当前窗口中该数字键所代表的菜单项,逐级进入,直至调出所需的功能。这项功能可以在菜单类中实现,这样,任何菜单窗口就都有用数字键选择菜单项的功能。只要在菜单类的窗口函数中,加人数字键键盘消息的处理代码就可以实现这项功能。

4.2快捷菜单法

在主菜单下增加一个子菜单,把原来分布在各级子菜单下的常用功能收集到这个子菜单中,就组成一个快捷菜单。这些功能除了可以在各级子菜单中找到,也可以从快捷菜单直接进入。快捷菜单的处理方法与普通菜单一样。快捷菜单本身也可以设计成用快捷键进入,其实现方法参看下面的快捷键法。

4.3快捷键法

快捷键法一般是设法利用键盘上的某些键进入快捷功能。由于键的用途很多,必须满足一定的条件才能进入快捷功能。比如在待机状态下,连续按住某个键约2秒进入快捷功能。快捷键功能一般在待机窗口中实现,基本方法如下:

1)              在待机窗口的电话号码编辑子窗口中,当收到有键压下的消息时,启动按键计时器;当收到按键释放的消息时,按键计时器停止工作。

2)              按键计时器利用每秒一次到达待机窗口的定时器消息进行计时。

3)              按键时间超过2秒时,调用按键所代表的功能的实现函数,启动快捷功能。

5结束语

GSM手机MMI软件的开发是一项复杂的软件工程。采用面向对象的程序设计技术用 C语言开发窗口结构的MMI软件,程序结构清晰,代码效率高,模块可再用性好,便于增加产品功能,便于开发小组编程时分工合作。

《大悲咒》原文及念誦注音

《大悲咒》原文及念誦注音

                                      

*************************************

  大悲咒 圓容版 如是我聞

 大悲咒 印度版

 ·藏传大悲咒

 古梵音大悲咒 黄慧音

 梵音大悲咒 请尊重版权 齐豫

大悲咒  

大悲咒,是觀世音萻薩的大慈悲心,無上菩提心,以及濟世渡人,修道成佛的重要口訣。其中一字一句都包含著正等正覺的真實工夫,沒有一絲一毫的虛偽。本咒是觀世音菩薩「大悲心陀羅尼經」中的主要部份,共有八十四句。其詳名為:「千手千眼觀世音菩薩廣大圓滿無碍大悲心陀羅尼經大悲神咒。」其得名的由來是:有一次佛陀告訴阿難尊者說:「如是神咒,有種種名:一名廣大圓滿、一名無碍大悲、一名救苦陀羅尼、一名延壽陀羅尼、一名滅惡趣陀羅尼、一名破惡業障陀羅尼、一名滿願陀羅尼、一名隨心自在陀羅尼、一名速超十地陀羅尼。」它的被稱為千手千眼觀世音菩薩的因由是:有一次他曾經在千光王靜住如來住所時,靜住如來特為了他說了「廣大圓滿無碍大悲陀羅尼」,並且對他說:「善男子彈汝當持此心咒,普為未來惡世一切眾生作大利樂。」據經的記載:當時觀世音菩薩聽了此咒後,即由初地證至第八地--不動地。於是發出誓願說:「設我當來之世能利樂一切眾生者,令我即時身生千手千眼具足。」如此發願後,果真頓時身生千手千眼,並且十方大地為之震動,十方諸佛亦都放出無量光明,遍照十方的無邊世界。至於本咒所以有種種異名,釋尊曾經告訴阿難說:這是起因於觀音菩薩的宏願。菩薩曾在世尊處發誓說:「設若諸人天誠心念我名者,亦應念本師阿彌陀如來名,然後誦此陀羅尼神咒。如一夜能持誦五遍,則能除滅百千萬億劫生死重罪。設若諸人天誦持大悲章句者,即於臨命終時,十方諸佛皆來授手接引,並且隨其所願往生諸佛國土。設若諸人天誦持大悲心咒者,十五種善生,不受十五種惡死。」因此大悲咒,不但能除一切災難以及諸惡病苦,且能成就一切善法遠離一切怖畏,所以我們應以十分虔敬的信心與清掙心去受持它,方能契合菩薩的大悲心,獲得無上的利益。沉淪在三界五趣眾生,果能經常持誦大悲咒,不但能治一切心病與身病,且能由此超脫生死輪迴,願眾生齊誦本咒,同證佛果。

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

大悲咒全文


南無.喝囉怛那.哆囉夜耶.
南無.阿唎耶.
婆盧羯帝.爍缽囉耶.
菩提薩埵婆耶.
摩訶薩埵婆耶.
摩訶迦盧尼迦耶.
唵.
薩皤囉罰曳.
數怛那怛寫.
南無悉吉慄埵.伊蒙阿唎耶.
婆盧吉帝.室佛囉愣馱婆.
南無.那囉謹墀.
醯利摩訶皤哆沙咩.
薩婆阿他.豆輸朋.
阿逝孕.
薩婆薩哆.那摩婆薩哆.那摩婆伽.
摩罰特豆.
怛姪他.
唵.阿婆盧醯.
盧迦帝.
迦羅帝.
夷醯唎.
摩訶菩提薩埵.
薩婆薩婆.
摩囉摩囉.
摩醯摩醯.唎馱孕.
俱盧俱盧.羯蒙.
度盧度盧.罰闍耶帝.
摩訶罰闍耶帝.
陀囉陀囉.
地唎尼.
室佛囉耶.
遮囉遮囉.
摩麼.罰摩囉.
穆帝隸.
伊醯伊醯.
室那室那.
阿囉嘇.佛囉舍利.
罰沙罰參.
佛囉舍耶.
呼嚧呼嚧摩囉.
呼嚧呼嚧醯利.
娑囉娑囉.
悉唎悉唎.
蘇嚧蘇嚧.
菩提夜.菩提夜.
菩馱夜.菩馱夜.
彌帝唎夜.
那囉謹墀.
地利瑟尼那.
波夜摩那.
娑婆訶.
悉陀夜.
娑婆訶.
摩訶悉陀夜.
娑婆訶.
悉陀喻藝.
室皤囉耶.
娑婆訶.
那囉謹墀.
娑婆訶.
摩囉那囉.
娑婆訶.
悉囉僧.阿穆佉耶.
娑婆訶.
娑婆摩訶.阿悉陀夜.
娑婆訶.
者吉囉.阿悉陀夜.
娑婆訶.
波陀摩.羯悉陀夜.
娑婆訶.
那囉謹墀.皤伽囉耶.
娑婆訶.
摩婆利.勝羯囉夜.
娑婆訶.
南無喝囉怛那.哆囉夜耶.
南無阿唎耶.
婆嚧吉帝.
爍皤囉夜.
娑婆訶.
唵.悉殿都.
漫多囉.
跋陀耶.
娑婆訶.

参考:《大悲咒》原文及念诵注音http://www.hhfg.org/fjyx/f21.html

或者:http://www.jxfcs.com/dbz.html

*************************************

大悲咒句文譯意

  南無(皈依)喝囉怛那哆囉夜耶(三寶).南無(皈依)阿唎耶(聖),婆盧羯帝(觀)爍缽囉耶(自在).菩提薩埵婆耶(覺有情).摩訶薩埵婆耶(大覺有情).摩訶迦盧尼迦耶(有大悲者).唵(皈命),薩皤囉罰曳(一切尊).數怛那怛寫(為救濟於一切恐怖者).南無(皈命)悉吉慄埵(於彼)伊蒙阿唎耶(我聖).婆盧吉帝室佛囉愣馱婆(觀自在香山).南無(皈命)那囉謹墀(言聖觀自在賢愛.慈悲之心).醯利摩訶皤哆沙咩(我今宣說).薩婆阿他豆輸朋(一切希望圓滿而有光輝者).阿逝孕(無比).薩婆薩哆(一切鬼神不能打勝者)那摩婆薩哆,那摩婆伽(童真).摩罰特豆(有道即令迷界清掙者).怛姪他(謂).唵(皈命).阿婆盧醯(有光明智慧者).盧迦帝(觀自在).迦羅帝(超越世間者).夷醯唎(吁獅子王).摩訶菩提薩埵(大菩薩).薩婆薩婆(一切一切).摩囉摩囉(憶念憶念),摩醯摩醯唎馱孕(心真言).俱盧俱盧羯蒙(作作事業).度盧度盧(保持保持)罰闍耶帝(遊空者).摩訶罰闍耶帝(大遊空者).陀囉陀囉(保持).地唎尼(持者).室佛囉耶(帝王自在).遮囉遮囉(行動).摩麼罰摩囉(無垢者).穆帝隸(無垢體).伊醯伊醯(教語).室那室那(弘誓).阿囉參(王)
佛囉舍利(覺堅固).罰沙罰參(歡喜).佛囉舍耶(除滅由貪瞋痴行動之毒害者).呼嚧呼嚧摩囉(作法無垢).呼嚧呼嚧醯利(速疾速疾,有花鬉者).娑囉娑囉(堅固者),悉唎悉唎(或蓮花).蘇嚧蘇嚧(蓮花頸).菩提夜菩提夜(悟悟).菩馱夜菩馱夜(教悟).彌帝唎夜(有慈愛者).那囉謹墀(青頸).地利瑟尼那(堅利).波夜摩那(名聞).娑婆訶(欲見者,令影現,生歡喜圓滿成就涅槃之意).悉陀夜(義).娑婆訶(有成就者).摩訶悉陀夜(大義).娑婆訶(有大成就者).悉陀喻藝(無為).室皤囉耶(得大自在).娑婆訶(於悉地與瑜伽有自在者).那囉謹墀(賢愛).娑婆訶(為青頸圓滿成就).摩囉那囉(有猪面).娑婆訶(成就).悉囉僧阿穆佉耶(愛語第一義),娑婆訶(手執蓮花者).娑婆摩訶(大成就)阿悉陀夜(無比).娑婆訶(成就).者吉囉阿悉陀夜(無比).娑婆訶(成就).波陀摩羯悉陀夜(大義).娑婆訶(於法螺之聲,令開悟者).那囉謹墀皤伽囉耶(賢首聖尊).娑婆訶(成就).摩婆利勝羯囉夜(英雄威德生性).娑婆訶(征於住左肩方面之黑色魔者).南無喝囉怛那哆囉夜耶(皈依佛法僧三寶),南無(皈命)阿唎耶(聖).婆嚧吉帝(觀).爍皤囉夜(自在).娑婆
訶(成就).唵(皈命),悉殿都(令我成就).漫多囉(真言).跋陀耶(句),娑婆訶(成就).

*************************************

大悲咒全文概述

  皈依三寶,皈依大悲渡世的觀世音菩薩,世間感受一切恐怖病苦的眾生,要誓願宣說廣大圓滿無礙大悲救苦救難的真言,要看破生死煩惱,了悟真實光明,皈依於大慈大悲、隨心自在的觀世菩薩。祈求一切圓滿,不受一切鬼卒的侵害,皈命於為觀世音菩薩請說廣大圓滿無礙大悲心陀羅尼的本尊-千光王靜住如來。能得清淨圓明的光輝,能除無明罣礙的煩惱,要修得無上的功德,方不致沈淪在無邊執著的苦海之中。

  大慈大悲的觀世音菩薩,常以諸佛菩薩的化身,悠遊於大千世界,密放神通,隨緣化渡,一如菩薩顯化的獅子王法身,引導有緣眾生遠離罪惡,忘却生死煩惱,皈向真實光明。大慈大悲的觀世音菩薩以清淨無垢聖潔蓮華的法身,順時順教,使眾生了悟佛因,大慈大悲的觀世音菩薩,對於流布毒害眾生的貪、瞋、痴三魔,更以嚴峻大力的法身予以降伏,使修持眾生得能清淨,菩薩更以清淨蓮華,顯現慈悲,揚洒甘露,救渡眾生脫離苦難。只是娑婆世界眾生,常習於十惡之苦,不知自覺,不肯脫離,使行諸利樂的菩薩,常要忍受怨嫉煩惱。然而菩薩慈悲,為救眾生痴迷,復顯化明王法身,以無上智慧破解煩惱業障,遠離一切恐怖危難。大慈大悲觀世音菩薩顯化之諸般法相,常在眾生之中,隨緣隨現,使眾生憶佛念佛,迷途知悟。

  為使眾生早日皈依歡喜圓滿,無為虛空的涅槃世界,菩薩復行大慈大悲的誓願,手持寶幢,大放光明,渡化眾生通達一切法門,使眾生隨行相應,自由自在得到無上成就。菩薩的無量佛法,廣被大眾,恰似法螺傳聲,使諸天善神均現歡喜影相,亦使眾生於聽聞佛法之後,能罪障滅除,各得成就。不管是猪面、獅面,不管是善面、惡面,凡能受此指引,都能得諸成就,即使住世之黑色塵魔,菩薩亦以顯化之大勇法相,持杖指引,渡其皈依三寶。

  南無大慈大悲聖觀世音菩薩,願誠心誦持此真言者,皆得涅槃。

大悲咒為任何學佛者所必修,猶金錢為世人所必具,此咒能圓滿眾生一切願望並治八萬四千種病。觀世音菩薩白佛言:「如眾生誦持大悲咒,不生諸佛國者,不得無量三昧辯才者,於現在生中一切所求若不遂者,誓不成正覺,惟除不善及不至誠」。

*************************************

大悲咒持誦須知

一凡持誦是咒者.不拘宰官士庶.男婦老幼道士僧尼.當守戒律.竭忠於君.孝養父母.不殺不盜.不淫不妬.不嗔不恨.不驕不詐.不綺言妄語.不惡口毒舌.尊重是咒.敬而信之.如獲至寶.自然所求如意.所願遂心.功德不可思議.

一凡持誦是咒者.先念經中南無大悲觀世音.願我速知一切法云云.再念南無大悲觀世音菩薩十聲.南無阿彌陀佛十聲.欲求某事.即觀想圖中某手眼寶相.至心持誦.虔誠拜禱.無不響應.

一凡持誦是經者.必須庵觀寺院之內.廣設壇場.作種種佈施供養.潔淨身心.焚修叩禮.乃為盡善.次則家庭靜室.灑掃嚴潔.焚香供養.方可誦持.又或力不從心.即望空一香.按日持誦.但辦誠心.自得孚感之應.甚至舟車鞍馬.旅舍市塵.不及焚香.無由禮拜之處.只於每日清晨盥洗之後.至心望空虔誦五遍.勿令間斷.大悲威神之力.亦無有不感應者.

一凡持誦是咒者.當悟經中所云.廣宣流布.莫令斷絕二句.或印施.或抄寫.或口授.務令此咒普為流傳.輾轉濟度.功德無量.

一持此神妙大陀羅尼之人.必由夙世已曾供養諸佛.廣植善根.始能信心受持.是人幼德.已無量無邊.獲福亦不可思議.但始勤終怠.修行人所忌.懷不信心.罪業更深.經云.於咒疑者.乃至小罪輕業亦不得滅.何況重罪.普願同志善友.信心堅固.善果圓成.實厚望焉.

*************************************

大悲咒的版本考

1、<<房山石經>>之<<千句大悲咒>>
隋‧大業年間(公元605年),天摘自果濱‧『房山石經』千句大悲咒初探
 台宗二祖南岳慧思大師的弟子靜琬法師遂發心刻經於石,以留傳後世。他是「房山石經」的最早創刻者,以後他的弟子繼承師志,不斷鐫刻,代代相傳,歷經唐、遼、金、元、明等朝代。在這千餘年間,除因戰亂出現過幾次短暫的停頓外,刻經事業一直持續不斷,到清初才完成史無前例的刻經事業。所完成的石經分別埋在北京房山縣雲居寺的石經山上九處洞穴,及現在雲居寺的地宮。共刻石碑一萬四千二百七十八塊石,佛經一千一百二十二部,三千四百多卷。
    在《房山石經》編號第二十八冊中的《釋教最上乘秘密藏陀羅尼集》,其中卷十三有一陀羅尼名為「聖觀自在菩薩蓮花三摩地青頸大悲大心陀羅尼」,全咒文計924句,後面接著是「聖觀自在菩薩廣大圓滿無礙大悲心大陀羅尼」(與現在流行的八十四句大悲咒同名)計76句,如果全部合計則總共為「一千句」,這豈不是與「千手千眼」的觀音菩薩有暗合之處?同時也創下所有唐密咒語中最長的咒文,也許讀者會認為這是兩個不同系統的觀音大悲咒,其實從咒文的內容來看它的確都是屬於觀音的「大悲咒」系統。
    咒文內容與不空大師譯的96句「青頸觀自在菩薩心陀羅尼」(即「大慈大悲救苦救難觀世音自在王菩薩廣大圓滿無礙自在青頸大悲心陀羅尼」)只有幾句之差,與伽梵達摩八十四句大悲咒反而差得比較多。也就是說雖題名為「聖觀自在菩薩廣大圓滿無礙大悲心大陀羅尼」的咒文內容還是以不空的96句為主,並非伽梵達摩84句大悲咒的版本。

2、不空譯96句大悲咒
    不空譯《聖千手千眼觀自在菩薩廣大圓滿無礙大悲心陀羅尼》,據《至元法寶勘同總錄‧卷四》云:本咒(指96句大悲咒)與伽梵達摩譯本乃是屬於「同本譯異」(詳見《大正藏法寶總目錄》第二冊頁204中─下),也就是96句大悲咒和84句大悲咒是屬於「同本」的大悲咒,只不過是翻「譯」內容略有差「異」而已。
     青頸觀音的畫像是:「青頸觀自在菩薩畫像法。其像三面當前正面作慈悲凞怡貌。右邊作師子面(表證得菩提心)。左邊作豬面(表世人愚癡,執著於生死)。首戴寶冠。冠中有化無量壽佛。又有四臂。右第一臂執杖。第二臂執把蓮花。左第一執輪。左第二執螺。以虎皮為裙。以黑鹿皮於左膊角絡。被黑蛇以為神線。於八葉蓮花上立。瓔珞臂釧鐶珮光焰莊嚴其身。其神線從左膊角絡下」。(詳《大正藏》第二十冊頁490中。)

3、唐西天竺沙門 伽梵達摩譯84句大悲咒

        傳統伽梵達磨譯之84句《千手千眼觀世音菩薩廣大圓滿無礙大悲心陀羅尼》,流行最為廣泛。

   中國人所最熟悉的「大悲咒」,按照「斷句」來分有75句、82句、84句、88句、94句、143句等。

*************************************

*************************************

大悲咒21首

心月居士收集整理的21首大悲咒、梵唱大悲咒

从第11首开始,一般人称为梵唱大悲咒,或藏传大悲咒,其实是十一面观世音菩萨根本咒。虽然都是观音所说,却是不同的。大悲咒是千手千眼观世音菩萨所说,后者是十一面观世音菩萨所说,是观音的不同化身所说;前者共84句,而后者比较短,不要搞混了。
  据说此“圣十一面观自在菩萨根本咒”是达赖喇嘛普传于台湾的,后来台湾的音乐制作人把此咒制作成歌曲,因为说“圣十一面观自在菩萨根本咒”很少人知道,所以就改了个名“梵唱大悲咒”,因为84句“大悲咒”在汉地很普遍,一说“大悲咒”谁都知道,这样有利于他们销售,以至于使很多人搞混“圣十一面观自在菩萨根本咒”与84句的“大悲咒”。






01 大悲咒经典唱颂-新加坡金版

02 大悲咒经典唱颂2

03 八十四句梵唱大悲咒-达摩配乐

04 大悲神咒

05 大悲咒-黄慧音

06 大悲咒 八十四句完美版国语唱颂

07 齐豫-大悲咒

08 大悲咒-般若心曲

09 发现白水晶(改编自古曲大悲咒

10 大悲咒-钢琴曲

11 十一面观音根本咒-天使波罗蜜2

12 十一面观音根本咒(诵咒加持版)

13 十一面观音根本咒 藏音欢喜版

14 十一面观音根本咒 男女声童音版(印度音乐风格)

15 十一面观音根本咒-舞动版

16 十一面观音根本咒

17 梵唱大悲咒经典唱颂(十一面观音根本咒)

18 梵唱大悲咒(十一面观音根本咒)-藏堪仁波切

19 十一面观音根本咒-达摩配乐

20 慈悲(改编自大悲咒)-加拿大Steve Middleton

21 十一面观音根本咒-古筝曲


http://www.evmm.cn/fy/puming/24k/DBZ.mp3
http://bbs.megajoy.com/lion_do/u ... 1493215038931_1.WMA
http://www.bhfj.com/music/wma/WMA_cd4/05.Wma
http://bbs.megajoy.com/lion_do/u ... 1153682948493_2.MP3
http://www.evmm.cn/xiazai/puming/madala/dabzhou.mp3
http://bbs.megajoy.com/lion_do/u ... 1231558085141_1.mp3
http://www.evdd.com/mp3/qiyu/02.mp3
http://bbs.megajoy.com/lion_do/u ... 5127223511217_2.WMA
http://bbs.megajoy.com/lion_do/u ... 2883611993512_2.WMA
http://bbs.megajoy.com/lion_do/u ... 2105031156944_3.WMA
http://bbs.megajoy.com/lion_do/u ... 1123386816677_2.WMA
http://www.evmm.cn/fy/zhou/001.mp3
http://www.evmm.cn/fy/puming/shiyimian.mp3
http://www.evmm.cn/fy/puming/sym.mp3
http://bbs.megajoy.com/lion_do/u ... 2172470748711_4.mp3
http://bbs.megajoy.com/lion_do/u ... 1221503601635_5.mp3
http://bbs.megajoy.com/lion_do/u ... 1224405404204_6.WMA
http://bbs.megajoy.com/lion_do/u ... 2274066617889_7.WMA
http://www.bhfj.com/music/wma/WMA_cd4/01.Wma
http://bbs.megajoy.com/lion_do/u ... 2303959891721_8.WMA
http://bbs.megajoy.com/lion_do/u ... 1233136246885_9.WMA

*************************************

*************************************

大悲咒手印1

大悲咒手印2

大悲咒手印3

大悲咒手印4

大悲咒手印5

大悲咒手印6

大悲咒手印7

大悲咒手印8

大悲咒手印9
[IMG]http://photos.album.mop.com/c01/66/6a/66/60666a7dc3/1140490165500.jpg>
大悲咒手印10

大悲咒手印11

大悲咒手印12

大悲咒手印13

大悲咒手印14

大悲咒手印15

大悲咒手印16

大悲咒手印17

大悲咒手印18

大悲咒手印19

大悲咒手印20

大悲咒手印21

大悲咒手印22

大悲咒手印23

大悲咒手印24

大悲咒手印25

大悲咒手印26

大悲咒手印27

大悲咒手印28

大悲咒手印29

大悲咒手印30

大悲咒手印31

大悲咒手印32

大悲咒手印33

大悲咒手印34

大悲咒手印35

大悲咒手印36

大悲咒手印37

大悲咒手印38

大悲咒手印39

大悲咒手印40

大悲咒手印41

大悲咒手印42

url:http://tt.mop.com/backyard/read_158969.html

*************************************

大悲咒經文之發音 注音:

ㄋㄚㄇㄛ,ㄏˊㄌㄚˋㄉㄚˊㄋㄨˋ,ㄉㄨㄛㄌㄚˋㄧㄝˋㄧㄝˇ,
ㄋㄚㄇㄛ,ㄨㄛㄌㄧˋㄧㄝˇ,ㄆㄛˊㄌㄨˊㄐㄧㄝˊㄉㄧˋ,
ㄕㄨㄛˋㄅㄛˊㄌㄚˋㄧㄝˇ,ㄆㄨˊㄊㄧˊㄙㄚㄉㄨㄛˋㄆㄛˊ
ㄧㄝˇ,ㄇㄛˊㄏㄜㄙㄚㄉㄨㄛˋㄆㄛˊㄧㄝˇ,ㄇㄛˊㄏㄜㄐㄧㄚ
ㄌㄨˊㄋㄧˊㄐㄧㄚㄧㄝˇ,ㄢㄙㄚㄅㄛˊㄌㄚˋㄈㄚˊㄧˋ,
ㄕㄨˋㄉㄚˊㄋㄨˊㄉㄚˊㄒㄧㄚˋ,ㄋㄚㄇㄛ,ㄒㄧㄐㄧˊㄌㄧˋ
ㄉㄨㄛˋ,ㄧˊㄇㄥˊㄨㄛㄌㄧˋㄧㄝˇ,ㄆㄛˊㄌㄨˊㄐㄧˊㄉㄧˋ,
ㄕˋㄈㄛˊㄌㄚˋㄌㄥˊㄊㄨㄛˊㄆㄛˊ,ㄋㄚㄇㄛ,ㄋㄨˊㄌㄚˋ
ㄐㄧㄣˇㄔˊ,ㄒㄧㄌㄧˋㄇㄛˊㄏㄜㄅㄛˊㄉㄨㄛㄕㄚㄇㄧㄝˋ
ㄙㄚˋㄆㄛˊㄨㄛㄊㄨㄛ,ㄉㄡˋㄕㄨㄆㄥˊ,ㄨㄛㄕˋㄩㄣˋ,
ㄙㄚˋㄆㄛˊㄙㄚˋㄉㄨㄛ,ㄋㄚㄇㄛˊㄆㄛˊㄙㄚˋㄉㄨㄛ,ㄋㄚㄇㄛˊ
ㄆㄛˊㄑㄧㄝˊ,ㄇㄛˊㄈㄚˋㄊㄜˋㄉㄡˋ,ㄉㄚˊㄓˊㄊㄨㄛ,ㄢ,ㄨㄛ
ㄆㄛˊㄌㄨˊㄒㄧ,ㄌㄨˊㄐㄧㄚㄉㄧˋ,ㄐㄧㄚㄌㄨㄛˊㄉㄧˋ,ㄧˊㄒㄧ
ㄌㄧˋ,ㄇㄛˊㄏㄜㄆㄨˊㄊㄧˊㄙㄚㄉㄨㄛˋ,ㄙㄚˋㄆㄛˊㄙㄚˋ
ㄆㄛˊ,ㄇㄛˊㄌㄚˋㄇㄛˊㄌㄚˋ,ㄇㄛˊㄒㄧㄇㄛˊㄒㄧ,ㄌㄧˋ
ㄊㄨㄛˊㄩㄣˋ,ㄐㄩˋㄌㄨˊㄐㄩˋㄌㄨˊ,ㄐㄧㄝˊㄇㄥˊ,ㄉㄨˋ
ㄌㄨˊㄉㄨˋㄌㄨˊ,ㄈㄚˋㄕㄜˊㄧㄝㄉㄧˋ,ㄇㄛˊㄏㄜㄈㄚˋㄕㄜˊ
ㄧㄝㄉㄧˋ,ㄊㄨㄛˊㄌㄚˋㄊㄨㄛˊㄌㄚˋ,ㄙㄞˋㄌㄧˋㄋㄧˊ,ㄕˇ
ㄈㄛˊㄌㄚˋㄧㄝˇ,ㄓㄜˊㄌㄚˋㄓㄜˊㄌㄚˋ,ㄇㄛㄇㄛ,ㄈㄚˋㄇㄛˊ
ㄌㄚˋ,ㄇㄨˋㄉㄧˋㄌㄧˋ,ㄧˊㄒㄧㄧˊㄒㄧ,ㄕˇㄋㄨˊㄕˇㄋㄨˊ,
ㄨㄛㄌㄚˋㄙㄥ,ㄈㄛˊㄌㄚˋㄕㄜˇㄌㄧˋ,ㄈㄚˊㄕㄚㄈㄚˋㄙㄥ
ㄈㄛˊㄌㄚˋㄕㄜˇㄧㄝˇ,ㄏㄨㄌㄨˊㄏㄨㄌㄨˊㄇㄛˊㄌㄚˋ,ㄏㄨ
ㄌㄨˊㄏㄨㄌㄨˊㄒㄧㄌㄧˋ,ㄙㄨㄛㄌㄚˋㄙㄨㄛㄌㄚˋ,ㄒㄧㄌㄧˋ
ㄒㄧㄌㄧˋ,ㄙㄨㄌㄨˋㄙㄨㄌㄨˋ,ㄆㄨˊㄊㄧˊㄧㄝˋ,ㄆㄨˊㄊㄧˊ
ㄧㄝˋ,ㄆㄨˊㄊㄨㄛˊㄧㄝˋ,ㄆㄨˊㄊㄨㄛˊㄧㄝˋ,ㄇㄧˊㄉㄧˋ
ㄌㄧˋㄧㄝˋ,ㄋㄨˊㄌㄚˋㄐㄧㄣˇㄔˊ,ㄙㄞˋㄌㄧˋㄙㄜˋㄋㄧˊ
ㄋㄨˊ,ㄆㄛˊㄧㄝˋㄇㄛˊㄋㄨˊ,ㄙㄨㄛㄆㄛˊㄏㄜ,ㄒㄧㄊㄨㄛˊ
ㄧㄝˋ,ㄙㄨㄛㄆㄛˊㄏㄜ,ㄇㄛˊㄏㄜㄒㄧㄊㄨㄛˊㄧㄝˋㄙㄨㄛㄆㄛˊ
ㄏㄜ,ㄒㄧㄊㄨㄛˊㄩˋㄧˋ,ㄕˇㄅㄛˊㄌㄚˋㄧㄝˇ,ㄙㄨㄛㄆㄛˊ
ㄏㄜ,ㄋㄨˊㄌㄚˋㄐㄧㄣˇㄔˊ,ㄙㄨㄛㄆㄛˊㄏㄜ,ㄇㄛˊㄌㄚˋㄋㄨˊ
ㄌㄚˋㄙㄨㄛㄆㄛˊㄏㄜ,ㄒㄧㄌㄚˋㄙㄥ,ㄨㄛㄇㄨˋㄑㄧㄝˇㄧㄝˇ,
ㄙㄨㄛㄆㄛˊㄏㄜ,ㄙㄨㄛㄆㄛˊㄇㄛˊㄏㄜ,ㄨㄛㄒㄧㄊㄨㄛˊㄧㄝˋ
ㄙㄨㄛㄆㄛˊㄏㄜ,ㄓㄜˊㄐㄧˊㄌㄚˋ,ㄨㄛㄒㄧㄊㄨㄛˊㄧㄝˋ,ㄙㄨㄛ
ㄆㄛˊㄏㄜ,ㄅㄛㄊㄨㄛˊㄇㄛˊ,ㄐㄧㄝˊㄒㄧㄊㄨㄛˊㄧㄝˋ,ㄙㄨㄛ
ㄆㄛˊㄏㄜ,ㄋㄨˊㄌㄚˋㄐㄧㄣˇㄔˊ,ㄅㄛˊㄑㄧㄝˊㄌㄚˋㄧㄝˇ,
ㄙㄨㄛㄆㄛˊㄏㄜ,ㄇㄛˊㄆㄛˊㄌㄧˋ,ㄕㄥˋㄐㄧㄝˊㄌㄚˋㄧㄝˇ
ㄙㄨㄛㄆㄛˊㄏㄜ,ㄋㄚㄇㄛ,ㄏㄜˊㄌㄚˋㄉㄚˊㄋㄨˋ,ㄉㄨㄛㄌㄚˋ
ㄧㄝˋㄧㄝˇ,ㄋㄚㄇㄛ,ㄨㄛㄌㄧˋㄧㄝˇ,ㄆㄛˊㄌㄨㄛˊㄐㄧˊㄉㄧˋ
ㄕㄨㄛˋㄅㄛˊㄌㄚˋㄧㄝˇ,ㄙㄨㄛㄆㄛˊㄏㄜ,ㄢ,ㄒㄧㄉㄧㄢˋㄉㄨ
ㄇㄢˋㄉㄨㄛㄌㄚˋ,ㄅㄚˊㄊㄨㄛˊㄧㄝˇ,ㄙㄨㄛㄆㄛˊㄏㄜ.

*************************************

理解 sizeof ()

     较为详细的总结,同时结合strlen进行比较。
  • 一、好首先看看sizeof和strlen在MSDN上的定义:
首先看一MSDN上如何对sizeof进行定义的:
sizeof Operator
sizeof expression
The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type
(including aggregate types). This keyword returns a value of type size_t.
The expression is either an identifier or a type-cast expression (a type specifier enclosed in
parentheses).
When applied to a structure type or variable, sizeof returns the actual size, which may include
padding bytes inserted for alignment. When applied to a statically dimensioned array, sizeof
returns the size of the entire array. The sizeof operator cannot return the size of dynamically
allocated arrays or external arrays.
然后再看一下对strlen是如何定义的:
strlen
Get the length of a string.
Routine Required Header:
strlen <string.h>
size_t strlen( const char *string );
Parameter
string:Null-terminated string
Libraries
All versions of the C run-time libraries.
Return Value
Each of these functions returns the number of characters in string, excluding the terminal
NULL. No return value is reserved to indicate an error.
Remarks
Each of these functions returns the number of characters in string, not including the
terminating null character. wcslen is a wide-character version of strlen; the argument of
wcslen is a wide-character string. wcslen and strlen behave identically otherwise.
 
  • 二、由几个例子说开去。
第一个例子:
char* ss = "0123456789";
sizeof(ss) 结果 4 ===》ss是指向字符串常量的字符指针
sizeof(*ss) 结果 1 ===》*ss是第一个字符
char ss[] = "0123456789";
sizeof(ss) 结果 11 ===》ss是数组,计算到\0位置,因此是10+1
sizeof(*ss) 结果 1 ===》*ss是第一个字符
char ss[100] = "0123456789";
sizeof(ss) 结果是100 ===》ss表示在内存中的大小 100×1
strlen(ss) 结果是10 ===》strlen是个函数内部实现是用一个循环计算到\0为止之前
int ss[100] = "0123456789";
sizeof(ss) 结果 400 ===》ss表示再内存中的大小 100×4
strlen(ss) 错误 ===》strlen的参数只能是char* 且必须是以''\0''结尾的
char q[]="abc";
char p[]="a\n";
sizeof(q),sizeof(p),strlen(q),strlen(p);
结果是 4 3 3 2     
第二个例子:
class X
{
int i;
int j;
char k;
};
X x;
cout<<sizeof(X)<<endl; 结果 12 ===》内存补齐
cout<<sizeof(x)<<endl; 结果 12 同上
第三个例子:
char szPath[MAX_PATH]
  如果在函数内这样定义,那么sizeof(szPath)将会是MAX_PATH,但是将szPath作为虚参声明时(void fun(char szPath[MAX_PATH])),sizeof(szPath)却会是4(指针大小)
 
  • 三、sizeof深入理解。

1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小。
2.sizeof是算符,strlen是函数。
3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的。sizeof还可以用函数做参数,比如:
short f();
printf("%d\n", sizeof(f()));
输出的结果是sizeof(short),即2。
4.数组做sizeof的参数不退化,传递给strlen就退化为指针了。
5.大部分编译程序 在编译的时候就把sizeof计算过了 是类型或是变量的长度这就是sizeof(x)可以用来定义数组维数的原因
char str[20]="0123456789";
int a=strlen(str); //a=10;
int b=sizeof(str); //而b=20;
6.strlen的结果要在运行的时候才能计算出来,时用来计算字符串的长度,不是类型占内存的大小。
7.sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。这是因为sizeof是个操作符不是个函数。
8.当适用了于一个结构类型时或变量, sizeof 返回实际的大小, 当适用一静态地空间数组, sizeof 归还全部数组的尺 寸。 sizeof 操作符不能返回动态地被分派了的数组或外部的数组的尺寸
9.数组作为参数传给函数时传的是指针而不是数组,传递的是数组的首地址,如:
fun(char [8])
fun(char [])
都等价于 fun(char *) 在C++里传递数组永远都是传递指向数组首元素的指针,编译器不知道数组的大小如果想在函数内知道数组的大小, 需要这样做:进入函数后用memcpy拷贝出来,长度由另一个形参传进去
fun(unsiged char *p1, int len)
{
  unsigned char* buf = new unsigned char[len+1]
  memcpy(buf, p1, len);
}
有关内容见: C++ PRIMER?
10.计算结构变量的大小就必须讨论数据对齐问题。为了CPU存取的速度最快(这同CPU取数操作有关,详细的介绍可以参考一些计算机原理方面的书),C++在处理数据时经常把结构变量中的成员的大小按照4或8的倍数计算,这就叫数据对齐(data alignment)。这样做可能会浪费一些内存,但理论上速度快了。当然这样的设置会在读写一些别的应用程序生成的数据文件或交换数据时带来不便。MS VC++中的对齐设定,有时候sizeof得到的与实际不等。一般在VC++中加上#pragma pack(n)的设定即可.或者如果要按字节存储,而不进行数据对齐,可以在Options对话框中修改Advanced compiler页中的Data alignment为按字节对齐。
11.sizeof操作符不能用于函数类型,不完全类型或位字段。不完全类型指具有未知存储大小的数据类型,如未知存储大小的数组类型、未知内容的结构或联合类型、void类型等。如sizeof(max)若此时变量max定义为int max(),sizeof(char_v) 若此时char_v定义为char char_v [MAX]且MAX未知,sizeof(void)都不是正确形式
 
  • 四、结束语
sizeof使用场合。
1.sizeof操作符的一个主要用途是与存储分配和I/O系统那样的例程进行通信。例如: 
  void *malloc(size_t size), 
  size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream)。
2.用它可以看看一类型的对象在内存中所占的单元字节。
void * memset(void * s,int c,sizeof(s))
3.在动态分配一对象时,可以让系统知道要分配多少内存。
4.便于一些类型的扩充,在windows中就有很多结构内型就有一个专用的字段是用来放该类型的字节大小。
5.由于操作数的字节数在实现时可能出现变化,建议在涉及到操作数字节大小时用sizeof来代替常量计算。
6.如果操作数是函数中的数组形参或函数类型的形参,sizeof给出其指针的大小。

犹豫时,错过了太阳;后悔时错过了星星。

  印度有一位哲学家,迷倒了不少女人。
  某天,一个女子来敲他的门说:“让我做你的妻子吧!错过我,你将再也找不到比我更爱你的女人了。”哲学家虽然也很喜欢她,但仍回答说:“让我考虑考虑!”
  事后,哲学家用他一贯研究学问的精神,将结婚和不结婚的好处与坏处,分别罗列出来,才发现,好坏均等,真不知该如何抉择。于是,他陷入了长期的苦恼之中。
  最后,他得出一个结论——人若在面临抉择而无法取舍的时候,应该选择自己尚未经历过的那一个。
  哲学家来到女人的家中,对女人的父亲说:“你的女儿呢?请你告诉她,我考虑清楚了,我决定娶她为妻!”
  女人的父亲冷漠地回答:“你来晚了10年,我女儿现在已经是3个孩子的妈妈了!”
  两年后,哲学家抑郁成疾。死前,他将自己所有的著作丢入火堆,只留下一段对人生的注解
    ——
    如果将人生一分为二,前半段的人生哲学是“不犹豫”,后半段的人生哲学是“不后悔”。

Ajax基本原理

Ajax,异步JavaScript与XML,是使用客户端脚本与Web服务器交换数据的Web应用开发方法。这样,Web页面不用打断交互流程进行重新加裁,就可以动态地更新。使用Ajax,你可以创建接近本地桌面应用的,直接的、高可用的、更丰富的、更动态的Web用户接口界面。
Ajax处理过程
一个Ajax交互从一个称为XMLHttpRequest的JavaScript对象开始。如同名字所暗示的,它允许一个客户端脚本来执行HTTP请求,并且将会解析一个XML格式的服务器响应。Ajax处理过程中的第一步是创建一个XMLHttpRequest实例。使用HTTP方法(GET或POST)来处理请求,并将目标URL设置到XMLHttpRequest对象上。
现在,记住Ajax如何首先处于异步处理状态?当你发送HTTP请求,你不希望浏览器挂起并等待服务器的响应,取而代之的是,你希望通过页面继续响应用户的界面交互,并在服务器响应真正到达后处理它们。要完成它,你可以向XMLHttpRequest注册一个回调函数,并异步地派发XMLHttpRequest请求。控制权马上就被返回到浏览器,当服务器响应到达时,回调函数将会被调用。
在Java Web服务器上,到达的请求与任何其它HttpServletRequest一样。在解析请求参数后,servlet执行必需的应用逻辑,将响应序列化到XML中,并将它写回HttpServletResponse。

一个Ajax交互从一个称为XMLHttpRequest的JavaScript对象开始。如同名字所暗示的,它允许一个客户端脚本来执行HTTP请求,并且将会解析一个XML格式的服务器响应。Ajax处理过程中的第一步是创建一个XMLHttpRequest实例。使用HTTP方法(GET或POST)来处理请求,并将目标URL设置到XMLHttpRequest对象上。
现在,记住Ajax如何首先处于异步处理状态?当你发送HTTP请求,你不希望浏览器挂起并等待服务器的响应,取而代之的是,你希望通过页面继续响应用户的界面交互,并在服务器响应真正到达后处理它们。要完成它,你可以向XMLHttpRequest注册一个回调函数,并异步地派发XMLHttpRequest请求.控制权马上就被返回到浏览器,当服务器响应到达时,回调函数将会被调用。
在Java Web服务器上,到达的请求与任何其它HttpServletRequest一样。在解析请求参数后,servlet执行必需的应用逻辑,将响应序列化到XML中,并将它写回HttpServletResponse。

一个Ajax交互从一个称为XMLHttpRequest的JavaScript对象开始。如同名字所暗示的,它允许一个客户端脚本来执行HTTP请求,并且将会解析一个XML格式的服务器响应。Ajax处理过程中的第一步是创建一个XMLHttpRequest实例。使用HTTP方法(GET或POST)来处理请求,并将目标URL设置到XMLHttpRequest对象上。
现在,记住Ajax如何首先处于异步处理状态?当你发送HTTP请求,你不希望浏览器挂起并等待服务器的响应,取而代之的是,你希望通过页面继续响应用户的界面交互,并在服务器响应真正到达后处理它们。要完成它,你可以向XMLHttpRequest注册一个回调函数,并异步地派发XMLHttpRequest请求.控制权马上就被返回到浏览器,当服务器响应到达时,回调函数将会被调用。
在Java Web服务器上,到达的请求与任何其它HttpServletRequest一样。在解析请求参数后,servlet执行必需的应用逻辑,将响应序列化到XML中,并将它写回HttpServletResponse。
实例
以下是我所写的一个简单的例子:
ajaxServlet.java程序清单:
package com;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*
*------------------------------------------------------
* 文件名: ajaxServlet.java
* 创建日期: 2005-10-25
* 原作者: miaohai
* 版权所有:  miaohai
* 功能说明: 生成XML文档
*
* 修改记录:N/A
*------------------------------------------------------
*/
public class ajaxServlet
extends HttpServlet
{
private static final String CONTENT_TYPE="text/xml; charset=gb2312";
public void init()
throws ServletException
{
}
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,IOException
{
response.setContentType(CONTENT_TYPE);
PrintWriter out=response.getWriter();
String action=request.getParameter("action");
if(("send").equals(action))
{
StringBuffer sb=new StringBuffer("<type>");
sb.append("<type_name>AA</type_name>");
sb.append("<type_name>BB</type_name>");
sb.append("<type_name>CC</type_name>");
sb.append("<type_name>DD</type_name>");
sb.append("</type>");
out.write(sb.toString());
out.close();
}
}
}
 
html页面:
<html>
<head>
<title>AJAX.html</title>
</head>
<script type="text/javascript">
/*通过异步传输XMLHTTP发送参数到ajaxServlet,返回符合条件的XML文档*/
function getResult()
{
var url = "servlet/com.ajaxServlet?action=send";
if (window.XMLHttpRequest)
 {
req = new XMLHttpRequest();
}else if (window.ActiveXObject)
{
req = new ActiveXObject("Microsoft.XMLHTTP");
}
if(req)
{
req.open("GET",url, true);
req.onreadystatechange = complete;
req.send(null);
}
}
/*分析返回的XML文档*/
function complete()
{
if (req.readyState == 4)
{
if (req.status == 200)
 {
var type = req.responseXML.getElementsByTagName("type_name");
var str=new Array();
for(var i=0;i<type.length;i++)
{
str[i]=type[i].firstChild.data;
document.all['td'].innerHTML+=str[i]+"<BR>";
}
}
}
}
</script>
<body onLoad="getResult()">
<table width="80%"  border="0" cellspacing="0" cellpadding="0">
<tr>
<td id="td">&nbsp;</td>
</tr>
</table>
</body>

跨站脚本攻击与防御

     网络上曾经有过关于跨站脚本攻击与防御的文章,但是随着攻击技术的进步,以前的关于跨站脚本攻击的看法与理论已经不能满足现在的攻击与防御的需要了,而且由于这种对于跨站脚本认识上的混乱,导致现在很多的程序包括现在的动网都存在着跨站脚本过滤不严的问题,希望本文能给写程序的与研究程序的带来一点思路。
    还是首先看看跨站脚本漏洞的成因,所谓跨站脚本漏洞其实就是Html的注入问题,恶意用户的输入没有经过严格的控制进入了数据库最终显示给来访的用户,导致可以在来访用户的浏览器里以浏览用户的身份执行HTml代码,数据流程如下:

     恶意用户的Html输入————>web程序————>进入数据库————>web程序————>用户浏览器
这样我们就可以清楚的看到Html代码是如何进入受害者浏览器的了,我们也就可以根据这个流程来讨论跨站脚本的攻击与防御了!
    1 什么是HTml输入?    
    这里给出一个HTml代码的示例
<img src="http://www.loveshell.jpg" width=100 onerror=alert("载入图片错误!")>
很多的程序最终都是将用户的输入转换成这种形式的。可以看到<>是告诉浏览器这是一个Html标记,img是这个Html标记的名称,src是这个标记的第一个属性,=后面是这个属性的值,后面的width是第二个属性,onerror是标记的事件属性。大家可以看到,一个Html标记是包括很多元素的,并不是传统意义上的只有输入<>才会注入Html,事实上只要你的输入处在Html标签内,产生了新的元素或者属性,就实现了跨站脚本攻击!实际上大多数隐秘的跨站脚本攻击是不需要<>的,因为现在的Ubb标签已经让你处在了Html标记之内,很有意思,不是么?
    2 哪里才是罪恶的来源?
    既然我们的目标是引入代码在目标用户的浏览器内执行,那么我们来看看哪些地方可以引入HTml代码吧!如果用户可以不受限制的引入<>,那么很显然他可以完全操纵一个Html标记,譬如<script>alert('xss')</script>这样的形式,这对于追求安全的程序来说是绝对不允许的,所以首先要做转换的就是<>,通过如下代码:
过滤代码:
replace(str,"<","&#x3C;")
replace(str,">","&#x3E;")
    好了,用户可能不能构造自己的HTml标记了,那么利用已经存在的属性如何呢?下面的代码依然可以工作得很好:
<img src="javascript:alert(/xss/)" width=100>
因为很多的Html标记里属性都支持javascript:[code]的形式,很好,很多的程序意识到了这一点,可能做了如下的转换:
过滤代码
Dim re
    Set re=new RegExp
    re.IgnoreCase =True
    re.Global=True
re.Pattern="javascript:"
    Str = re.replace(Str,"javascript:")
    re.Pattern="jscript:"
   Str = re.replace(Str,"jscript:")
    re.Pattern="vbscript:"
   Str = re.replace(Str,"vbscript:")
set re=nothing
   
你看,只要发现以javascript等脚本属性的形式都会被过滤掉,失去了:的脚本代码是起不了作用的!这样完美了么?事实上Html属性的值,注意是值而不是属性本身是支持&#ASCii这种形式表示的,譬如上面的代码可以换成这样:
<img src="javascrip&#116&#58alert(/xss/)" width=100>
代码又执行了,呵呵!看来你漏掉了点什么哦,加上这个代码吧!
replace(str,"&","&#x26;")
行了,&失去它原来的意义了,用户不能以其他方式表示Html属性值了哦!等等,这样的过滤真可以相信么?只要发现这种过滤的关键字机制,饶过就是简单的问题了:
<img src="javas    cript:alert(/xss/)" width=100>
没有javascript关键字了哦!注意中间那个是tab键弄出来的!关键字被拆分了哦!这是个很麻烦的问题,很多人忘记了这些特殊的字符,呵呵!有人想到要过滤空格了,在过滤之前我们再看看其他的一些东西吧!也许我们现在所处的src属性已经无法利用了,但是我们依然可以产生自己的属性或者事件机制哦!依然是可以执行Html代码的,首先说说事件机制吧:
<img src="#" onerror=alert(/xss/)>
这样依然可以执行代码的哦!明白问题出在哪了,不是么?有的程序员仿佛明白了,注意我说的是仿佛,动网就是一个典型的例子,事件属性不是要onerror么?很多人开始用正则表达式了,发现关键的词如onerror就会做转换或者提示用户不执行,是不是没有机会了呢?
    当然不是的,事件只是让代码运行的一种方法而不是所有的,可以定义事件了那么也就可以实现自己弄出自己的属性了,试试下面的:
<img src="#" style="Xss:expression(alert(/xss/));">
呵呵,还是执行了哦!在做关键字过滤之后有人发现是不是属性之间分隔要用到空格,好,他们把空格堵死了(这样认为的人很多,呵呵)!将空格转成&nbsp;是个很普遍的方法?是么?甚至还可以让别人无法关键字拆分,不要太自信了,试试下面的代码看看如何:
<img src="#"/**/onerror=alert(/xss/) width=100>
嘿嘿,Good Work!这好象是利用了脚本里注释会被当作一个空白来表示造成的!那怎么办呢?上面提到的好象一直都是在进行被动的攻击防御,为什么不抓住他的本源出来呢?哪里出了问题哪里堵上!
    上面