您的位置:首页 > 其它

as3corelib教程:如何在Flex中使用URI

2009-07-06 15:38 405 查看
我认为,该类的主要用途是解析一个URL以获得诸如主机、端口、文件名、文件扩展名、查询之类的信息。它实际上是一种替代使用正则表达式来解析目标信息的便捷方式。
根据as3corelib文档:
1. 该类实现应用URI(Universal Resource Identifier,统一资源标识符)的函数和工具。有关URI语法的技术说明,请参阅RFC3986:http://www.ietf.org/rfc/rfc3986.txt或在网络上搜索“RFC 3986”。
URI最重要的方面就是URI和URL都不是字符串。URI是封装了很多信息片段的复杂数据结构。URI的字符串版本是该数据结构序列化后的表示形式。这种字符串序列化用于提供一种人类可读的表示形式以及一种通过网络传输数据的手段,然后可以将数据解析回它的组件部分。
URI可以分成三类:

1. <scheme>:<scheme-specific-part>#<fragment> (非层级结构)
2. <scheme>:<authority><path>?<query>#<fragment> (层级结构)=""></authority><path>?<query>#<fragment>>
3. <path>?<query>#<fragment>(关系层级结构)
query和fragment部分都是可选的。
该类支持非层级结构和层级结构的URI。
该类的设计意图是原封不动地用于绝大多数常用URI。不过,如果您的应用程序需要一种定制的URI语法(例如,定制查询语法或非层级结构URI的特殊处理),那么可以将该类完全子类化。如果打算将URI划分子类,那么请参阅有关受保护成员和受保护函数的完整文档的源代码。
例如:

1. var uri:URI = new URI(Application.application.url);
2. userService.url = “http://”+uri.authority+ (uri.port==””?””:”:”+uri.port) + ”/FileManage/servlet”;

这里,URI类用来检索服务器的主机值和端口值,而该服务器保留了被请求的Flex应用程序。
本文末尾附带了该类的文档。
该演示程序的屏幕截图:



以下是URIExample.xml的源代码

1. <?xml version="1.0" encoding="utf-8"?>
2. <uris>
3. <uri value="ftp://tom:goodday@ftp.is.co.za:22/"/>
4. <uri value="ftp://ftp.is.co.za/rfc/rfc1808.html"/>
5. <uri value="http://www.ietf.org/rfc/rfc2396.txt#anchor1"/>
6. <uri value="http://www.ietf.org:8080/rfc/rfc2396.txt"/>
7. <uri value="http://www.ietf.org:8080/rfc/"/>
8. <uri value="http://something.com/a/b/c/"/>
9. <uri value="http://www.ietf.org:8080/rfc"/>
10. <uri value="www.ietf.org:8080/rfc/rfc2396.txt"/>
11. <uri value="/rfc/rfc2396.txt"/>
12. <uri value="rfc/background.png"/>
13. <uri value="../rfc/rfc2396.txt"/>
14. <uri value="file:///F:/opensource/as3corelib-.92.1/as3corelib-.92.1/docs/index.html"/>
15. <uri value="F:/opensource/as3corelib-.92.1/as3corelib-.92.1/docs/index.html"/>
16. <uri value="F://opensource//as3corelib-.92.1//as3corelib-.92.1//docs//index.html"/>
17. <uri value="ldap://[2001:db8::7]/c=GB?objectClass?one"/>
18. <uri value="mailto:John.Doe@example.com"/>
19. <uri value="news:comp.infosystems.www.servers.unix"/>
20. <uri value="tel:+1-816-555-1212"/>
21. <uri value="telnet://192.0.2.16:80/"/>
22. <uri value="urn:oasis:names:specification:docbook:dtd:xml:4.1.2"/>
23. </uris>

