旅游網(wǎng)站的設計與開發(fā)論文_第1頁
旅游網(wǎng)站的設計與開發(fā)論文_第2頁
旅游網(wǎng)站的設計與開發(fā)論文_第3頁
旅游網(wǎng)站的設計與開發(fā)論文_第4頁
旅游網(wǎng)站的設計與開發(fā)論文_第5頁
已閱讀5頁,還剩52頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

湖北第二師范學院本科畢業(yè)論文Abstract:Thetourinformationwebsiteasjavawebbasedwebapplication,mainlyusingtheemergingangularjsandbootstrapthefrontendoftheframework,andthemainstreamforspringMVCandmyBatiesbackenddevelopmenttechnology,andnichepostgresqldatabasedevelopmenttechnology.AndbythemediaoftheInternet,realizethetourisminformationqueryandmulti-worldsandsharing,opennessoftrafficreal-timequeryplatform.Thisthesismainlydiscussedisthedevelopmentofthebasicengineering,includingrequirementsanalysis,designanddevelopment,attheendofthewebsitedevelopmentandtesting.UnitizedtestismainlyusingsoapUItestanalysis.Thissystemdemandmainlyincludesthetouristattractionsofinformationshare,thetrainstationticketreal-timequery,querylogtypephotoalbumstouploadandopennessofBBSmulti-worldsandcommunicationsystem,anduserinformationmanagementsystem.Throughthesesubsystemmoduleimplementation,toprovidearealtimetotravel,open,timelyandaccuratedemandfortourisminformationservice.Atthesametime,thedevelopmentoftouristsitesandmoduledesignindetail.Keywords:Touristinformationwebsite;Postgresqldatabase;Javaweb;Informationdynamicmanagement 目錄第1章緒論 11.1課題開發(fā)背景 11.2旅游信息網(wǎng)站系統(tǒng)的研究意義 1第2章旅游信息網(wǎng)站系統(tǒng)開發(fā)的前期分析 42.1現(xiàn)階段課件制作工具主要存在問題的分析 42.2軟件開發(fā)所需解決的問題 42.3軟件開發(fā)的必要性分析 52.4軟件開發(fā)的可行性分析 5第3章旅游信息網(wǎng)站系統(tǒng)開發(fā)的整體架構 63.1軟件的功能設計 63.2軟件的結構設計 83.3軟件的界面設計 103.4軟件的數(shù)據(jù)庫設計 14第4章旅游信息網(wǎng)站系統(tǒng)開發(fā)的實現(xiàn) 22第5章項目研究的總結與展望 435.1總結 43參考文獻 44致謝 46PAGEPAGE47第1章緒論1.1課題開發(fā)背景 在近幾年互聯(lián)網(wǎng)技術的飛速發(fā)展中,越來越多的技術被能所熟知,越來越多的新新技術被人們所發(fā)現(xiàn),被人們運用到網(wǎng)絡開發(fā)的各個地方,大數(shù)據(jù)的發(fā)展,云計算,云存儲技術的出現(xiàn),各種新興的前端技術的出現(xiàn),各種后端技術的豐富,網(wǎng)絡的網(wǎng)頁開發(fā)也越來越貼近生活,使之能被越來越多的人接受,這同樣也是互聯(lián)網(wǎng)技術飛速發(fā)展的緣由,簡單方便始終是不變的流行趨勢。人們不習慣了步行,所以從自行車到汽車,再到火車、飛機、船只、飛船,人們不停的研究,讓出行變得不再那么艱難。也正是這樣的研究方向,生活變得越來越方便,人們生活再也不用局限在一洲之地。這種發(fā)展也同樣適用于互聯(lián)網(wǎng)的發(fā)展。從一開始的巨型計算器,功能簡單的只能提供計算的需求,到現(xiàn)在的互聯(lián)網(wǎng)。人們的需求,促進了互聯(lián)網(wǎng)的發(fā)展。從開始的靜態(tài)網(wǎng)頁到動態(tài)網(wǎng)頁,從簡單的后端開發(fā),到現(xiàn)在數(shù)不勝數(shù)的便易框架。就連以前雜亂的前端發(fā)展,也到了現(xiàn)在慢慢向著后端的框架理念去進步從jquery到現(xiàn)在的nodejs再到angularjs。技術在進步,我們也能開發(fā)出更好的,更便民的網(wǎng)站,去改善人們的生活。如果這種技術應用在旅游網(wǎng)站的開發(fā)上,我相信一種個性化的針對性的將會出現(xiàn)在人們的視野中,幫助人們能更好的生活。其實,我國的旅游類型的網(wǎng)站從2000年就開始出現(xiàn)了,在目前,能實現(xiàn)一定旅游信息咨詢實時查詢能力的網(wǎng)站也已經(jīng)有了2000多家,在眾多旅游信息網(wǎng)站中,專業(yè)的旅游網(wǎng)站也有200多家,其中主流的功能性網(wǎng)站是地區(qū)性的旅游網(wǎng)站,和專業(yè)網(wǎng)站還有門戶交流網(wǎng)站。在現(xiàn)在,我國的旅游網(wǎng)站良莠不齊,比較有實力的品牌網(wǎng)站數(shù)量不是很多,而被人們熟知的旅游網(wǎng)站更是少之又少。這也是對需求開發(fā)的不重視,對技術性選擇的不重視,從而無法開發(fā)出滿意的功能性旅游網(wǎng)站。從而,我希望運用我所學的技術,從需求出發(fā),開發(fā)出一個適用實用的旅游信息網(wǎng)站。1.2旅游信息網(wǎng)站系統(tǒng)的研究意義隨著網(wǎng)絡經(jīng)濟的飛速發(fā)展還有人們消費觀思想觀的日益提高,旅游消費的觀念也在改變,旅游消費者觀念的逐步改變,使之對更多、更全面的旅游資訊的了解,更自主的行程安排,更多樣性,個性化的旅游方式的需求越來越迫切,而正因需求迫切,使之旅游網(wǎng)站——這中以互聯(lián)網(wǎng)為主題,以旅游信息為核心的電子化網(wǎng)站應運而生,它們有著最新最全面的旅游資訊,更實時的交通信息,更開放的交流平臺。它們圍繞著旅行的主題向外延伸,從衣食住行各個方面一點一點的為人們提供者更舒適,更特色化的服務。它們讓人們能足不出戶就能了解心儀景點的方方面面的重要資訊,同時能夠完成更自主,更個性化的旅程制定,不同于以往的跟團游,自由是互聯(lián)網(wǎng)的精神,也同樣是旅游網(wǎng)站的開發(fā)精神。為用戶提供自由的信息,自由的選擇。讓用戶能在還為出門旅行就體會到輕松的心態(tài)。輕松不正是旅游的最完美的理由與需求嗎?用發(fā)展的眼光來開,如同世界旅游組織WTO所宣揚的那樣:旅游業(yè)與互聯(lián)網(wǎng)是“強有力的結合”,“是理想的合作伙伴”。左文明與吳應亮(2012)提出,作為一種特殊的產(chǎn)品和服務,旅游呈現(xiàn)出四個顯著特征,及生產(chǎn)消費同步化,產(chǎn)品服務預約化、物流管理簡單化和經(jīng)營線上線下結合化。李斌寧(2005)分析了客戶關系管理應用在旅游電子商務中的可行性和應用領域,這些領域包括整合溝通交流渠道、整合旅游企業(yè)內(nèi)部的服務、提供個性化的人性服務。第2章旅游信息網(wǎng)站系統(tǒng)開發(fā)的前期分析2.1旅游信息網(wǎng)站系統(tǒng)開發(fā)主要存在問題的分析旅游信息網(wǎng)站的需求分析,第一次開發(fā)自主項目,對需求分析的要求應盡量滿足。需求分析要囊括客戶功能需求與頁面美感需求,提供滿足絕大部分用戶的需求為這次需求分析的主要目標。這份需求分析面向青少年群眾與老年群眾,考慮受眾情況,需給出較全面且有針對性的需求分析調(diào)查。技術問題:本次旅游網(wǎng)站開發(fā)運用新興的前端技術angularjs,摒棄之前的jquery的dom操作技術,引用新興技術會有學習時間的對照。盡可能理解新興技術的思想內(nèi)涵,快速學習angularjs技術,并將其技術運用到旅游網(wǎng)站的開發(fā)與設計中來。前端頁面的設計也是參考bootstrap的柵格系統(tǒng)開發(fā),由于本人是后端工程師,所以在前端美化上面難免不能調(diào)節(jié)好。可能不符合絕大部分受眾的審美。需要完善自己的前端技術,美化自己的旅游信息網(wǎng)站,使之能被更多的人來接受。后端技術同樣是運用曾經(jīng)沒有接受過的springMVC+mybaties,選擇這種未接收過的后端框架主要的意義在于挑戰(zhàn)自己,鍛煉自己的學習能力,能在短時間內(nèi)學會符合要求的新興技術并運用熟悉熟練。2.2旅游信息網(wǎng)站系統(tǒng)開發(fā)所需解決的問題此次開發(fā)絕大部分使用的是網(wǎng)絡提供的API,所以在數(shù)據(jù)準備上,需要研讀大量的API接口用法,并運用爬蟲技術,獲取部分參數(shù)存入本地數(shù)據(jù)庫中,提高該旅游完整的穩(wěn)定性以及使用性。并保證此次開發(fā)使用的是免費的API接口,運用相應的緩存技術,使相關的數(shù)據(jù)能緩存在本地,減少接口訪問次數(shù),減少并控制開發(fā)費用,在開發(fā)中圖片上傳技術有了新的挑戰(zhàn)。由于使用的新興的前端技術angularjs,摒棄使用群眾更加普遍的jquery,所以在圖片上傳方面,能參考的文獻較少,需要參考多方的開發(fā)經(jīng)驗,在極少的開源文檔中尋找適合自己的開發(fā)方式。并熟悉其開發(fā)思路運用到自己的開發(fā)中來。在定時器方面,由于在后端控制異步定時器,所以也需要參考內(nèi)部類的使用情況,定制適合自己的定時器程序。2.3旅游信息網(wǎng)站系統(tǒng)開發(fā)的必要性分析隨著網(wǎng)絡經(jīng)濟的飛速發(fā)展還有人們消費觀思想觀的日益提高,旅游消費的觀念也在改變,旅游消費者觀念的逐步改變,使之對更多、更全面的旅游資訊的了解,更自主的行程安排,更多樣性,個性化的旅游方式的需求越來越迫切,而正因需求迫切,使之旅游網(wǎng)站——這中以互聯(lián)網(wǎng)為主題,以旅游信息為核心的電子化網(wǎng)站應運而生,它們有著最新最全面的旅游資訊,更實時的交通信息,更開放的交流平臺。它們圍繞著旅行的主題向外延伸,從衣食住行各個方面一點一點的為人們提供者更舒適,更特色化的服務。2.4旅游信息網(wǎng)站系統(tǒng)開發(fā)的可行性分析技術可行性分析本系統(tǒng)運用angularjs+boootstrap+springMVC+mybaties的前后的技術,運用net網(wǎng)絡訪問,所以在技術上,此次系統(tǒng)開發(fā)是可行。操作可行性分析本課題平臺需要將項目代碼部署到電腦上的web目錄下便可運行(需要AIR運行環(huán)境),安裝很方便。由于系統(tǒng)的主要資源在好數(shù)據(jù)網(wǎng)站上提供的,所以沒有實際的后端數(shù)據(jù)管理系統(tǒng),本系統(tǒng)的后端意義上的管理系統(tǒng)就是好數(shù)據(jù)網(wǎng)站。旅游信息網(wǎng)站系統(tǒng)開發(fā)開發(fā)的整體架構需求分析是軟件定義時期的第一個階段,他的基本任務就是告訴開發(fā)者:“系統(tǒng)必須要做什么”的這個問題,及讓開發(fā)者確認該系統(tǒng)需要完成那些工作,只有讓開發(fā)者明確系統(tǒng)的需求,才能開發(fā)出與設想不偏離的好的軟件系統(tǒng),下面就從幾個方面來談談系統(tǒng)在需求方面的問題本旅游信息網(wǎng)站系統(tǒng)是按照標準的電腦屏幕分辨率進行設計運行的,同時也能智能匹配手機與平板電腦的屏幕,使用戶能通過各種工具方便的解決自己對于旅游信息的需求問題。該旅游網(wǎng)站的運行環(huán)境是window系統(tǒng),同時對網(wǎng)絡的需求十分強烈。該系統(tǒng)不支持單機運行。該旅游網(wǎng)站的開發(fā)使用eclipse、tomcat、google瀏覽器與soapUI測試機,已經(jīng)Photoshop軟件等3.1軟件的功能設計3.1用戶系統(tǒng):用戶可以通過郵箱注冊,來獲取網(wǎng)站的用戶名密碼。同時在注冊過程中,會有郵件發(fā)送的驗證碼,與后臺定時器,來控制驗證碼的輸入時間,初始化密碼為666666,登陸后可以根據(jù)需求進行操作,可改變用戶信息與密碼。忘記密碼功能會將密碼發(fā)送到的郵箱上,一個郵箱只能注冊一次,激活一次。通過郵箱的唯一性來控制賬戶的正確性與唯一性。3.2景點信息系統(tǒng):用戶可以通過城市名進行查詢景點列表與景點詳情,網(wǎng)站提供了景點圖片與景點詳情介紹,人們可以通過景點信息去了解自己想去要的景點,也可以選擇自己喜歡的景點。使用了好數(shù)據(jù)網(wǎng)站提供的網(wǎng)絡api。3.3火車站票務系統(tǒng):仿12306的票務查詢系統(tǒng),通過火車站與出發(fā)時間,給出實時的火車票務完整信息,使用戶能更好的更自主的安排自己的出發(fā)時間,靈活是該網(wǎng)站開發(fā)的主題。3.4 時間軸系統(tǒng):仿QQ空間的時間軸,提供圖片上傳與預覽功能,使用戶可以將美好的回憶留在云上。在未來的某天可以看著自己當時的樣子,回憶那是的青春歲月。時間總是在走,我們可以停下,駐足看看身后的美妙時光。3.5BBS交流系統(tǒng):仿百度論壇設計的簡易的BBS論壇,提供用戶自由交流的機會,人們可以在里面暢所欲言,找尋志同道合的人們,一起開始下一段美妙的旅途。交流時這個旅游信息網(wǎng)站的主旨,在這個在宅文化占據(jù)青少年的大部分精神追求的時代,我希望通過這個網(wǎng)站能使更多的人走出家門,看看這個世界,美好的東西只有發(fā)現(xiàn)才有價值。而你正是那個發(fā)現(xiàn)無限價值的人。3.6提供友情鏈接:使用戶能方便的到達相關站點,例如酒店旅店的預定網(wǎng)站,天氣查詢網(wǎng)站,百度地圖等等便民網(wǎng)站,使用戶能感受到系統(tǒng)設計的體貼入微與真情真切。

3.2軟件的結構設計該系統(tǒng)包含如下子系統(tǒng):用戶系統(tǒng),登陸注冊系統(tǒng),旅游信息查詢系統(tǒng),時間軸展示系統(tǒng),火車票票務查詢系統(tǒng),BBS論壇系統(tǒng)。3.1用戶系統(tǒng):用戶可以通過郵箱注冊,來獲取網(wǎng)站的用戶名密碼。同時在注冊過程中,會有郵件發(fā)送的驗證碼,與后臺定時器,來控制驗證碼的輸入時間,初始化密碼為666666,登陸后可以根據(jù)需求進行操作,可改變用戶信息與密碼。忘記密碼功能會將密碼發(fā)送到的郵箱上,一個郵箱只能注冊一次,激活一次。通過郵箱的唯一性來控制賬戶的正確性與唯一性。3.2景點信息系統(tǒng):用戶可以通過城市名進行查詢景點列表與景點詳情,網(wǎng)站提供了景點圖片與景點詳情介紹,人們可以通過景點信息去了解自己想去要的景點,也可以選擇自己喜歡的景點。使用了好數(shù)據(jù)網(wǎng)站提供的網(wǎng)絡api。3.3火車站票務系統(tǒng):仿12306的票務查詢系統(tǒng),通過火車站與出發(fā)時間,給出實時的火車票務完整信息,使用戶能更好的更自主的安排自己的出發(fā)時間,靈活是該網(wǎng)站開發(fā)的主題。3.4 時間軸系統(tǒng):仿QQ空間的時間軸,提供圖片上傳與預覽功能,使用戶可以將美好的回憶留在云上。在未來的某天可以看著自己當時的樣子,回憶那是的青春歲月。時間總是在走,我們可以停下,駐足看看身后的美妙時光。3.5BBS交流系統(tǒng):仿百度論壇設計的簡易的BBS論壇,提供用戶自由交流的機會,人們可以在里面暢所欲言,找尋志同道合的人們,一起開始下一段美妙的旅途。交流時這個旅游信息網(wǎng)站的主旨,在這個在宅文化占據(jù)青少年的大部分精神追求的時代,我希望通過這個網(wǎng)站能使更多的人走出家門,看看這個世界,美好的東西只有發(fā)現(xiàn)才有價值。而你正是那個發(fā)現(xiàn)無限價值的人。3.6提供友情鏈接:使用戶能方便的到達相關站點,例如酒店旅店的預定網(wǎng)站,天氣查詢網(wǎng)站,百度地圖等等便民網(wǎng)站,使用戶能感受到系統(tǒng)設計的體貼入微與真情真切。

3.3軟件的界面設計軟件的界面影響著軟件功能的實現(xiàn)和用戶的體驗,因此,對軟件中的界面做出如下具體設計:登陸界面:注冊界面:菜單界面:城市查詢界面:火車票查詢界面:個人信息界面:時間軸系統(tǒng)顯示界面時間軸新增界面論壇列表界面:帖子詳情查看界面:帖子回復界面:帖子新增界面:3.4軟件的數(shù)據(jù)庫設計為了保證軟件功能的正常運行,應該保存的數(shù)據(jù)信息有:根據(jù)以上數(shù)據(jù)需求分析,得出以下實體:1、城市實體因所使用的景點查詢資料為好數(shù)據(jù)網(wǎng)站API提供,所以根據(jù)API提供的數(shù)據(jù)接口設計城市實體: /**主鍵ID*/ privateLongid; /**城市ID*/ privateLongcityId; /**城市名稱*/ privateStringcityName; /**省份ID*/ privateLongprovinceId;數(shù)據(jù)庫城市表生成數(shù)據(jù)庫語句:CREATETABLEIFNOTEXISTS"city"( "id"bigserialNOTNULLPRIMARYKEY, "city_id"bigintNULL, "city_name"varcharNULL, "province_id"bigintNULL, "creator"varcharNULL, "create_date"timestampNULL, "mender"varcharNULL, "update_date"timestampNULL, "flag"intNULL)2、信息實體 /**主鍵ID*/ privateLongid; /**信息實體*/ privateStringmsg; /**發(fā)送者ID*/ privateLongfromId; /**接受者ID*/ privateLongtoId; /**父級信息主鍵ID*/privateLongparentId;數(shù)據(jù)庫信息表生成數(shù)據(jù)庫語句:CREATETABLEIFNOTEXISTS"message"( "id"bigserialNOTNULLPRIMARYKEY, "msg"varcharNULL, "from"bigintNULL, "to"bigintNULL, "parent_id"bigintNULL, "creator"varcharNULL, "mender"varcharNULL, "create_date"timestampNULL, "update_date"timestampNULL, "flag"intNULL)用戶信息實體/**主鍵id*/ privateLongid; /**用戶密碼*/ privateStringpassword; /**用戶昵稱*/ privateStringuserName; /**賬戶狀態(tài)*/ privateStringstatus; /**賬戶驗證碼*/ privateStringsecurity; /**注冊郵箱*/ privateStringemail; /**賬戶激活碼*/privateStringactivation;數(shù)據(jù)庫用戶信息表生成數(shù)據(jù)庫語句:CREATETABLEIFNOTEXISTS"meta_user"( "id"bigserialNOTNULLPRIMARYKEY, "password"varcharNULL, "user_name"varcharNULL, "status"varcharNULL, "security"varcharNULL, "email"varcharNULL, "creator"varcharNULL, "create_date"timestampNULL, "mender"varcharNULL, "update_date"timestampNULL, "flag"intNULL)4、我的消息主體: /**主鍵ID*/ privateLongid; /**消息發(fā)送者ID*/ privateLongtoId; /**消息接受者ID*/ privateLongfromId; /**消息主體*/ privateStringmsg; /**發(fā)送時間*/ privateDateremindDate; /**發(fā)送狀態(tài),表示是否已接受*/ privateStringstatus;數(shù)據(jù)庫我的消息表生成數(shù)據(jù)庫語句:CREATETABLEIFNOTEXISTS"remind"( "id"bigserialNOTNULLPRIMARYKEY, "to_id"bigintNULL, "from_id"bigintNULL, "msg"varcharNULL, "remind_date"timestampNULL, "status"varcharNULL, "create_date"timestampNULL, "creator"varcharNULL, "mender"varcharNULL, "update_date"timestampNULL, "flag"intNULL)火車站實體: /**主鍵id*/ privateLongid; /**火車站站名*/ privateStringstationName; /**火車站明文簡碼*/ privateStringstationShort; /**火車站所在城市名*/ privateStringcityName;數(shù)據(jù)庫火車站表生成數(shù)據(jù)庫語句:CREATETABLEIFNOTEXISTS"station"( "id"bigserialNOTNULLPRIMARYKEY, "station_name"varcharNULL, "station_short"varcharNULL, "creator"varcharNULL, "create_date"timestampNULL, "mender"varcharNULL, "update_date"timestampNULL, "flag"intNULL, "city_name"varcharNULL)時間軸實體:/**主鍵id*/ privateLongid; /**時間軸上傳照片服務器鏈接*/ privateStringurl; /**時間軸心情記錄信息*/privateStringmsg;數(shù)據(jù)庫時間軸表生成數(shù)據(jù)庫語句:CREATETABLEIFNOTEXISTS"timeline"( "id"bigserialNOTNULLPRIMARYKEY, "url"varcharNULL, "msg"varcharNULL, "creator"varcharNULL, "mender"varcharNULL, "update_date"timestampNULL, "create_date"timestampNULL, "flag"intNULL)《旅游信息網(wǎng)站系統(tǒng)》開發(fā)的實現(xiàn)4.1網(wǎng)絡請求程序publicclassHttpRequestUtil{ /***向指定URL發(fā)送GET方法的請求**@paramurl*發(fā)送請求的URL*@paramparam*請求參數(shù),請求參數(shù)應該是name1=value1&name2=value2的形式。*@returnURL所代表遠程資源的響應結果*/publicstaticStringsendGet(Stringurl,Stringparam){Stringresult="";BufferedReaderin=null;try{StringurlNameString=url+"?"+param;URLrealUrl=newURL(urlNameString);//打開和URL之間的連接URLConnectionconnection=realUrl.openConnection();//設置通用的請求屬性connection.setRequestProperty("accept","*/*");connection.setRequestProperty("connection","Keep-Alive");connection.setRequestProperty("user-agent","Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1)");//建立實際的連接connection.connect();//獲取所有響應頭字段Map<String,List<String>>map=connection.getHeaderFields();//遍歷所有的響應頭字段for(Stringkey:map.keySet()){System.out.println(key+">"+map.get(key));}//定義BufferedReader輸入流來讀取URL的響應in=newBufferedReader(newInputStreamReader(connection.getInputStream()));Stringline;while((line=in.readLine())!=null){result+=line;}}catch(Exceptione){System.out.println("發(fā)送GET請求出現(xiàn)異常!"+e);e.printStackTrace();}//使用finally塊來關閉輸入流finally{try{if(in!=null){in.close();}}catch(Exceptione2){e2.printStackTrace();}}returnresult;}/***向指定URL發(fā)送POST方法的請求**@paramurl*發(fā)送請求的URL*@paramparam*請求參數(shù),請求參數(shù)應該是name1=value1&name2=value2的形式。*@return所代表遠程資源的響應結果*/publicstaticStringsendPost(Stringurl,Stringparam){PrintWriterout=null;BufferedReaderin=null;Stringresult="";try{URLrealUrl=newURL(url);//打開和URL之間的連接URLConnectionconn=realUrl.openConnection();//設置通用的請求屬性conn.setRequestProperty("accept","*/*");conn.setRequestProperty("connection","Keep-Alive");conn.setRequestProperty("user-agent","Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1)");//發(fā)送POST請求必須設置如下兩行conn.setDoOutput(true);conn.setDoInput(true);//獲取URLConnection對象對應的輸出流out=newPrintWriter(conn.getOutputStream());//發(fā)送請求參數(shù)out.print(param);//flush輸出流的緩沖out.flush();//定義BufferedReader輸入流來讀取URL的響應in=newBufferedReader(newInputStreamReader(conn.getInputStream()));Stringline;while((line=in.readLine())!=null){result+=line;}}catch(Exceptione){System.out.println("發(fā)送POST請求出現(xiàn)異常!"+e);e.printStackTrace();}//使用finally塊來關閉輸出流、輸入流finally{try{if(out!=null){out.close();}if(in!=null){in.close();}}catch(IOExceptionex){ex.printStackTrace();}}returnresult;}}4.2登陸注冊系統(tǒng)@Service("loginBizService")@TransactionalpublicclassLoginBizServiceImplimplementsLoginBizService{ publicclasstime{ privateTimertimer=newTimer(); privateintminutes; privateLongid; publictime(intminutes,Longid){ this.minutes=minutes; this.id=id; } publicvoidstart(){ timer.schedule(newTimerTask(){ @Override publicvoidrun(){ playSound(); timer.cancel(); } privatevoidplaySound(){ List<ColumnObject>update=newArrayList<ColumnObject>(); ColumnObjectcol=newColumnObject(); col.setType("where"); col.setName("id"); col.setValue(id); update.add(col); update.add(newColumnObject("activation",null)); BeanUtils.convertColumnObjectListDate(newMetaUser(),GlobalDefine.STR_DATA_FORMAT,update); ServiceUtil.callRestfulAPI(ServiceUtil.Vulture_Service+"/userinfo",JSonUtils.toJSon(update),RequestMethod.PUT); } },minutes*60*1000); } } //register @Override publicMap<String,Object>register(MetaUseru){ Map<String,Object>resultMap=newHashMap<String,Object>(); //是否已注冊 MetaUserregister=getUser(u.getEmail()); if(register==null){ //注冊 Map<String,Object>map=ServiceUtil.callRestfulAPI(ServiceUtil.Vulture_Service+"/userinfo",JSonUtils.toJSon(u),RequestMethod.POST); resultMap=map; }elseif("open".equals(register.getStatus())){ //返回錯誤碼 resultMap.clear(); resultMap=ErrorCode.setErrorToMap(resultMap,ErrorDefine.UserMgmt.ACOUNT_ISACTIVATION_CODE, ErrorDefine.UserMgmt.ACOUNT_ISACTIVATION_MSG,null); }else{ //返回錯誤碼 resultMap.clear(); resultMap=ErrorCode.setErrorToMap(resultMap,ErrorDefine.UserMgmt.ACOUNT_ISNOTACTIVATION_CODE, ErrorDefine.UserMgmt.ACOUNT_ISNOTACTIVATION_MSG,null); } returnresultMap; } @Override publicMap<String,Object>forgetPassword(MetaUseru){ Map<String,Object>resultMap=newHashMap<String,Object>(); MetaUsers=getUser(u.getEmail()); if(isActivated(s)){ ApplicationMailer.send_email(u.getEmail(),"密碼",u.getPassword()); }else{ //賬戶未激活 resultMap.clear(); resultMap=ErrorCode.setErrorToMap(resultMap,ErrorDefine.UserMgmt.ACOUNT_ISNOTACTIVATION_CODE, ErrorDefine.UserMgmt.ACOUNT_ISNOTACTIVATION_MSG,null); } returnresultMap; } publicMetaUsergetUser(Stringemail){ MetaUserregister=newMetaUser(); register.setEmail(email); Map<String,Object>is=ServiceUtil.callRestfulAPI(ServiceUtil.Vulture_Service+"/userinfo/find",JSonUtils.toJSon(register),RequestMethod.POST); ArrayList<MetaUser>list=JSonUtils.readValue(JSonUtils.toJSon(is.get(GlobalDefine.DATA)),ArrayList.class,MetaUser.class); if(list!=null&&list.size()==1){ register=list.get(0); }else{ register=null; } returnregister; } //賬戶是否啟用 publicbooleanisActivated(MetaUseru){ booleanactivate=false; //賬號是否已啟用 if(u!=null&&"open".equals(u.getStatus())){ activate=true; } returnactivate; } @Override publicMap<String,Object>getSecurity(MetaUseru){ Map<String,Object>resultMap=newHashMap<String,Object>(); MetaUsers=getUser(u.getEmail()); if(s==null){ resultMap.clear(); resultMap=ErrorCode.setErrorToMap(resultMap,ErrorDefine.UserMgmt.ACOUNT_NOTEXISTED_CODE, ErrorDefine.UserMgmt.ACOUNT_NOTEXISTED_MSG,null); }elseif(isActivated(s)){ //該賬戶已激活 resultMap.clear(); resultMap=ErrorCode.setErrorToMap(resultMap,ErrorDefine.UserMgmt.USEREMAIL_EXISTED_CODE, ErrorDefine.UserMgmt.USEREMAIL_EXISTED_MSG,null); }else{ resultMap=security(u,"驗證碼"); if(resultMap.get("key")!=null){ //update List<ColumnObject>update=newArrayList<ColumnObject>(); ColumnObjectid=newColumnObject(); id.setType("where"); id.setName("id"); id.setValue(s.getId()); update.add(id); update.add(newColumnObject("activation",resultMap.get("key"))); BeanUtils.convertColumnObjectListDate(newMetaUser(),GlobalDefine.STR_DATA_FORMAT,update); //修改狀態(tài)將密碼update resultMap=ServiceUtil.callRestfulAPI(ServiceUtil.Vulture_Service+"/userinfo",JSonUtils.toJSon(update),RequestMethod.PUT); timet=newtime(5,s.getId()); t.start(); } } returnresultMap; } publicMap<String,Object>security(MetaUseru,Stringtype){ Map<String,Object>resultMap=newHashMap<String,Object>(); //生成驗證碼 Stringsecurity=RandomUtil.getRandomString(6); //發(fā)送驗證碼 try{ ApplicationMailer.send_email(u.getEmail(),type,security); resultMap.put("key",security); }catch(Exceptione){ resultMap.clear(); resultMap=ErrorCode.setErrorToMap(resultMap,ErrorDefine.UserMgmt.SECURITY_SENDERROR_CODE, ErrorDefine.UserMgmt.SECURITY_SENDERROR_MSG,null); } returnresultMap; } @Override publicMap<String,Object>Login(MetaUseru){ Map<String,Object>resultMap=newHashMap<String,Object>(); MetaUsers=getUser(u.getEmail()); if(isActivated(s)){ if(u.getPassword().equals(s.getPassword())||("666666".equals(u.getPassword()))&&s.getPassword()==null){ //登陸成功 resultMap.put(GlobalDefine.RESULT,GlobalDefine.SUCCESS); resultMap.put(GlobalDefine.DATA,s); }else{ //密碼錯誤或賬戶錯誤 resultMap.clear(); resultMap=ErrorCode.setErrorToMap(resultMap,ErrorDefine.UserMgmt.PASSWORD_ISERROR_CODE, ErrorDefine.UserMgmt.PASSWORD_ISERROR_MSG,null); } }else{ //此賬號未啟用 resultMap.clear(); resultMap=ErrorCode.setErrorToMap(resultMap,ErrorDefine.UserMgmt.ACOUNT_ISNOTACTIVATION_CODE, ErrorDefine.UserMgmt.ACOUNT_ISNOTACTIVATION_MSG,null); } returnresultMap; } @Override publicMap<String,Object>toOpen(MetaUseru){ Map<String,Object>resultMap=newHashMap<String,Object>(); MetaUsers=getUser(u.getEmail()); if(!isActivated(s)){ //全小寫比較 if(u.getActivation().toLowerCase().equals(s.getActivation().toLowerCase())){ //激活成功 List<ColumnObject>update=newArrayList<ColumnObject>(); ColumnObjectid=newColumnObject(); id.setType("where"); id.setName("id"); id.setValue(s.getId()); update.add(id); update.add(newColumnObject("status","open")); BeanUtils.convertColumnObjectListDate(newMetaUser(),GlobalDefine.STR_DATA_FORMAT,update); //修改狀態(tài)將密碼update resultMap=ServiceUtil.callRestfulAPI(ServiceUtil.Vulture_Service+"/userinfo",JSonUtils.toJSon(update),RequestMethod.PUT); ApplicationMailer.send_email(u.getEmail(),"激活成功","默認密碼為:'666666'"); }else{ //激活碼錯誤 resultMap.clear(); resultMap=ErrorCode.setErrorToMap(resultMap,ErrorDefine.UserMgmt.ACTIVATION_ISERROR_CODE, ErrorDefine.UserMgmt.ACTIVATION_ISERROR_MSG,null); } }else{ //此賬號已激活 resultMap.clear(); resultMap=ErrorCode.setErrorToMap(resultMap,ErrorDefine.UserMgmt.ACOUNT_ISACTIVATION_CODE, ErrorDefine.UserMgmt.ACOUNT_ISACTIVATION_MSG,null); } returnresultMap; }}4.3圖片上傳程序 @RequestMapping(value="/add",method=RequestMethod.POST) public@ResponseBodyMap<String,Object>add(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException{ //創(chuàng)建一個通用的多部分解析器. Map<String,Object>map=newHashMap<String,Object>(); CommonsMultipartResolvercommonsMultipartResolver=newCommonsMultipartResolver( request.getSession().getServletContext()); commonsMultipartResolver.setDefaultEncoding("utf-8"); if(commonsMultipartResolver.isMultipart(request)){ //轉換成多部分request MultipartHttpServletRequestmultipartRequest=(MultipartHttpServletRequest)request; /**得到文件保存目錄的真實路徑**/ MultipartFilemultipartFile=multipartRequest.getFile("file"); /**拼成完整的文件保存路徑加文件**/ Stringpath=request.getSession().getServletContext().getRealPath("/file"); Filep=newFile(path); if(!p.exists()&&!p.isDirectory()){ p.mkdir(); } Stringname=newDate().getTime()+multipartFile.getOriginalFilename(); Filefile=newFile(path+"/"+name); try{ multipartFile.transferTo(file); }catch(IllegalStateExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace(); } map.put(GlobalDefine.DATA,ServiceUtil.fileUrl+file.getName()); } returnmap; } //文件下載 @RequestMapping(value="/download",method=RequestMethod.POST) @ResponseBody publicvoiddownload(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException{ StringparamString=ServiceUtil.inputStream2String(request.getInputStream()); @SuppressWarnings("unchecked") Map<String,Object>map=JSonUtils.readValue(paramString,Map.class); Stringuri=map.get("targetUri").toString(); //下載文件路徑 StringfilePath="f://"+uri.substring(uri.lastIndexOf("\\")); downloadExistsFile(request,response,filePath,map.get("name").toString(),Long.valueOf(map.get("size").toString()),map.get("type").toString()); } /***下載服務器已存在的文件**@paramrequest*@paramresponse*@paramproposeFile*@throwsIOException*@throwsFileNotFoundException*/ privatevoiddownloadExistsFile(HttpServletRequestrequest,HttpServletResponseresponse,StringfilePath,StringfileName,LongfSize,Stringtype)throwsIOException,FileNotFoundException{ //下載response.setContentType("text/plain");StringisoFileName=fileName;response.setHeader("Accept-Ranges","bytes");response.setHeader("Content-Length",String.valueOf(fSize));response.setHeader("Content-Disposition","filename="+isoFileName+"."+type);longpos=0;if(null!=request.getHeader("Range")){//斷點續(xù)傳response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT);try{pos=Long.parseLong(request.getHeader("Range").replaceAll("bytes=","").replaceAll("-",""));}catch(NumberFormatExceptione){//log.error(request.getHeader("Range")+"isnotNumber!");pos=0;}}ServletOutputStreamout=response.getOutputStream();BufferedOutputStreambufferOut=newBufferedOutputStream(out);InputStreaminputStream=newFileInputStream(filePath);StringcontentRange=newStringBuffer("bytes").append(newLong(pos).toString()).append("-").append(newLong(fSize-1).toString()).append("/").append(newLong(fSize).toString()).toString();response.setHeader("Content-Range",contentRange);//log.debug("Content-Range",contentRange);inputStream.skip(pos);byte[]buffer=newbyte[5*1024];intlength=0;while((length=inputStream.read(buffer,0,buffer.length))!=-1){bufferOut.write(buffer,0,length);} bufferOut.flush();bufferOut.close();out.close();inputStream.close();response.flushBuffer();}4.4注冊碼生成publicstaticStringgetRandomString(intlength){//length表示生成字符串的長度 Stringbase="abcdefghijklmnopqrstuvwxyz0123456789"; Randomrandom=newRandom(); StringBuffersb=newStringBuffer(); for(inti=0;i<length;i++){ intnumber=random.nextInt(base.length()); sb.append(base.charAt(number)); } returnsb.toString(); }4.5qq郵箱郵件發(fā)送publicstaticvoidsend_email(Stringto_Email,Stringsubject, Stringcontent){ try{ Propertiesproperties=newProperties(); properties.put("mail.smtp.host",""); properties.put("mail.smtp.port",587); properties.put("mail.smtp.auth",true); properties.put("mail.smtp.starttls.enable","true"); Authenticatorauthenticator=newEmail_Authenticator( BASE64MailboxEncoder.encode("xysg0120@"), BASE64MailboxEncoder.encode("ntcsqttigbblbbia")); SessionsendMailSession=Session.getDefaultInstance(properties, authenticator); sendMailSession.setDebug(false); MimeMessagemailMassage=newMimeMessage(sendMailSession); mailMassage.setFrom("xysg0120@"); mailMassage.setRecipient(Message.RecipientType.TO, newInternetAddress(to_Email)); mailMassage.setSubject(subject,"UTF-8"); mailMassage.setContent(content,"text/html;charset=utf-8"); mailMassage.setSentDate(newDate()); Transport.send(mailMassage); }catch(AddressExceptione){ }catch(MessagingExceptione){ } }4.6restfulf請求分流 @SuppressWarnings("unchecked") @Log(operationType="callAPI",operationName="callRestfulAPI") publicstaticMap<String,Object>callRestfulAPI(Stringurl, StringparamString,RequestMethodrequestMethod){ Map<String,Object>resultMap=newHashMap<String,Object>(); StringreturnValue=""; try{ WebResourcewebResource=HttpUtil.getWebResour

溫馨提示

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

評論

0/150

提交評論