本实例将详细介绍在线音乐网站的实现过程。
效果说明
图 94-1 所示是在线音乐网站的首页页面,用户勾选要播放的歌曲后单击【提交】按钮,将会弹出如图 94-2 所示的播放页面。
创作构思
通过数据网络提交复选框的选择值,以此建立一个查询数据集,并通过该数据集生成播放列表“ asx ”文件,以实现在线音乐网站。
操作步骤
步骤一 应用程序的环境设置
( 1 )复制光盘中实例 94 的内容。将“光盘 \ 源文件 \ 实例 94 ” 目录下的所有文件复制到“ C:\ Inetpub\wwwroot\ ”目录下。在 IIS 服务器中设置默认网站的主目录为“ C:\ Inetpub\wwwroot\music ”(请参考实例 1 中的相关方法)。在 Dreamweaver 中新建站点“ music ”,其站点目录为“ C:\ Inetpub\wwwroot\music ”(建立站点的方法请参照实例 2 )。
( 2 )“ music ”表的数据结构。运行 Access ,打开“ C:\ Inetpub \wwwroot\music\data\data.mdb ”,可以看到数据库“ \data.mdb ”中只有“ music ”一个数据表,该表的数据结构如图 94-3 所示。
( 3 )建立数据库链接“ musicconn ”,链接数据库“ C:\ Inetpub\wwwroot \music\data\data.mdb ”,方法请参考实例 75 。
步骤二 音乐网站首页的实现
( 1 )打开“ music ”站点下的“ index.apsx ”,这时“ index.apsx ”页面及站点文件如图 94-4 所示。
( 2 )添加数据集“ musicData ”。在【服务器行为】面板中添加数据集“ musicData ”,具体设置如图 94-5 所示。
( 3 )添加“ musicGrid ”数据网络。在【服务器行为】面板中添加“数据网络”,在【数据网络】对话框中设置 ID 为“ musicGrid ”,数据集为“ musicData ”,导航为“编号链接到每一页”,其他设置如图 94-6 所示。
( 4 ) 添加“ playcheck ”复选框。切换到表单快捷菜单,在页面空白处添加表单复选框,设置其名称为“ playcheck ”。切换到代码视图,用数据集“ musicData ”下的字段“ id ”替换“ playcheck ”复选框源代码中的“ value ”值,如图 94-7 所示。
( 5 )选择“ playcheck ”复选框的源代码,将其剪切。在服务器行为面板中再次打开数据网络“ musicGrid ”,参照如图 83-5 所示的方法,编辑“ id ”标题为“编号”、“ name ”标题为“歌曲名称”、“ who ”为“歌唱者”、“ date ”为“发表时间”。选择“ url ”,单击【—】按钮,将“ url ”从列中删除,结果如图 94-8 所示。
( 6 )设置【自由格式列】。单击【 + 】按钮,在弹出的快捷菜单中选择【自由格式】菜单项。然后在弹出的【自由格式列】对话框中设置标题为“播放”,并将之前剪切的复选框源代码粘贴到【内容】文本区域中,具体操作可参考图 83-6 。
( 7 )添加【表单】按钮。在【数据网络】对话框中单击【确定】按钮,返回到页面。为页面添加一个【表单】按钮,保持其默认设置。
( 8 )定义“ Page_Load ”过程,该过程的代码如下所述。
Sub Page_Load(Sender As Object,e As EventArgs)
If Trim(Request.Form("playcheck"))<>nothing then
session("playch")=Trim(Request.Form("playcheck"))
Dim scriptString As String = "<script language=JavaScript> function Page_Load() {"
scriptString += "window.open('play.aspx','','width=240,height=240')}"
scriptString += "<"
scriptString += "/"
scriptString += "script>"
If (Session("playch") <> Nothing) And (Trim(Request.Form("playcheck")) <> Nothing) Then
If (Not Me.IsStartupScriptRegistered(("Startup")) Then Me.RegisterStartup Script("Startup", scriptString)
End If
End If
End Sub
(读者可打开【光盘】|【源文件】|【实例 94 】|【 94.1.txt 】文件,直接复制)
程序说明:
提交表单后当复选框“ playcheck ”的提交值非空时,则执行以下程序。
① 首先将复选框“ playcheck ”的提交值存储在“ session("playch") ”中。由于提交值可能不是单一的,所以该提交值的存储形式为选择歌曲 ID, 选择歌曲 ID ,选择歌曲 ID ……
② 通过变量“ scriptString ”定义客户端函数“ Page_Load ”,该函数与服务端过程“ Page_Load ”是同步的,就是当执行“ Page_Load ”过程时,同时也会执行客户端函数“ Page_Load ”。该客户端函数其实是一个弹出窗口函数。
③ 当复选框“ playcheck ”的提交值非空及“ session("playch") ”非空时,检测客户端函数是否注册成功( Not Me.IsStartupScriptRegistered ( ("Startup") ),如果注册成功,则装载客户端函数后执行该函数。
( 9 )保存“ index.aspx ”文件。
步骤三 音乐播放页面的实现
( 1 )新建动态网页。新建一个 ASP.NET 动态网页,为页面添加数据集“ musicData ”,该数据集的设置如图 94-9 所示。
( 2 )添加命名空间“ System.Io ”。切换至代码视图,为页面添加命名空间“ System.Io ”,具体操作可参考实例 81 中的图 81-2 。添加命名空间,使程序能够运用 ASP.NET 操作文件。
( 3 )修改代码。在代码视图中找到数据集“ musicData ”的源代码,如图 94-10 所示。将图 94-10 中圆角方框①所示的代码删除,将图 94-10 中圆角方框②所示的代码改为“ False ”。
( 4 )在“ <MM:PageBind runat="server" PostBackBind="true" /> ”标签之后输入如下所述的代码。
<script runat="server">
Sub Page_Load(Sender As Object,e As EventArgs)
musicData.CommandText="SELECT id,url from music where id in ("& session("playch") &")"
musicData.debug=true
End Sub
</script>
(读者可打开【光盘】|【源文件】|【实例 94 】|【 94.2.txt 】文件,直接复制)
程序说明:
该代码其实是定义一个“ Page_Load ”的过程,在这个过程中重新定义了数据集“ musicData ”的查询命名,查询歌曲序号( id )在“ Session(“playch”) ”中的所有记录。这与前面讲过的“ Session(“playch”) ”存储形式是相对应的。
( 5 )添加“ AtiveX ”组件。切换至设计视图,执行【插入】|【媒体】|【 AtiveX 】菜单命令,为页面添加“ AtiveX ”组件。由于本实例是在线音乐,为此编辑该“ AtiveX ”为“ Media Player ”播放组件,如图 94-11 所示。
提示:图 94-11 中所示的步骤②输入“ Media Player ”的注册类 ID 为“ CLSID:6BF 52A 52- 394A -11d3-B153 -00C 04F 79FAA 6 ” ;步骤③选择的类型为“ application/x-oleobject ”;步骤⑥添加的 3 个参数分别为参数“ URL ”,其相应值为“ music.asx ”,参数“ autoStar ”,其值为“ true ”,参数“ playCount ”,其相应值为“ 0 ”。参数“ URL ”用于设置播放音乐的地址,这里指的是播放列表“ music.asx ”的值。参数“ autoStar ”用于设置是否自动播放。参数“ playCount ”用于设置循环播放的次数,当该值为“ 0 ”时,表示无限循环播放。
( 6 )播放列表“ asx ”文件。在开始动态生成播放列表“ music.asx ”之前,先介绍“ Media Player ”的播放列表“ asx ”文件。图 94-12 所示是一个播放列表“ asx ”文件。第 1 行是版本号, <entry></entry> 之间是一个播放流,“ asx ”文件中可以有多个播放流,并组成播放列表。图 94-12 所示的“ asx ”文件中就有 3 个播放流。
( 7 )在“ Page_Load ”过程中添加如下所述的代码。
Dim xlmstring As String
Dim i As Integer
xlmstring = "<ASX VERSION="
xlmstring+="""3.0"""
xlmstring+=">"
For i = 0 To musicData. RecordCount - 1
xlmstring += "<ENTRY>"
xlmstring +="<REF HREF="""
xlmstring+=musicData.FieldValueAtIndex(i, "url", Nothing)
xlmstring+="""/>"
xlmstring +="</ENTRY>"
Next
xlmstring += "</ASX>"
Dim file_path As String
file_path = Server.MapPath("music.asx")
Dim fs As StreamWriter = New StreamWriter(file_path, False)
fs.WriteLine(xlmstring)
fs.Close()
首先定义字符串变量“ xlmstring ”,并添加字符串“ <ASX VERSION="3.0"> ”。根据数据集“ musicData ”记录大小循环,把“ <entry></entry> ”之间的播放流添加到字符串变量“ xlmstring ”中,“ <entry></entry> ”之间的播放流音乐文件地址为第 i 记录中字段“ url ”的字段值( musicData.FieldValueAtIndex(i, "url", Nothing) )。最后将生成的“ asx ”文件的内容字符串写进播放列表“ music.asx ”文件中。
提示:在“ asx ”文件中各参数属性值不支持单引号,如果将版本号设置为“ <ASX VERSION=' 3.0' > ”,则“ Media Player ”将不能正确播放该“ asx ”文件,其正确设置应为“ <ASX VERSION="3.0"> ”。所以程序中出现一些重复的双引号,如“ xlmstring+="""3.0""" ”,就是为了在“ asx ”文件中正确设置各参数的属性值。
( 8 )保存该 ASP.NET 动态网页为“ play.aspx ”。
音乐娱乐网站的实现,其实主要解决多媒体播放控件的设置、音乐播放列表的动态生成。在实际应用中,应将音乐的播放次数与站点的收益联系起来,而且要解决如何防止多媒体被盗链、下载等问题。读者们应在本实例介绍的基础上,从这几个方面作更为深入的研究。至此,本实例介绍完毕。