以及URIDemo.mxml的源代码
1. <?xml version="1.0" encoding="utf-8"?>
2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
3. <mx:Script>
4. <![CDATA[
5. import com.adobe.net.URI;
6.
7. [Bindable]
8. private var uri:URI;
9.
10. private function selectURI(event:MouseEvent):void
11. {
12. uri = new URI(event.currentTarget.text);
13. }
14. ]]>
15. </mx:Script>
16.
17. <mx:XML id="uris" source="URIExample.xml"/>
18.
19. <mx:Panel
20. layout="horizontal"
21. width="100%"
22. height="100%"
23. title="URI Demo"
24. >
25. <mx:VBox>
26. <mx:Repeater id="uriList" dataProvider="{uris.uri}">
27. <mx:Label
28. text="{uriList.currentItem.@value}"
29. buttonMode="true"
30. mouseChildren="false"
31. click="selectURI(event);"/>
32. </mx:Repeater>
33. </mx:VBox>
34.
35. <mx:Form
36. paddingTop="0">
37. <mx:FormItem label="is valid">
38. <mx:Label text="{uri.isValid()}"/>
39. </mx:FormItem>
40.
41. <mx:FormItem label="to display string">
42. <mx:Label text="{uri.toDisplayString()}"/>
43. </mx:FormItem>
44.
45. <mx:FormItem label="to string">
46. <mx:Label text="{uri.toString()}"/>
47. </mx:FormItem>
48.
49. <mx:FormItem label="schema">
50. <mx:Label text="{uri.scheme}"/>
51. </mx:FormItem>
52.
53. <mx:FormItem label="username">
54. <mx:Label text="{uri.username}"/>
55. </mx:FormItem>
56.
57. <mx:FormItem label="password">
58. <mx:Label text="{uri.password}"/>
59. </mx:FormItem>
60.
61. <mx:FormItem label="authority">
62. <mx:Label text="{uri.authority}"/>
63. </mx:FormItem>
64.
65. <mx:FormItem label="default port">
66. <mx:Label text="{uri.getDefaultPort()}"/>
67. </mx:FormItem>
68.
69. <mx:FormItem label="port">
70. <mx:Label text="{uri.port}"/>
71. </mx:FormItem>
72.
73. <mx:FormItem label="path">
74. <mx:Label text="{uri.path}"/>
75. </mx:FormItem>
76.
77. <mx:FormItem label="file name">
78. <mx:Label text="{uri.getFilename(true)}"/>
79. </mx:FormItem>
80.
81. <mx:FormItem label="extension">
82. <mx:Label text="{uri.getExtension(true)}"/>
83. </mx:FormItem>
84.
85. <mx:FormItem label="query">
86. <mx:Label text="{uri.query}"/>
87. </mx:FormItem>
88.
89. <mx:FormItem label="queryRaw">
90. <mx:Label text="{uri.queryRaw}"/>
91. </mx:FormItem>
92.
93. <mx:FormItem label="fragment">
94. <mx:Label text="{uri.fragment}"/>
95. </mx:FormItem>
96.
97. <mx:FormItem label="nonHierarchical">
98. <mx:Label text="{uri.nonHierarchical}"/>
99. </mx:FormItem>
100.
101. <mx:FormItem label="is absolute uri">
102. <mx:Label text="{uri.isAbsolute()}"/>
103. </mx:FormItem>
104.
105. <mx:FormItem label="is relative uri">
106. <mx:Label text="{uri.isRelative()}"/>
107. </mx:FormItem>
108.
109. <mx:FormItem label="is directory">
110. <mx:Label text="{uri.isDirectory()}"/>
111. </mx:FormItem>
112.
113. <mx:FormItem label="is hierarchical">
114. <mx:Label text="{uri.isHierarchical()}"/>
115. </mx:FormItem>
116. <!--
117. it seems isOfFileType return the opposite
118. result. maybe it's a bug of this method.
119. -->
120. <mx:FormItem label="is of file type(html)">
121. <mx:Label text="{uri.getExtension(true)==''?false:!uri.isOfFileType('html')}"/>
122. </mx:FormItem>
123. </mx:Form>
124.
125. <mx:ControlBar>
126. <mx:Form>
127. <mx:FormItem label="custom uri">
128. <mx:TextInput id="customURI"/>
129. </mx:FormItem>
130.
131. <mx:FormItem>
132. <mx:Button id="parseButton"
133. label="parse"
134. click="uri = new URI(customURI.text)"/>
135. </mx:FormItem>
136. </mx:Form>
137. </mx:ControlBar>
138. </mx:Panel>
139.</mx:Application>

英文原文:http://ntt.cc/2009/02/16/as3corelib-tutorialhow-to-use-uri-class-in-flex.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: