畢業(yè)設(shè)計(jì)(論文)-基于JSP技術(shù)的在線音樂(lè)播放站點(diǎn)的實(shí)現(xiàn)_第1頁(yè)
畢業(yè)設(shè)計(jì)(論文)-基于JSP技術(shù)的在線音樂(lè)播放站點(diǎn)的實(shí)現(xiàn)_第2頁(yè)
畢業(yè)設(shè)計(jì)(論文)-基于JSP技術(shù)的在線音樂(lè)播放站點(diǎn)的實(shí)現(xiàn)_第3頁(yè)
畢業(yè)設(shè)計(jì)(論文)-基于JSP技術(shù)的在線音樂(lè)播放站點(diǎn)的實(shí)現(xiàn)_第4頁(yè)
畢業(yè)設(shè)計(jì)(論文)-基于JSP技術(shù)的在線音樂(lè)播放站點(diǎn)的實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩27頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

蘇州大學(xué)本科生畢業(yè)設(shè)計(jì)(論文)PAGEPAGE1.基于JSP技術(shù)的在線音樂(lè)播放站點(diǎn)的實(shí)現(xiàn)摘要 1前言 2JSP網(wǎng)頁(yè)工作原理及開(kāi)發(fā)平臺(tái)的選擇與構(gòu)建 31.1 JSP網(wǎng)頁(yè)工作原理 31.2開(kāi)發(fā)平臺(tái)的選擇 41.3安裝JDK 41.4安裝Tomcat 51.5安裝MySQL 6在線音樂(lè)播放站點(diǎn)的分析與設(shè)計(jì) 82.1設(shè)計(jì)目標(biāo) 82.2實(shí)現(xiàn)功能 82.2.1用戶的注冊(cè)及登錄 82.2.2管理員的后臺(tái)管理程序 82.2.3歌曲的查詢 82.2.4歌曲的在線播放和下載 92.2.5歌曲的分類顯示 92.3框架結(jié)構(gòu) 10在線音樂(lè)播放站點(diǎn)的具體實(shí)現(xiàn) 113.1數(shù)據(jù)庫(kù)的創(chuàng)建 113.2公用的程序 143.3用戶注冊(cè)與登錄的程序 153.4管理員的登錄與管理程序 163.5專輯歌曲的查詢與顯示程序 183.6歌曲的試聽(tīng)與下載程序 193.7其他顯示程序 21在線音樂(lè)播放站點(diǎn)的技術(shù)難點(diǎn)解析 224.1 JSP+MySQL+Tomcat+Apache亂碼問(wèn)題 224.1.1MySQL中文顯示亂碼 224.1.2中文路徑亂碼 234.2MySQL數(shù)據(jù)庫(kù)中日期時(shí)間類型的問(wèn)題 234.3數(shù)據(jù)分頁(yè)顯示技術(shù) 254.4自動(dòng)識(shí)別目錄下.mp3文件技術(shù) 264.5COOKIE&SESSION技術(shù) 26結(jié)論 28致謝 30摘要在線音樂(lè)播放是目前互聯(lián)網(wǎng)上十分流行且應(yīng)用非常廣泛的一項(xiàng)技術(shù)。本論文從最基本的JSP網(wǎng)頁(yè)工作原理講起,接著講述了開(kāi)發(fā)平臺(tái)的選擇與搭建,最后經(jīng)過(guò)充分的功能與結(jié)構(gòu)分析,逐步實(shí)現(xiàn)了整個(gè)站點(diǎn)的程序設(shè)計(jì)。其中會(huì)涉及到一些MySQL數(shù)據(jù)庫(kù)、編碼轉(zhuǎn)換、網(wǎng)頁(yè)制作等方面的內(nèi)容。對(duì)于站點(diǎn)實(shí)現(xiàn)過(guò)程中所遇到的難點(diǎn)問(wèn)題,本論文也進(jìn)行了更為深入的研究。(摘要里要寫(xiě)你的畢業(yè)設(shè)計(jì)是什么,能夠?qū)崿F(xiàn)哪些功能,用到哪些技術(shù)等等。)關(guān)鍵詞:在線音樂(lè)播放JSPMySQL數(shù)據(jù)庫(kù)編碼轉(zhuǎn)換AbstractMusic-online-playisaverypopulartechnologywhichhasbeenbroadmadeuseoftheinternet.ThispaperusethemostbasicprinciplesaboutJSPpageworktotellaboutthedevelopmentplatformchoiceandstructure,atlast,becauseofthefullyfunctionalandstructuralanalysis,whichprogressivelyrealizetheentiresitedesignprocess.ThispaperinvolvesanumberofMySQLdatabase,codeconversion,andotheraspectsofcreatingwebpages.Atthesametime,thedifficultproblemsencounteredinthispaperalsohaveamorein-depthstudy.Keywords:Music-online-play,JSP,MySQLdatabase,codeconversion前言近些年來(lái),隨著計(jì)算機(jī)技術(shù)的飛速發(fā)展,功能強(qiáng)大、體積適宜的個(gè)人計(jì)算機(jī)(PC),由于價(jià)格的不斷下調(diào),很快就在廣大家庭中普及開(kāi)來(lái),如同電視機(jī)、洗衣機(jī)那般,成為了人們?nèi)粘I钪胁豢苫蛉钡囊粯庸ぞ摺D敲碢C到底是有著怎樣的魅力,使得她能夠如此之快的占據(jù)我們的生活?原因很簡(jiǎn)單,互聯(lián)網(wǎng)的蓬勃發(fā)展給我們那冷冰冰的孤獨(dú)的PC注入了鮮活的血液并搭起了溝通的橋梁,讓我們可以僅僅坐在PC屏幕前而揮指天地間,體驗(yàn)五顏六色的絢爛網(wǎng)上生活。通過(guò)互聯(lián)網(wǎng),我們點(diǎn)擊網(wǎng)頁(yè)瀏覽最新最快的每日新聞;通過(guò)互聯(lián)網(wǎng),我們使用電子郵件與遠(yuǎn)方的親朋好友保持聯(lián)系;通過(guò)互聯(lián)網(wǎng),我們還能夠在線觀看電影,下載軟件歌曲,以及嘗試如今最流行的個(gè)人博客,等等。豐富的網(wǎng)上服務(wù)帶給了我們無(wú)限的歡樂(lè)與便捷??墒牵?dāng)我們?cè)诒M情享受互聯(lián)網(wǎng)上各種服務(wù)的同時(shí),你可曾想過(guò),就在我們輕輕點(diǎn)擊鼠標(biāo)的背后,到底蘊(yùn)藏了哪些不為我們所知的技術(shù)?換句話說(shuō),想要成為互聯(lián)網(wǎng)某項(xiàng)服務(wù)的提供者,需要掌握哪些相關(guān)方面的技術(shù)?本文以目前互聯(lián)網(wǎng)上最為普及的在線音樂(lè)播放服務(wù)為例,詳細(xì)講解了開(kāi)發(fā)一個(gè)在線音樂(lè)播放站點(diǎn)所需要的各種核心技術(shù)以及整個(gè)開(kāi)發(fā)過(guò)程。論文正文主要包括4個(gè)部分,安排如下:第1部分主要介紹JSP網(wǎng)頁(yè)工作原理及開(kāi)發(fā)平臺(tái)的選擇與構(gòu)建。第2部分是對(duì)在線播放站點(diǎn)的整體分析與設(shè)計(jì),從設(shè)計(jì)目標(biāo)、預(yù)期功能和框架結(jié)構(gòu)三方面來(lái)制定開(kāi)發(fā)步驟與功能模塊。第3部分詳細(xì)講述了站點(diǎn)的制作過(guò)程,包括每一個(gè)JSP程序的功能以及所使用到的相關(guān)技術(shù)。第4部分則是將在整個(gè)開(kāi)發(fā)過(guò)程中所遇到的難點(diǎn)匯集在一起,然后逐個(gè)進(jìn)行分析和研究。最后論文對(duì)課題內(nèi)容及成果進(jìn)行了總結(jié)。JSP網(wǎng)頁(yè)工作原理及開(kāi)發(fā)平臺(tái)的選擇與構(gòu)建1.1 JSP網(wǎng)頁(yè)工作原理(可否在原理介紹之后寫(xiě)一下這種工作機(jī)理的好處,這樣就會(huì)比較完整)在一個(gè)JSP文件第一次被請(qǐng)求時(shí),行都會(huì)被服務(wù)器端的JSP引擎轉(zhuǎn)換為Servlet(.java),然后又由JSP引擎調(diào)用Java編譯器,將Servlet(.java)編譯為Class文件(.class),并由Java虛擬機(jī)(JVM)解釋執(zhí)行。如圖2-1所示。圖2-11.2開(kāi)發(fā)平臺(tái)的選擇要進(jìn)行JSP應(yīng)用程序的開(kāi)發(fā),首先要安裝和配置好開(kāi)發(fā)環(huán)境。經(jīng)過(guò)一段時(shí)間的摸索與查詢,本人選用了WindowsXP+Tomcat5.0.28+MySQL5.0開(kāi)發(fā)環(huán)境。Tomcat是一個(gè)免費(fèi)的開(kāi)源的Servlet容器,它是Apache基金會(huì)的Jakarta項(xiàng)目中的一個(gè)核心項(xiàng)目,由Apache,Sun和其它一些公司及個(gè)人共同開(kāi)發(fā)而成。由于有了Sun的參與和支持,最新的Servlet和JSP規(guī)范總能在Tomcat中得到體現(xiàn)。當(dāng)然Resin也是一個(gè)不錯(cuò)的選擇,據(jù)說(shuō)它要比Tomcat快3倍的,但沒(méi)有Tomcat那么嚴(yán)格。作為初學(xué)者,本人還是愿意從嚴(yán)要求自己,就用Tomcat了。1.3安裝JDK從Sun的官方站點(diǎn)下載JDK1.4的最新版本,本人使用的是J2SDK1.4.2。雙擊運(yùn)行所下載的JDK的EXE文件,按照提示一步一步安裝,安裝完成之后需要重啟計(jì)算機(jī)。安裝完JDK之后,需要設(shè)置環(huán)境變量,請(qǐng)按照如下步驟設(shè)置:用右鍵單擊“我的電腦”,依次選擇“屬性”/“高級(jí)”/“環(huán)境變量”。在“系統(tǒng)變量”面板中選擇“新建”,在“變量名”處填寫(xiě)“JAVA_HOME”,在變量值初填寫(xiě)“C:\j2sdk”(假定JDK安裝在C:\j2sdk),如圖2-2所示。單擊“確定”按鈕完成創(chuàng)建。圖2-2在“系統(tǒng)變量”面板中選擇“新建”,在“變量名”處填寫(xiě)“CLASSPATH”,在變量值初填寫(xiě)“.;C:\j2sdk\lib;C:\j2sdk\lib\tools.jar”,其中最前面的“.”是當(dāng)前路徑的含義,不同的值之間用“;”隔開(kāi)。在“系統(tǒng)變量”面板中用鼠標(biāo)選中名為“PATH”的變量,選擇“編輯”,在變量值的最后添加“;C:\j2sdk\bin”,單擊“確定”按鈕。經(jīng)過(guò)以上幾個(gè)步驟,Java運(yùn)行環(huán)境已經(jīng)建立起來(lái),可以在命令行中鍵入java,如果出現(xiàn)圖2-3所示畫(huà)面,則表明JDK安裝設(shè)置成功。圖2-31.4安裝Tomcat從下載Tomcat的二進(jìn)制發(fā)布版,本人使用的是Tomcat5.0.28。如果下載的是EXE文件,直接運(yùn)行并按照提示進(jìn)行安裝。在安裝過(guò)程中,會(huì)出現(xiàn)如圖2-4圖2-4其中的Service選項(xiàng)的意義為是否將Tomcat安裝為Windows服務(wù),在開(kāi)發(fā)環(huán)境中,需要頻繁的啟動(dòng)和關(guān)閉Tomcat,通常不將其安裝為Windows服務(wù),這樣可以更加方便靈活的控制Tomcat的運(yùn)行;在發(fā)布環(huán)境中,可以選中此項(xiàng),以提高服務(wù)器的穩(wěn)定性。1.5安裝MySQL從MySQL的官方站點(diǎn)下載最新版本的MySQL,本人使用的是MySQL5.0。直接運(yùn)行安裝文件并根據(jù)提示進(jìn)行安裝。在安裝結(jié)束后可以點(diǎn)擊“開(kāi)始”—“所有程序”—“MySQL”—“MySQLServer5.0”—“MySQLCommandLineClient”進(jìn)入MySQL命令行界面,如圖2-5所示的畫(huà)面。圖2-5

在線音樂(lè)播放站點(diǎn)的分析與設(shè)計(jì)2.1設(shè)計(jì)目標(biāo)運(yùn)用JSP(JavaServerPages)以及其他相關(guān)技術(shù),在本地構(gòu)建一個(gè)可以在線音樂(lè)播放的功能完備的站點(diǎn)。2.2實(shí)現(xiàn)功能2.2.1用戶的注冊(cè)及登錄對(duì)訪問(wèn)本站的用戶實(shí)行權(quán)限劃分,只有注冊(cè)用戶才可以進(jìn)行在線試聽(tīng)與歌曲下載的功能(但不限制其歌曲查詢與歌詞查看功能),否則返回首頁(yè)。另外對(duì)新用戶的注冊(cè)實(shí)行嚴(yán)格管理,包括對(duì)用戶名、密碼以及E-mail地址的有效性進(jìn)行檢查。用戶可以自己設(shè)置Cookie的時(shí)限。該功能的難點(diǎn)主要在Session管理技術(shù)與Cookie管理技術(shù)。2.2.2管理員的后臺(tái)管理程序管理員權(quán)限的分配與其功能的設(shè)定是一個(gè)站點(diǎn)成功與否的關(guān)鍵。本站的管理員權(quán)限為唯一權(quán)限,在數(shù)據(jù)庫(kù)創(chuàng)建初期預(yù)設(shè),之后只允許更改密碼。管理員的功能主要包括對(duì)專輯歌曲的管理和對(duì)用戶的管理,可以實(shí)現(xiàn)專輯歌曲的添加、更改和刪除,實(shí)現(xiàn)注冊(cè)用戶的查詢和刪除。該功能的難點(diǎn)主要在如何快速有效的添加專輯與歌曲。2.2.3歌曲的查詢用戶最需要的功能,一定要盡量全面的滿足用戶的查詢需求。這里我們提供4種查詢方式,分別是按歌曲名查詢,按歌手名查詢,按專輯名查詢,按模糊歌詞查詢。該功能的難點(diǎn)主要在數(shù)據(jù)庫(kù)的條件查詢與高效的分頁(yè)顯示。2.2.4歌曲的在線播放和下載站點(diǎn)功能的核心,允許注冊(cè)用戶在線播放歌曲,包括多首歌曲連播。并允許注冊(cè)用戶下載站點(diǎn)的歌曲資源。該功能的難點(diǎn)主要在歌曲地址的傳遞與引用。2.2.5歌曲的分類顯示第一,可以根據(jù)查詢條件的不同而自動(dòng)生成不同的歌曲分類形式,包括歌手分類,專輯分類,歌曲分類和歌詞分類。第二,能夠自動(dòng)安試聽(tīng)與下載次數(shù)進(jìn)行歌曲的排序,結(jié)果顯示于首頁(yè)。第三,能夠自動(dòng)按照歌手名的字母順序以及所處地區(qū)進(jìn)行排列。第四,能夠?qū)⒆钚率杖氲膶]嬶@示于首頁(yè)。該功能的難點(diǎn)主要在數(shù)據(jù)庫(kù)的條件查詢與高效的分頁(yè)顯示。2.3框架結(jié)構(gòu)在線音樂(lè)播放站點(diǎn)在線音樂(lè)播放站點(diǎn)游客注冊(cè)用戶管理員歌詞查看用戶注冊(cè)瀏覽站點(diǎn)歌曲查詢用戶登錄在線音樂(lè)點(diǎn)播歌曲下載用戶留言板管理員登錄用戶管理歌曲管理圖3-1

在線音樂(lè)播放站點(diǎn)的具體實(shí)現(xiàn)3.1數(shù)據(jù)庫(kù)的創(chuàng)建一個(gè)完善的動(dòng)態(tài)站點(diǎn)(包括JSP、ASP、PHP等)必須要有一個(gè)完善的數(shù)據(jù)庫(kù)。所以在具體實(shí)現(xiàn)在線音樂(lè)播放站點(diǎn)前,我們必須建立一個(gè)功能完備的數(shù)據(jù)庫(kù)。經(jīng)過(guò)前面的分析,我們可以得出這樣一張數(shù)據(jù)庫(kù)MUSIC的總表,如圖4-1。圖4-1接下來(lái)我們分別建立這5個(gè)表(在這里不建議表的建立用小標(biāo)題,將小標(biāo)題去掉,保留黑體)表admin的建立表admin是用來(lái)存放管理員的相關(guān)信息,如圖4-2。圖4-2各字段意義如下:admin_id 數(shù)據(jù)自動(dòng)編號(hào),每次遞增1,查詢關(guān)鍵字。admin_name 管理員帳號(hào)。admin_pass 管理員密碼。表album的建立表album是用來(lái)存放專輯的相關(guān)信息,如圖4-3。圖4-3各字段意義如下:album_id 數(shù)據(jù)庫(kù)自動(dòng)編號(hào),每次遞增1,查詢關(guān)鍵字。type_id 專輯所屬的分類,對(duì)應(yīng)與表type中的type_id。album_name 專輯名。singer_name 歌手名。singer_type 歌手類型,m為男歌手,f為女歌手,t為樂(lè)隊(duì)組合,默認(rèn)為m。album_date 專輯收入時(shí)間,自動(dòng)更新。album_summary 專輯介紹。album_pic 專輯圖片地址。singer_abc 歌手名首字母。album_name_e 專輯名拼音。singer_name_e 歌手名拼音。表music的建立表music是用來(lái)存放歌曲的相關(guān)信息,如圖4-4。圖4-4各字段意義如下:music_id 數(shù)據(jù)庫(kù)自動(dòng)編號(hào),每次遞增1,查詢關(guān)鍵字。album_id 專輯的編號(hào),對(duì)應(yīng)與表album中的album_id。content 歌詞內(nèi)容。filename 歌曲的真實(shí)文件名。music_name 歌曲名。hits_download 歌曲下載次數(shù)。hits_listen 歌曲試聽(tīng)次數(shù)。表type的建立表type是用來(lái)存放專輯類型的相關(guān)信息,如圖4-5。圖4-5各字段意義如下:type_id 專輯所屬的分類。type_name 專輯所屬分類名。表user的建立表user是用來(lái)存用戶的相關(guān)信息,如圖4-6。圖4-6各字段意義如下:user_id 數(shù)據(jù)庫(kù)自動(dòng)編號(hào),每次遞增1,查詢關(guān)鍵字。user_name 用戶名。user_pass 用戶密碼。user_email 用戶E-mail地址。user_sex 用戶性別。user_oicq 用戶QQ號(hào)碼。user_logins 用戶登錄次數(shù)。user_lastlogin 用戶最后登錄時(shí)間。user_regdate 用戶注冊(cè)時(shí)間。3.2公用的程序公用的程序包括data.jsp,head.jsp,info_all.jsp,search.jsp,tail.jsp,tools.jsp,user_login.jsp。head.jsp程序?qū)崿F(xiàn)整個(gè)站點(diǎn)的導(dǎo)航與目錄功能。user_login.jsp程序?qū)崿F(xiàn)用戶的登錄與注冊(cè)功能,同時(shí)可以選擇保存cookie的時(shí)限。如圖4-7。 圖4-7 圖4-8search.jsp程序?qū)崿F(xiàn)站內(nèi)歌曲的搜索,如圖4-8。info_all.jsp程序?qū)崿F(xiàn)站點(diǎn)資源的統(tǒng)計(jì)顯示,如圖4-9。 圖4-9 圖4-10tools.jsp程序?qū)崿F(xiàn)相關(guān)軟件下載鏈接,如圖4-10。tail.jsp程序?yàn)槊總€(gè)頁(yè)面的頁(yè)腳,同時(shí)也是管理員的入口,如圖4-11。圖4-11data.jsp程序是數(shù)據(jù)庫(kù)連接的入口程序,其代碼如下:<%@pagelanguage="java"contentType="text/html;charset=gb2312"%><%@pagelanguage="java"contentType="text/html;charset=gb2312"%><%@pageimport="java.sql.*"%><%@pageimport="com.mysql.jdbc.Driver"%><% java.sql.ConnectionConn; //databaseconnectionobject java.sql.StatementStmt; //statementobject java.sql.ResultSetRst; //resultunitobject //adddriver Class.forName("com.mysql.jdbc.Driver"); //connectdatabase Stringurl="jdbc:mysql://localhost:3306/music"; Stringuser="root"; Stringpassword="adminpass"; Conn=DriverManager.getConnection(url,user,password); Stmt=Conn.createStatement();%>3.3用戶注冊(cè)與登錄的程序用戶注冊(cè)與登錄的程序包括register.jsp和login.jsp。register程序?qū)崿F(xiàn)新用戶的注冊(cè)功能。在進(jìn)行注冊(cè)前首先會(huì)跳出注冊(cè)協(xié)議,只有同意才可以繼續(xù)。注冊(cè)時(shí)要求必須填入用戶名、密碼、密碼確認(rèn)、性別和Email地址,如圖4-12。圖4-12程序會(huì)自動(dòng)進(jìn)行注冊(cè)信息有效性的檢查,包括:用戶名是否符合1-12個(gè)大小寫(xiě)字母的要求,密碼是否為6-16個(gè)字節(jié),密碼與密碼確認(rèn)是否一致,Email地址的輸入是否真實(shí)有效。這里列出Email地址檢查的代碼,如下:Stringuser_email=request.getParameter("user_email");Stringuser_email=request.getParameter("user_email");intat1=user_email.indexOf("@");intat2=user_email.lastIndexOf("@");intdot=user_email.indexOf(".");if(at1==-1||dot==-1||at1!=at2){ Reg_Title="注冊(cè)失敗"; Reg_Message="您的E-mail地址不合法,請(qǐng)重新輸入。<br><br><br><ahref='javascript:history.go(-1);'>返回重新注冊(cè)</a>";}login.jsp程序?qū)崿F(xiàn)注冊(cè)用戶的站點(diǎn)登錄后臺(tái)工作。工作流程為:首先根據(jù)用戶名在數(shù)據(jù)庫(kù)中查詢其相應(yīng)的密碼,然后將用戶輸入的密碼與數(shù)據(jù)庫(kù)中查詢到的密碼做比較,一致則登錄成功,否則返回登錄界面。在登錄成功的同時(shí),服務(wù)器端會(huì)自動(dòng)將該用戶的Session值設(shè)為登錄狀態(tài),有效期30分鐘,并且根據(jù)用戶所勾選的Cookie保存時(shí)間將相應(yīng)的Cookie信息寫(xiě)入用戶本地電腦。3.4管理員的登錄與管理程序管理員的登錄與管理程序包括admin_login.jsp,admin_logout.jsp,admin_menu.jsp,admin_edit.jsp,admin_edit_info.jsp,admin_edit_user.jsp,admin_edit_add_album.jsp,admin_edit_add_music.jsp,adm_login.jsp。admin_login.jsp程序?qū)崿F(xiàn)管理員的站點(diǎn)登錄后臺(tái)工作,同上面講到的login.jsp程序。只是在登錄成功的同時(shí),服務(wù)器將自動(dòng)把管理員的Session值設(shè)為登錄狀態(tài),有效期30分鐘。之后的所有管理工作都需要先判斷該Session值,有效則可以繼續(xù)操作,否則返回首頁(yè)。adm_login.jsp程序就是判斷管理員Session值的子程序,使用include方法將其包含入所有需要進(jìn)行Session值判斷的管理程序,具體代碼如下:<% Stringadmin_login=(String)session.getAttribute("admin_online");<% Stringadmin_login=(String)session.getAttribute("admin_online"); if(admin_login==null){ response.sendRedirect("index.jsp"); } elseif(!admin_login.equals("yes")){ response.sendRedirect("index.jsp"); }%>admin_logout.jsp程序是實(shí)現(xiàn)管理員的登出,后臺(tái)需要將Session值設(shè)為登出狀態(tài)。admin_menu.jsp程序是管理界面的公用程序,起到導(dǎo)航與目錄作用。admin_edit.jsp程序是管理界面的初始頁(yè)面,默認(rèn)指向admin_edit_info.jsp程序。admin_edit_info.jsp程序顯示站點(diǎn)已收入的所有專輯歌曲的統(tǒng)計(jì)信息,以具體的地區(qū)分類進(jìn)行排列。admin_edit_add_album.jsp程序就是實(shí)現(xiàn)具體的新專輯添加功能。首先選擇所要添加專輯的目錄,如圖4-13。圖4-13之后根據(jù)所選擇的目錄,程序?qū)⒆詣?dòng)識(shí)別該目錄下的.mp3格式文件(具體實(shí)現(xiàn)會(huì)在后面的核心技術(shù)中講解),然后自動(dòng)讀取所有歌曲的文件名并排列顯示,如圖4-14。圖4-14同時(shí)需要管理手工填寫(xiě)其他一些該專輯的相關(guān)必要信息,如圖4-15。圖4-15填寫(xiě)完整后則可以實(shí)現(xiàn)新專輯的添加了。admin_edit_add_music.jsp程序用來(lái)實(shí)現(xiàn)新歌曲的添加功能。大致思路與上面新專輯的添加一樣,只不過(guò)是先要選擇所添加歌曲屬于哪張專輯,之后進(jìn)行添加。3.5專輯歌曲的查詢與顯示程序?qū)]嫺枨牟樵兣c顯示程序包括search_result.jsp,album_list.jsp,album_detail.jsp。search_result.jsp程序的作用是根據(jù)不同的查詢條件對(duì)用戶輸入的關(guān)鍵字進(jìn)行查詢,并顯示查詢結(jié)果。具體的查詢語(yǔ)句分別是:按歌曲名查詢Rst=Stmt.executeQuery("selectmusic.music_id,music.content,music.music_name,music.filename,album.album_id,album.album_name,album.singer_name,album.album_name_e,album.singer_name_efrommusic,albumwherealbum.album_id=music.album_idandmusic.music_namelike'%"+keyword+"%'orderbymusic.hits_listendesc");Rst=Stmt.executeQuery("selectmusic.music_id,music.content,music.music_name,music.filename,album.album_id,album.album_name,album.singer_name,album.album_name_e,album.singer_name_efrommusic,albumwherealbum.album_id=music.album_idandmusic.music_namelike'%"+keyword+"%'orderbymusic.hits_listendesc");按專輯名查詢Rst=Stmt.executeQuery("selectalbum.album_id,album.album_name,album.singer_name,album.album_pic,album.album_datefromalbumwherealbum.album_namelike'%"+keyword+"%'orderbyalbum.album_datedesc");Rst=Stmt.executeQuery("selectalbum.album_id,album.album_name,album.singer_name,album.album_pic,album.album_datefromalbumwherealbum.album_namelike'%"+keyword+"%'orderbyalbum.album_datedesc");按歌手名查詢Rst=Stmt.executeQuery("selectalbum.album_id,album.album_name,album.singer_name,album.album_pic,album.album_datefromalbumwherealbum.singer_namelike'%"+keyword+"%'orderbyalbum.album_datedesc");Rst=Stmt.executeQuery("selectalbum.album_id,album.album_name,album.singer_name,album.album_pic,album.album_datefromalbumwherealbum.singer_namelike'%"+keyword+"%'orderbyalbum.album_datedesc");按模糊歌詞查詢Rst=Stmt.executeQuery("selectmusic.music_id,music.content,music.music_name,music.filename,album.album_id,album.album_name,album.singer_name,album.album_name_e,album.singer_name_efrommusic,albumwherealbum.album_id=music.album_idandmusic.contentlike'%"+keyword+"%'orderbymusic.hits_listendesc");Rst=Stmt.executeQuery("selectmusic.music_id,music.content,music.music_name,music.filename,album.album_id,album.album_name,album.singer_name,album.album_name_e,album.singer_name_efrommusic,albumwherealbum.album_id=music.album_idandmusic.contentlike'%"+keyword+"%'orderbymusic.hits_listendesc");album_list.jsp程序?qū)崿F(xiàn)專輯列表顯示功能,顯示項(xiàng)目有專輯圖片,專輯名,歌手名和收入時(shí)間。用戶點(diǎn)擊專輯專輯圖片或?qū)]嬅伎梢赃M(jìn)入該專輯的詳細(xì)列表頁(yè)面。album_detail.jsp程序?qū)崿F(xiàn)專輯的詳細(xì)列表顯示功能,如圖4-16。圖4-163.6歌曲的試聽(tīng)與下載程序歌曲的試聽(tīng)與下載程序包括play.jsp和download.jsp。play.jsp程序?qū)崿F(xiàn)歌曲的在線播放功能。這里我們希望用戶在點(diǎn)擊試聽(tīng)按鈕后,站點(diǎn)可以彈出一個(gè)新的浮動(dòng)頁(yè)面來(lái)加載播放程序,所以需要用到一點(diǎn)JavaScript程序,如下。<scriptlanguage="javascript"><scriptlanguage="javascript">functionplay(id){ window.open('play.jsp?music_id='+id,'geci_'+id,'scrollbars=yes,status=no,toolbar=no,location=no,menu=no,resizable=no,width=350,hight=250');}</script> 然后play.jsp程序調(diào)用網(wǎng)頁(yè)播放器根據(jù)music_id來(lái)播放相應(yīng)的歌曲,部分代碼如下。<%<objectid="player"height="64"width="260"<%<objectid="player"height="64"width="260"classid="CLSID:6BF52A52-394A-11d3-B153-00C04F<paramNAME="AutoStart"VALUE="-1"><!--是否自動(dòng)播放--><paramNAME="url"value=<%=url%>><!--播放的文件地址--><paramname="mute"value="0"><!--是否靜音--><paramname="uiMode"value="mini"><!--播放器顯示模式:Full顯示全部;mini最簡(jiǎn)化;None不顯示播放控制,只顯示視頻窗口;invisible全部不顯示--><paramname="windowlessVideo"value="1"><!--如果是0可以允許全屏,否則只能在窗口中查看--><paramname="fullScreen"value="0"><!--開(kāi)始播放是否自動(dòng)全屏--></object>%>download.jsp程序?qū)崿F(xiàn)歌曲的下載功能,原理是根據(jù)接收到的music_id,在數(shù)據(jù)庫(kù)中查詢?cè)摳枨奈募刂?,從而?shí)現(xiàn)下載,部分代碼如下。<% Stringmusic_id=request.getParameter("music_id");<% Stringmusic_id=request.getParameter("music_id"); Stmt.executeUpdate("updatemusicsethits_download=hits_download+1wheremusic_id="+music_id); Rst=Stmt.executeQuery("selectalbum.singer_name_e,music.filename,album.album_name_efrommusic,albumwherealbum.album_id=music.album_idandmusic_id="+music_id); Rst.next(); Stringalbum_name_e=Rst.getString("album_name_e"); Stringsinger_name_e=Rst.getString("singer_name_e"); Stringfilename=Rst.getString("filename"); response.sendRedirect("music/"+singer_name_e+"/"+album_name_e+"/"+filename);%>3.7其他顯示程序除了以上的主要程序,站點(diǎn)還包括以下顯示程序:album_all.jsp,new_album.jsp,hot_listen.jsp,listen_list.jsp,hot_download.jsp,download_list.jsp。album_all.jsp程序用于顯示所有專輯,以歌手拼音首字母進(jìn)行劃分顯示。new_album.jsp程序則是在主頁(yè)上顯示最新收入的4張專輯。hot_listen.jsp和listen_list.jsp程序負(fù)責(zé)試聽(tīng)排行榜的顯示,關(guān)鍵就是在數(shù)據(jù)庫(kù)查詢時(shí)以hits_listen來(lái)進(jìn)行排列。hot_download.jsp和download_list.jsp程序負(fù)責(zé)下載排行榜的顯示,關(guān)鍵就是在數(shù)據(jù)庫(kù)查詢時(shí)以hits_download來(lái)進(jìn)行排列。在線音樂(lè)播放站點(diǎn)的技術(shù)難點(diǎn)解析4.1 JSP+MySQL+Tomcat+Apache亂碼問(wèn)題說(shuō)實(shí)話,在整個(gè)站點(diǎn)設(shè)計(jì)中我所遇到的最大難題就是亂碼問(wèn)題,以至于險(xiǎn)些要將大部分代碼重寫(xiě),那么所謂的JSP+MySQL+Tomcat+Apache亂碼問(wèn)題到底指的是什么呢?我們先來(lái)看下面這張圖:response服務(wù)器端程序處理response服務(wù)器端程序處理客戶端瀏覽器顯示MySQL數(shù)據(jù)庫(kù)requestquerysend圖5-1我們知道,MySQL數(shù)據(jù)庫(kù)中數(shù)據(jù)的存儲(chǔ)格式為比特流,即ISO-8859-1格式,但是服務(wù)器(Tomcat)端內(nèi)部所使用的編碼格式為Unicode,客戶端瀏覽器地址中所用編碼格式是UTF-8,然而我們最終用戶可以識(shí)別的編碼格式只有GB-2312。如此一來(lái),編碼間的轉(zhuǎn)換問(wèn)題就突顯出來(lái),任何一個(gè)環(huán)節(jié)的轉(zhuǎn)換不當(dāng),都會(huì)引發(fā)亂碼問(wèn)題,下面我們具體來(lái)對(duì)幾種可能出現(xiàn)的亂碼問(wèn)題進(jìn)行分析解決。4.1.1MySQL中文顯示亂碼MySQL默人語(yǔ)言為latin1_swedish_ci,即拉丁語(yǔ),所以取出的中文全是亂碼。解決方案:1.將charset設(shè)為8859_1即:<%@pagecontentType="text/html;charset=8859_1"%>這個(gè)方法只能暫時(shí)緩解字符顯示問(wèn)題,并權(quán)益之計(jì)。因?yàn)?859_1為字節(jié)型字庫(kù),并非字型字庫(kù),故在非全角狀態(tài)下,將出現(xiàn)半字亂碼,表現(xiàn)為“?”。2.在數(shù)據(jù)庫(kù)連接語(yǔ)句中加上?useUnicode=true;characterEncoding=GBK,如:jdbc:mysql://localhost/dbname?useUnicode=true;characterEncoding=GBK也曾有人提意:在MySQL的my.ini文件中加入default-character-set=gbk,本人不贊同此法,因?yàn)檫@樣破壞了原有的環(huán)境,除非這是MySQL的第一個(gè)站點(diǎn)。4.1.2中文路徑亂碼因?yàn)門(mén)omcat5的httpConnector所用的URI解碼默認(rèn)用的是ISO-8859-1,而一般瀏覽器默認(rèn)用的發(fā)送編碼為UTF-8,這樣問(wèn)題就出現(xiàn)了初步的解決方法如下:在server.xml中類似如下配置:<Connectorport="8080"maxThreads="150"minSpareThreads="25"maxSpareThreads="75"enableLookups="false"redirectPort="8443"acceptCount="100"debug="0"connectionTimeout="20000"disableUploadTimeout="true"URIEncoding="UTF-8"/>其中關(guān)鍵是URIEncoding="UTF-8"這項(xiàng),其含義是指定URI的編碼為:UTF-8這樣配置后重啟Tomcat,基本能解決前面提到的中文路徑和中文文件名問(wèn)題。不過(guò)還是強(qiáng)烈建議用English,那樣比較規(guī)范,麻煩也少的多。4.2MySQL數(shù)據(jù)庫(kù)中日期時(shí)間類型的問(wèn)題MySQL目前不支持列的Default為函數(shù)的形式,如要使某列的默認(rèn)值為當(dāng)前更新日期與時(shí)間的功能,可以使用TIMESTAMP列類型,下面就詳細(xì)說(shuō)明TIMESTAMP列類型。TIMESTAMP列類型TIMESTAMP值可以從1970的某時(shí)的開(kāi)始一直到2037年,精度為一秒,其值作為數(shù)字顯示。TIMESTAMP值顯示尺寸的格式如下表所示:列表型顯示格式TIMESTAMP(14)YYYYMMDDHHMMSSTIMESTAMP(12)YYMMDDHHMMSSTIMESTAMP(10)YYMMDDHHMMTIMESTAMP(8)YYYYMMDDTIMESTAMP(6)YYMMDDTIMESTAMP(4)YYMMTIMESTAMP(2)YY圖5-2“完整”TIMESTAMP格式是14位,但TIMESTAMP列也可以用更短的顯示尺寸創(chuàng)造最常見(jiàn)的顯示尺寸是6、8、12、和14。我們可以在創(chuàng)建表時(shí)指定一個(gè)任意的顯示尺寸,但是定義列長(zhǎng)為0或比14大均會(huì)被強(qiáng)制定義為列長(zhǎng)14。列長(zhǎng)在從1~13范圍的奇數(shù)值尺寸均被強(qiáng)制為下一個(gè)更大的偶數(shù)。列如:定義字段長(zhǎng)度強(qiáng)制字段長(zhǎng)度TIMESTAMP(0)->TIMESTAMP(14)TIMESTAMP(15)->TIMESTAMP(14)TIMESTAMP(1)->TIMESTAMP(2)TIMESTAMP(5)->TIMESTAMP(6)所有的TIMESTAMP列都有同樣的存儲(chǔ)大小,使用被指定的時(shí)期時(shí)間值的完整精度(14位)存儲(chǔ)合法的值不考慮顯示尺寸。不合法的日期,將會(huì)被強(qiáng)制為0存儲(chǔ)。這有幾個(gè)含意:1.雖然你建表時(shí)定義了列TIMESTAMP(8),但在你進(jìn)行數(shù)據(jù)插入與更新時(shí)TIMESTAMP列,實(shí)際上保存了14位的數(shù)據(jù)(包括年月日時(shí)分秒),只不過(guò)在你進(jìn)行查詢時(shí)MySQL返回給你的是8位的年月日數(shù)據(jù)。如果你使用ALTERTABLE拓寬一個(gè)狹窄的TIMESTAMP列,以前被“隱蔽”的信息將被顯示。2.同樣,縮小一個(gè)TIMESTAMP列不會(huì)導(dǎo)致信息失去,除了感覺(jué)上值在顯示時(shí),較少的信息被顯示出。3.盡管TIMESTAMP值被存儲(chǔ)為完整精度,直接操作存儲(chǔ)值的唯一函數(shù)是UNIX_TIMESTAMP();由于MySQL返回TIMESTAMP列的列值是進(jìn)過(guò)格式化后的檢索的值,這意味著你可能不能使用某些函數(shù)來(lái)操作TIMESTAMP列(例如HOUR()或SECOND()),除非TIMESTAMP值的相關(guān)部分被包含在格式化的值中。例如,一個(gè)TIMESTAMP列只有被定義為T(mén)IMESTAMP(10)以上時(shí),TIMESTAMP列的HH部分才會(huì)被顯示,因此在更短的TIMESTAMP值上使用HOUR()會(huì)產(chǎn)生一個(gè)不可預(yù)知的結(jié)果。4.不合法TIMESTAMP值被變換到適當(dāng)類型的“零”值(00000000000000)。(DATETIME,DATE亦然)4.3數(shù)據(jù)分頁(yè)顯示技術(shù)我們?cè)趯?duì)數(shù)據(jù)庫(kù)進(jìn)行條件查詢后,返回的結(jié)果可能有很多條,全部都顯示在一個(gè)頁(yè)面上是不現(xiàn)實(shí)的,所以就需要對(duì)其進(jìn)行分頁(yè)處理。具體思路是這樣的:預(yù)先定義好每頁(yè)顯示的數(shù)據(jù)條數(shù)預(yù)先定義好每頁(yè)顯示的數(shù)據(jù)條數(shù)得到總數(shù)據(jù)條數(shù)計(jì)算分頁(yè)數(shù)對(duì)Rst.next()進(jìn)行空循環(huán),使指針指向當(dāng)前頁(yè)第一條數(shù)據(jù)的位置讀取每頁(yè)應(yīng)顯示的數(shù)據(jù)條數(shù)圖5-3具體代碼如下:<%<% intpages=0; intpagesize=17; intpagecount=0; pagecount=num/pagesize; if(num%pagesize!=0){ pagecount+=1; }Stringp=request.getParameter("pages");if(p==null){ pages=1; } else{ pages=java.lang.Integer.parseInt(p); }Rst=……; inti=0,j=0; for(i=0;i<(pages-1)*pagesize;i++){ Rst.next(); }%>4.4自動(dòng)識(shí)別目錄下.mp3文件技術(shù)前面講到管理員在添加新專輯的時(shí)候需要通過(guò)指定的文件目錄,站點(diǎn)可以自動(dòng)識(shí)別目錄下.mp3文件。想要實(shí)現(xiàn)這個(gè)功能其實(shí)很簡(jiǎn)單,只要對(duì)該目錄中所有文件逐一進(jìn)行識(shí)別,將每個(gè)文件的文件名通過(guò)substring函數(shù),將“.”后面的文件類型名提取出來(lái),判斷是否為“.mp3”,若是的話則將整個(gè)文件名作為歌曲地址的一部分存入數(shù)據(jù)庫(kù),否則丟棄。具體實(shí)現(xiàn)部分代碼如下。<%<% intlocation=dir.lastIndexOf("\\"); dir=dir.substring(0,location); Filenowdir=newFile(dir);String[]allfile=nowdir.list(); intnum=allfile.length; inti,mp3_num=0; for(i=0;i<num;i++){ ocation=allfile[i].lastIndexOf("."); if(location>0){ intlen=allfile[i].length(); Stringextension=allfile[i].substring(len-4,len); extension=extension.toLowerCase(); if(pareTo(".mp3")==0){ Stringfile_name=allfile[i]; len=file_name.length(); Stringmusic_name=file_name.substring(0,len-4);%>4.5COOKIE&SESSION技術(shù)很多朋友在剛開(kāi)始接觸Cookie和Session這個(gè)兩個(gè)概念的時(shí)候往往容易區(qū)分不清,其實(shí)Cookie應(yīng)該是一種應(yīng)用較久的技術(shù)了。早在HTML剛剛出現(xiàn)的時(shí)候,在每個(gè)獨(dú)立的頁(yè)面之間沒(méi)有辦法記錄和標(biāo)識(shí)不同的用戶。后來(lái)人們就發(fā)明了Cook

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論