




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
PAGE28PAGE8基于Java的景區(qū)酒店網(wǎng)站的設計與開發(fā)摘要本項目基于Java語言,HTML和CSS,完成景區(qū)酒店網(wǎng)站的設計與開發(fā)。使用多種架構簡化開發(fā)成本。網(wǎng)站頁面部分主要運用HTML5完成主要頁面部署,并使用CSS美化頁面,JavaScript實現(xiàn)頁面的動態(tài)效果,后由boottraps架構美化頁面使其更使人瀏覽網(wǎng)站時舒心暢快。后端部分主要是運用Servlet接受并處理頁面發(fā)到服務器的數(shù)據(jù),并用request響應網(wǎng)頁。與數(shù)據(jù)庫的交互是運用java語言的JDBC鏈接數(shù)據(jù)庫并讀寫數(shù)據(jù)庫中的數(shù)據(jù),并且在多線程的基礎上,使用鎖來保證數(shù)據(jù)交互的無錯誤和保險性。本項目核心思想是建立在前后端分離的基礎上,客戶端和服務器端的交互一方面運用Servlet服務,另一方面通過AJAX調(diào)用后端的API,使用Json數(shù)據(jù)在客戶端和服務端交互。設計思想便是網(wǎng)站頁面展示酒店的風采,服務器端保證數(shù)據(jù)交互的快速與穩(wěn)定。關鍵詞HTML;bootstraps;Servlet;Java;json;Jquery;數(shù)據(jù)庫1緒論1.1課題研究現(xiàn)狀由近幾年的現(xiàn)狀看,酒店網(wǎng)站開發(fā)在網(wǎng)站內(nèi)容上,以內(nèi)容和結構為主抓點,安全性能和網(wǎng)上服務為重點,并要樹立品牌效應。在網(wǎng)站結構和開發(fā)上:前后端分離,進行解耦。一個Web項目分為兩個項目,前端項目和后端項目,兩者互不打擾。前端項目按標椎框架開發(fā)前端頁面,后端項目按標準編寫接口代碼,使用編寫好的框架節(jié)約開發(fā)成本。核心思想是前端通過AJAX調(diào)用后端的工具開發(fā)包,使Json數(shù)據(jù)交互。這種開發(fā)模式,控制層和一部分業(yè)務邏輯處理也被認為是前端的一部分,后端負責模型層,業(yè)務處理層和數(shù)據(jù)庫訪問等。1.2研究意義探究前后端各自獨到的特點和不同,研究客戶端與服務器之間數(shù)據(jù)交互的方式,比如客戶端通過form表單發(fā)送數(shù)據(jù)給服務器,通過Servlet接受并處理數(shù)據(jù),最后request添加響應消息給與客戶端響應。對于服務器與數(shù)據(jù)庫之間的訪問方面,怎樣避免數(shù)據(jù)存取過程中的沖突和數(shù)據(jù)滯后也有研究意義。本項目涵蓋前后端各個方面,要考慮的因素包括:前端頁面的動態(tài)顯示,后端服務器代碼的耦合度,前后端數(shù)據(jù)交互的便捷和快速性,數(shù)據(jù)庫訪問的安全性等等,這些因素對于一個人的綜合素養(yǎng)和提高有著很大的幫助。2設計簡介本項目網(wǎng)站分為三部分,第一部分為客戶端頁面展示層和部分業(yè)務邏輯處理;第二部分為模型層,業(yè)務處理層和數(shù)據(jù)庫訪問;第三部分為數(shù)據(jù)庫。第一部分:客戶端頁面展示層為用戶展示直觀明確的各個頁面,用戶可以通過瀏覽器直觀的看到網(wǎng)站的各個頁面的內(nèi)容,了解各個頁面的功能,能夠快速的找到意愿所對應的頁面,從而完成業(yè)務交付。部分業(yè)務邏輯處理通過JavaScript腳本簡單處理用戶交付的數(shù)據(jù),并對服務器發(fā)出請求。第二部分:后端服務器的核心部分,模型層內(nèi)代碼封裝了各個對象和各種工具,使業(yè)務處理層能夠輕松封裝數(shù)據(jù),處理數(shù)據(jù)和發(fā)送數(shù)據(jù);業(yè)務處理層對客戶端發(fā)來的請求進行獲取,并封裝數(shù)據(jù)在對象中,處理后進行數(shù)據(jù)庫訪問,進行數(shù)據(jù)存取后對客戶端發(fā)出響應。第三部分:數(shù)據(jù)庫的存在是本項目至關重要的一層,進行數(shù)據(jù)的存放和處理。網(wǎng)站項目網(wǎng)站項目模型層,業(yè)務處理層,數(shù)據(jù)庫訪問頁面展示層,邏輯處理數(shù)據(jù)庫圖2-1網(wǎng)站設計-實景時現(xiàn)模塊本項目的數(shù)據(jù)交互關系有:客戶端與服務器的數(shù)據(jù)交互、服務器與數(shù)據(jù)庫的數(shù)據(jù)交互。客戶端與服務器端的數(shù)據(jù)交互采用兩種方式:第一種是客戶端發(fā)送form表單給服務器,啟用Servlet服務,服務器處理數(shù)據(jù)后給客戶端返回響應;第二種是JavaScript腳本獲取客戶端的數(shù)據(jù),通過AJAX與服務器進行少量數(shù)據(jù)交換,在不重新加載整個頁面的情況下,對網(wǎng)頁進行部分更新。這部分與JavaScript的JSON對象表示法相結合使之能與服務器進行較大的數(shù)據(jù)交換。服務器與數(shù)據(jù)庫的數(shù)據(jù)交換便是使用Java的JDBC對數(shù)據(jù)庫進行連接,對相應的SQL語句進行封裝,與數(shù)據(jù)庫進行數(shù)據(jù)的存取、更新和查詢。因為數(shù)據(jù)庫連接是很珍貴的資源,所以為了節(jié)省鏈接資源和減輕服務器壓力,在數(shù)據(jù)庫連接階段使用C3P0數(shù)據(jù)庫連接池技術。在數(shù)據(jù)庫連接池在系統(tǒng)初始化的時候,連接池工廠對象將數(shù)據(jù)庫連接作為對象存儲在內(nèi)存中,當用戶需要訪問數(shù)據(jù)庫時,從連接池中取出一個已經(jīng)建立的空閑連接對象,而不是新建一個數(shù)據(jù)庫連接。使用完畢后,用戶不關閉連接,而是將數(shù)據(jù)庫連接對象放回連接池中。顯著提高整個應用程序的伸縮性(大大提高了連接數(shù)量)和健壯性(能夠應對大量用戶頻繁連接數(shù)據(jù)庫,減少系統(tǒng)資源的消耗),提高應用程序的性能指標。圖2-2網(wǎng)站設計-實景時現(xiàn)模塊3架構選擇3.1前端開發(fā)框架3.1.1HTML、CSS框架本項目采用Bootstrap架構,一種簡潔,直觀,強悍的HTML、CSS和JavaScript的前端開發(fā)框架。來開發(fā)PC和移動設備都能用的網(wǎng)站,此框架包含可用于全局的CSS樣式,組件和JavaScript插件。Bootstrap架構可以用來美化網(wǎng)站頁面,簡化腳本代碼量。3.1.2JQueryJQuery庫是JavaScript函數(shù)庫,能夠很方便獲取HTML元素,并對其進行設置內(nèi)容,HTML,屬性和CSS樣式。其中的事件能夠方便快捷的觸發(fā)按鈕或獲取焦點的操作,并且強大之處是能簡潔的添加JavaScript特效和動畫3.2后端開發(fā)框架3.2.1C3P0連接池在JDBC的基礎上,節(jié)約了數(shù)據(jù)庫的連接資源,實現(xiàn)連接的重復利用,省去了服務器的建立連接和消除連接的時間,使服務層訪問數(shù)據(jù)庫的速度更快。3.2.2Jackson處理JSON的高級類庫,可用于集合和類映射為JSON字符串,方便服務器發(fā)送給客戶端數(shù)據(jù)。4數(shù)據(jù)庫設計與搭建4.1數(shù)據(jù)庫設計數(shù)據(jù)庫主要是客房的信息及訂購者的信息,則表項有以下幾個:房間id,房間類型,價格,訂購者的姓名,電話,身份證號,性別,入住時間,退房時間。表4-1表項表項Roomidroomstylepricenametelidcardstartdateenddatesex類型intintintCharCharChardatedateint還有一個表用于存放需要車接車送的客戶信息,此表包含的表項有以下幾個:姓名,手機號,降落地點,居住地點,降落時間。表4-2表項表項Nameteljiangdijudijiangtime類型charcharcharcharchar4.2數(shù)據(jù)庫搭建下載MySQL安裝包,本項目選擇5.5.40版本,安裝完成后調(diào)用控制臺來進行MySQL操作:首先進入MySQL環(huán)境:在控制臺輸入mysql-u用戶名-p密碼;第二:新建數(shù)據(jù)庫,在控制臺輸入createdatebase數(shù)據(jù)庫名;第三:使用新建的數(shù)據(jù)庫,在控制臺輸入use數(shù)據(jù)庫名;第四:新建表5客戶端網(wǎng)站頁面設計5.1總體設計本項目前端頁面無需動態(tài)顯示的使用HTML頁面展示,需要后端數(shù)據(jù)動態(tài)顯示的使用JSP頁面展示。這樣考慮的原因是不需要后端數(shù)據(jù)支持的頁面用HTML靜態(tài)頁面展示能夠提高瀏覽器響應速度,不會占用太多的加載和緩沖時間,對于用戶的體驗有一個很好地效果;而所需后端數(shù)據(jù)動態(tài)加載的也能很快的響應后端數(shù)據(jù)。本項目網(wǎng)頁鏈接鏈是以主頁面為頭,可跳轉至次頁面,在通過次頁面跳轉至用戶所需提交數(shù)據(jù)的頁面。這樣的結構層次分明,對于用戶而言一眼便能清楚明了的掌握網(wǎng)站的結構,并很快的找到自己所要瀏覽的頁面。5.2主頁面前端頁面設計先寫出大體輪廓,定出頁面布局。后期再進行頁面的美化工作,使頁面更美觀,讓用戶有一個視覺體驗。首先主頁面開始要有一個div容器來加載酒店的logo圖片:<divclass="right"> <imgsrc="image/jiudian.jpg"alt="盤古谷大酒店.jpg"/> </div>其次定義一個容器裝載UL列表,在列表項中嵌套超鏈接,并使用CSS定義樣式定義UL樣式,LI樣式,超鏈接未點擊,獲取焦點和點擊后的樣式,來實現(xiàn)美觀的導航欄效果。圖5-1網(wǎng)站設計-實景時現(xiàn)模塊 下面添加查詢的一個form表單,form標簽用于為用戶輸入創(chuàng)建HTML表單,并根據(jù)點擊事件向服務器傳輸數(shù)據(jù),是用戶端與服務器端交互數(shù)據(jù)的一種常用方式。為form標簽定義一個特殊的class屬性值,方便后面定義CSS樣式,發(fā)送方式設為post,保證數(shù)據(jù)傳輸?shù)牟豢梢娦裕录O為專用的Servlet名。然后在form標簽中定義三個div容器。第一個裝載文字入住日期和一個輸入框;第二個裝載文字退房日期和一個輸入框;第三個裝載一個select列表供用戶選擇。最后定義一個button按鈕,類型設置為submit。中間便是可跳轉至風景,餐廳,客房和游樂頁面的四個展示欄。實現(xiàn)過程使用div容器分別裝載圖片和文字,設置圖片的寬高和大小,使圖片在一個適合的size展示。同時定義JavaScript預先裝載需要用到的動畫,使用特定的id標識,獲取焦點定義pcVideo,失去焦點定義mobileVideo方便使用。再在另一JavaScript中在展示欄獲取焦點時和失去焦點時獲取動畫,設置相應動畫的display屬性實現(xiàn)不同動畫效果。另外再在另一個JavaScript中編寫代碼設置文字部分獲取焦點時后面符號的動態(tài)移動效果,同時設置移動速度使視覺效果更舒適。頁尾便是網(wǎng)頁文字,使用div容器裝載段落文字,并在屬性中設置特殊id,在CSS文件中設置樣式,美化頁面:<divid="patop"class="container-fluidfont"> <p>版權所有?2005–2020,PanguCompanyPli.Ltd.保留所有權利</p> <p>Pangu隸屬于YunxiaoingdashisInc.,該集團是全球領先的在線旅游及相關服務供應商。</p> <p>KH-BHNEB-8C50</p></div>這樣頁面的大體布局便成型,后面的多個頁面大體布局都有首頁的頁頭logo,導航欄的頁尾文字,相應的不同只是中間的一部分。圖5-2主頁面5.3客房選擇頁面客房頁面與首頁的不同之處便在于網(wǎng)頁的中間部分需要動態(tài)顯示不同的客房信息,這部分動態(tài)效果使用JavaScript來實現(xiàn),因此只需編寫不同客房的按鈕和用于動態(tài)顯示的div容器。<div><h3>客房類型</h3></div> <div> <buttontype="button"class="btnbtn-successbtn-lgactive"id="small">小客房</button> </div><divid="kefang"class="kefang"></div>5.4訂購頁面訂購頁面與首頁的不同之處是網(wǎng)頁中間是用戶需要填寫的from表單,通過JavaScript進行簡單地數(shù)據(jù)邏輯判斷,無誤后發(fā)送給服務器。其中日期輸入框后期通過JavaScript動態(tài)加載日歷來選擇入住和退房日期。首先使用form標簽裝載我們需要用戶輸入的輸入框和一些label,定義role為form,事件為pay,發(fā)送方式為post,還有是否發(fā)送的判斷事件函數(shù)。第一個div容器裝載姓名和輸入框,輸入框name屬性定義為name,方便使用JavaScript判斷格式是否正確,預顯示文字為請輸入姓名。姓名label的for屬性和輸入框name屬性值一致,實現(xiàn)點擊label也能定義到輸入框輸入。第二個div容器裝載個人電話和輸入框,輸入框name屬性定義為tel。第三個div容器裝載身份證號和輸入框,輸入框name屬性定義為userid。第四個div容器裝載入住時間和輸入框,其中輸入框會調(diào)用JavaScript生成動態(tài)日歷供用戶選擇。第五個div容器裝載退房時間和輸入框。 最后的div容器裝載一個單選框,供用戶選擇性別信息。定義button用于提交form表單。5.5車接車送頁面車接車送頁面與前兩個頁面一樣,也是中間部分不同,由一個form表單記錄用戶的數(shù)據(jù)并發(fā)送給服務器。定義form標簽的發(fā)送方式為post,事件為Che。分別用四個div容器裝載降落地點,居住地點,到來時間和離開時間的輸入框,后定義button按鈕提交數(shù)據(jù)。此頁面的作用只是向服務器發(fā)送數(shù)據(jù),服務器接受數(shù)據(jù)并將數(shù)據(jù)存入數(shù)據(jù)庫。圖5-3訂購頁面5.6查詢頁面主頁面點擊查詢后跳轉到查詢頁面,因為預先不知道用戶查詢的客房類型,所以查詢展示依賴于服務器端發(fā)來的數(shù)據(jù),需要JavaScript接收數(shù)據(jù)動態(tài)顯示查詢結果,頁面中定義一個已有表頭的空表便足夠:<divclass="container-fluid"id="tablef"> <tableid="table"> <thead> <tr> <td>房型</td> <td>類型</td> <td>房號</td> <td>狀態(tài)</td> <td>備注</td> <td></td> </tr> </thead> <tbodyid="tables"> </tbody> </table> </div>5.7其他簡單頁面最新優(yōu)惠頁面的主要作用的給用戶傳達景區(qū)當前的優(yōu)惠政策和酒店的折扣,不需要多余的東西,只需要用div容器來存放近期所有的優(yōu)惠活動的海報即可。酒店信息頁面是用來讓客戶了解酒店的發(fā)展歷史,此頁面文字居多,所以布局注重文字環(huán)繞圖片的方式,主要效果在后期美化工作中完成。運營團隊頁面是用來介紹酒店的運營,也是以文字居多,放在后期美化工作中。6客戶端網(wǎng)站頁面腳本6.1架構搭建從網(wǎng)上下載jQuery插件庫,本項目使用3.2.1版本的min版,把jQuery-3.2.1.min.js文件復制到項目根目錄。6.2動態(tài)日歷由于自己寫的日歷不美觀,所以借用網(wǎng)上的美化版的日歷,將日歷腳本文件導入項目,為輸入框設置腳本文件的id值和name值,為頁面添加腳本文件,并設置日歷的格式和最大年份和最小年份。<scriptsrc="js/datedropper.min.js"></script><script>$("#endpickdate").dateDropper({animate:false,format:'Y-m-d',minYear:'2020',maxYear:'2022'});</script>圖6-1動態(tài)日歷6.3客房交替用戶點擊不同的客房按鈕,底下相應的加載不同的房間信息,JavaScript主要代碼如下:$("#small").click(function(){ $(this).attr("class","btnbtn-successbtn-lgactive"); $(this).siblings().attr("class","btnbtn-defaultbtn-lgactive"); $(".kefangdiv").find("img").attr({"alt":"小客房.jpg","src":"image/viu_smallroom.jpg"}); $("h3#single").html("小客房<span>單人床</span>"); $("h3#biao").html("小客房<span>標間</span>"); $("h3#double").html("小客房<span>雙人床</span>"); $("h3").children().attr("class","labellabel-info"); $("h4#single").text("¥100"); $("h4#biao").text("¥150"); $("h4#double").text("¥200");JavaScript腳本實現(xiàn)切換不同的酒店客房信息,其中更高級的淡入淡出動畫在美化工作中實現(xiàn)。圖6-2客房交替6.4訂購信息查錯用戶在訂購頁面填寫信息完畢,提交時會簡單判斷用戶所填寫的信息是否符合規(guī)范,避免錯誤的信息被寫入數(shù)據(jù)庫,造成線下工作出現(xiàn)差錯。主要代碼是使用jQuery語法獲取元素值,對其簡單判斷。如果沒有錯誤,數(shù)據(jù)提交給服務器端;否則彈出警告框并標明相應的錯誤位置。6.5查詢顯示要實現(xiàn)動態(tài)顯示查詢結果就要接受服務器端傳來的數(shù)據(jù),因為查詢操作返回的數(shù)據(jù)比較大,因此服務器端會把結果封裝在對象中,再把對象裝入list集合,并轉換成JSON字符串。使JavaScript能夠獲取并解析為JSON對象,從而加載數(shù)據(jù)實現(xiàn)動態(tài)顯示。在JavaScript獲取數(shù)據(jù)之前,需要頁面提供一個中轉站暫存數(shù)據(jù),所以要寫一個隱藏的文本域暫存。圖6-3查詢檢錯<%Stringparam=(String)request.getAttribute("lists");%><textarearows="200"cols="120"id="idTest"><%=param%></textarea>JavaScript中編寫數(shù)據(jù)處理代碼,對表格的body部分進行插入行,并設置訂購按鈕的點擊事件,將房號和類型存入本地存儲區(qū),方便支付頁面獲?。簐arlists=$.parseJSON($("#idTest").val());for(vari=0;i<lists.length;i++){ $("#tables").append("<tr><tdclass=\"style1\">"+lists[i].style+"</td><tdclass=\"style2\">"+lists[i].stylee+"</td><tdclass=\"idcode\">"+lists[i].id+"</td><td>空閑</td><td></td><td>"+ "<ahref=\"Pay.html\"class=\"btnbtn-defaultbtn-lgactive\"role=\"button\">訂購</a></td></tr>"); } $("#table").attr("class","tabletable-hover"); $("a").click(function(){ varidd=$(this).siblings("td.idcode").text(); varstyle=$(this).siblings("td.style1").text()+""+$(this).siblings("td.style2").text(); localStorage.setItem('style',style); localStorage.setItem('id',idd); });圖6-4查詢顯示7服務器端基礎對象類7.1客房信息類Roominfo類對應數(shù)據(jù)庫配置客房表定義對象屬性,屬性包括房間號,房間類型,房間價格,用戶姓名,用戶電話,用戶身份證號,用戶性別,入住時間,退房時間。入住時間和退房時間考慮到Java中的date對象格式與數(shù)據(jù)庫中的不同,因此定義為字符串類型,其支付頁面輸入日期格式與數(shù)據(jù)庫格式一致因此省去了格式轉換的步驟。為屬性配置get和set方法方便寫入數(shù)據(jù)庫是獲取屬性的值,接著Roominfo對象的屬性賦值我們選用構造函數(shù)一次性賦值。publicRoominfo(Stringname,Stringtel,Stringuserid,intsex,introomstyle,introomprice,Stringstartdata,Stringenddata,intid){ super(); =name; this.tel=tel; this.userid=userid; this.sex=sex; this.roomstyle=roomstyle; this.roomprice=roomprice; this.startdata=startdata; this.enddata=enddata; this.id=id; }7.2JSON相關對象類此對象類服務于JSON轉化工具類,其中的對象屬性對應于查詢頁面的表項。由于查詢頁面需要動態(tài)加載符合條件的房間號,房間類型,房間種類,其中可能已訂購的房間也符合條件,所以還有入住時間,退房時間和訂購信息。因為JSON對象的屬性值設置需要數(shù)據(jù)庫讀取的數(shù)據(jù),所以不適用構造函數(shù),使用get和set方法。8服務器端工具類8.1JDBC工具類JDBC工具類實現(xiàn)的主要功能是新建C3P0連接池,從連接池中獲取連接,返回給使用類。類外提供關閉connection,preparedstatement和結果集的靜態(tài)方法。在編寫之前先要配置C3P0的配置xml文件,配置代碼為:<default-config> <!--連接參數(shù)--> <propertyname="driverClass">com.mysql.jdbc.Driver</property> <propertyname="jdbcUrl">jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=UTF-8</property> <propertyname="user">root</property> <propertyname="password">151928</property> <!--初始化連接池參數(shù)--> <propertyname="initialPoolSize">10</property> <propertyname="maxIdleTime">30</property> <propertyname="maxPoolSize">20</property> <propertyname="minPoolSize">5</property> <propertyname="maxStatements">200</property></default-config>因為本項目使用的是MYSQL數(shù)據(jù)庫,而且考慮網(wǎng)站訪問量較大,因此再加一個配置: <named-configname="mysql"> <propertyname="acquireIncrement">50</property> <propertyname="initialPoolSize">100</property> <propertyname="minPoolSize">50</property> <propertyname="maxPoolSize">1000</property> <propertyname="maxStatements">0</property> <propertyname="maxStatementsPerConnection">5</property></named-config>配置完成后編寫連接的靜態(tài)方法:publicstaticConnectiongetConnection(){ Connectionconnection=null; DataSourcesa=newComboPooledDataSource("mysql"); try{ connection=sa.getConnection(); }catch(SQLExceptione){ //TODO自動生成的catch塊 e.printStackTrace(); } returnconnection; }關閉方法僅僅是判斷所關對象是否為空,不為空的話將對象關閉。8.2客房訂購寫入工具類此工具類服務于PayServlet服務類和FindServlet服務類,實現(xiàn)獲取數(shù)據(jù)庫連接,檢索符合條件的房間,選擇寫入信息或讀取信息,詳細代碼見附錄一。8.3查詢工具類此工具類將查詢出來的信息填入JSON對象,并將這些JSON對象封裝至list集合中,方便JSON轉化工具類將list集合轉化為JSON字符串。詳細代碼見附錄二。8.4客房類型工具類由于從前端傳過來的房間信息是字符串,所以需要重新判斷客房類型;另外從數(shù)據(jù)庫讀取的房間類型是一個編號,也需要重新判斷客房類型。前端到后端的客房類型判斷,只需要判斷字符串中的客房信息,根據(jù)客房信息轉化為數(shù)據(jù)庫中存取的客房類型編號。if(style.indexOf("小客房")>0){ if(style.indexOf("單人間")>0){ return1; }elseif(style.indexOf("標間")>0){ return2; }else{ return3; } }...而從后端到前端的客房類型轉化與上述相反,需要依據(jù)客房類型編號轉換為相應客房類型。publicstaticStringlistreturnstyle(intstylee){ switch(stylee%10){ case1: style="單人房"; break; } returnstyle; }publicstaticStringreturnstyle(intstyle){ Stringss=null; switch(style){ case1: ss="小客房"; break; } returnss;}8.5JSON轉化工具類JSON字符串的轉化本項目使用的是Jackson高級類庫,把jar包導入項目后,在JSON轉化工具類中編寫方法,運用ObjectMapper的內(nèi)置方法將list集合轉化為JSON字符串。privatestaticStringliString; publicstaticStringMapperReturn(List<Roominfo_findnull>list)throwsJsonProcessingException{ ObjectMapperobjectMapper=newObjectMapper(); liString=objectMapper.writeValueAsString(list); returnliString; }9服務器端服務類9.1訂購服務類PayServlet服務類繼承于HttpServlet,本項目的所有表單信息提交用的都是post方式因此代碼編寫在dopost方法內(nèi)。PayServlet服務類獲取前端傳來的各項數(shù)據(jù),并對他們進行簡單處理,然后封裝至Roominfo對象,調(diào)用客房訂購寫入工具類寫入數(shù)據(jù)庫,后跳轉至訂購成功(失?。╉撁妗V饕a如下:Roominforoominfo=newRoominfo(name,tel,userid,sex,style,price,startdate,enddate,id);//處理信息booleanissuccess=newRoominfoUtils().ServeInfo(roominfo);//判斷信息存儲是否成功,返回信息if(issuccess){ request.setAttribute("msg","訂購成功!"); request.getRequestDispatcher("success.jsp").forward(request,response); }else{ request.setAttribute("msg","訂購失敗!"); request.getRequestDispatcher("success.jsp").forward(request,response); }9.2查詢服務類FindServlet服務類也繼承于HttpServlet,在dopost方法內(nèi)獲取表單數(shù)據(jù),依據(jù)數(shù)據(jù)調(diào)用查詢工具類將查詢到的信息填入集合,在調(diào)用JSON轉化工具類將集合轉化為JSON字符串,然后發(fā)送給前端。主要代碼如下:Stringxing=FindUtils.returnstyle(style); List<Roominfo_findnull>list=FindUtils.findreturn(start,end,xing,style); StringliString=JsonUtils.MapperReturn(list); request.setAttribute("lists",liString); request.getRequestDispatcher("Find.jsp").forward(request,response);10數(shù)據(jù)訪問并發(fā)10.1線程池線程的創(chuàng)建和銷毀的開銷是巨大的,而通過線程池的重用大大減少了這些不必要的開銷,省下來的這部分時間程序可以做其他的工作,從而使線程執(zhí)行速度突飛猛進的提升。控制線程池的并發(fā)數(shù)可以有效的避免大量的線程池爭奪CPU資源而造成堵塞。在項目中創(chuàng)建ExextorsCreate類,創(chuàng)建方法返回創(chuàng)建ExecutorService接口的方法,代碼如下:staticExecutorServicenewFixedThreadPool=null; static{ newFixedThreadPool=Executors.newFixedThreadPool(100); } publicExecutorServicegExecutorService(){ returnnewFixedThreadPool;}10.2線程并發(fā)創(chuàng)建一個類定義訂購是的線程任務,并為訪問數(shù)據(jù)庫的代碼添加synchronized關鍵字,代碼如下:publicclassCustomerThreadimplementsRunnable{ publicRoominfoss; @Override //實現(xiàn)用戶訂購房間 publicvoidrun(){ //TODO自動生成的方法存根 newRoominfoUtils().ServeInfo(ss); } publicvoidsetroom(Roominfodd){ this.ss=dd;}}publicsynchronizedbooleanServeInfo(Roominforoominfo){...}參考文獻[1]王遠.品牌酒店自主銷售的動因與策略探討[J].河南財政稅務高等專科學校學報,2019,33(05):39-41.[2]趙倩.淺析酒店網(wǎng)絡營銷存在的問題與對策——以蘇州香格里拉大酒店為例[J].中外企業(yè)家,2019(03):74-75.[3]孟祥雙.前后端分離式WEB應用開發(fā)研究[J].電子元器件與信息技術,2019,3(06):40-43.[4]魏鋼.Web前后端分離模式下SpringMVC在高職JavaWeb教學中的研究[J].福建電腦,2019,35(02):107-108.[5]張艷.從網(wǎng)絡資源看湖南省旅游網(wǎng)站發(fā)展狀況[D].湖南大學,2010.[6]高慧.淺談Web前端開發(fā)技術以及優(yōu)化[J].中國信息化,2019(12):59-60.[7]王曉潔,秦冰峰.基于JQuery腳本庫的動態(tài)效果的設計與實現(xiàn)[J].新鄉(xiāng)學院學報,2019,36(12):23-26.[8]崔天鑫.Servlet監(jiān)聽器在基于移動Web在線考試系統(tǒng)中的應用[J].電腦編程技巧與維護,2019(10):51-53+82.[9]袁江琛.基于jQuery+Ajax的ECharts在成績統(tǒng)計中的實現(xiàn)[J].智能計算機與應用,2019,9(05):217-219+222.[10]劉卓華,冉瑞生.基于JSP模型的客戶管理系統(tǒng)設計與實現(xiàn)[J].電腦知識與技術,2019,15(18):64-67.[11]HautteSanderVanden,MoensPieter,HerwegenJoachimVan,PaepeDieterDe,SteenwinckelBram,VerstichelStijn,OngenaeFemke,HoeckeSofieVan.ADynamicDashboardingApplicationforFleetMonitoringUsingSemanticWebofThingsTechnologies.[J].Sensors(Basel,Switzerland),2020,20(4).DesignandDevelopmentofScenicspotHotelwebsitebasedonjavaXuYuQin(CollegeofPhysicsandElectronicInformation,DezhouUniversity,Dezhou,253023)AbstractThisprojectisbasedonjavalanguage,HTMLandCSS,tocompletethedesignanddevelopmentofthescenichotelwebsite.Usemultiplearchitecturestosimplifydevelopmentcosts.ThepagepartofthewebsitemainlyusesHTMLandcustomCSSstyletocompletethedeploymentofthemainpage,JavaScriptcompletesthedynamiceffectofthepage,andthentheboottrapsarchitecturebeautifiesthepagetomakepeoplefeelmorecomfortablewhenbrowsingthewebsite.Theback-endpartmainlyusesServlettoreceiveandprocessthedatasenttotheserver,andusesrequesttorespondtothewebpage.TheinteractionwiththedatabaseistousetheJDBCofJavalanguagetolinkthedatabaseandreadandwritethedatainthedatabase,andonthebasisofmultithreading,uselockstoensurethatthedatainteractioniserror-freeandsafe.Thecoreideaofthisprojectisbasedontheseparationoffrontandrearends.Ontheonehand,theinteractionbetweenclientandserverusesServletservices,ontheotherhand,jsondataexchangeisusedtocallback-endRestfulAPI,throughajax.Thedesignideaistoshowtheelegantdemeanorofthehotelonthewebsitepage,andtheserversideensuresthespeedandstabilityofdataexchange.KeywordsHTML;boottraps;Servlet;Java;json;Jquery;datebase致謝我歷時將近三個月時間終于把這篇論文寫完了,在這段不一樣的歷程中,帶給我的學生生涯很多的收獲和感悟。在論文的寫作過程中遇到了很多的技術問題和障礙,但是在老師和同學的幫助下順利度過。還要感謝網(wǎng)絡論壇上的各位技術人員,他們的技術貼給了我很多啟發(fā)和幫助,尤其要強烈感謝我的論文指導老師—王藍方老師,沒有他對我進行了不厭其煩的指導和幫助,無私的為我的論文提出指導意見,就沒有我這篇論文的最終完成。在此,我向指導和幫助過我的老師們表示最衷心的感謝!其次我要感謝本論文所引用的各位學者的專著,這些論文給我了無數(shù)的啟發(fā)和收獲,也讓我感受到了學習過程中的嚴謹性。同時我還要感謝在完成論文過程中給與我?guī)椭呐笥押图胰?,沒有你們的鼓勵和引導,就不能這么快的完成論文的寫作。多謝你們。附錄一publicbooleanServeInfo(Roominforoominfo){ intupdate=-1; intid=0; Connectionconnection=null; PreparedStatementpStatement=null; ResultSetexecuteQuery=null; if(roominfo.getId()){ try{ connection=JDBCUtils.getConnection(); switch(roominfo.getRoomstyle()){ case1: case2: case3: pStatement=connection.prepareStatement("selectroomidfromsmallroomwhereroomstyle="+roominfo.getRoomstyle()+"andnameisnull;"); break; case11: case12: case13: pStatement=connection.prepareStatement("selectroomidfromnomalroomwhereroomstyle="+roominfo.getRoomstyle()+"andnameisnull;"); break; case21: case22: case23: pStatement=connection.prepareStatement("selectroomidfromhighroomwhereroomstyle="+roominfo.getRoomstyle()+"andnameisnull;"); break; case31: case32: case33: pStatement=connection.prepareStatement("selectroomidfromloverroomwhereroomstyle="+roominfo.getRoomstyle()+"andnameisnull;"); break; default: pStatement=connection.prepareStatement("selectroomidfromhaohuaroomwhereroomstyle="+roominfo.getRoomstyle()+"andnameisnull;"); break; } executeQuery=pStatement.executeQuery(); if(executeQuery.next()){ id=executeQuery.getInt("roomid"); switch(roominfo.getRoomstyle()){ case1: case2: case3: update=pStatement.executeUpdate("updatesmallroomsetname='"+roominfo.getName()+"',sex="+roominfo.getSex()+",tel='"+roominfo.getTel()+"',idcard='"+roominfo.getUserid()+"',startdate='"+roominfo.getStartdata()+"',enddate='"+roominfo.getEnddata()+"'whereroomid="+id+";"); break; case11: case12: case13: update=pStatement.executeUpdate("updatenomalroomsetname='"+roominfo.getName()+"',sex="+roominfo.getSex()+",tel='"+roominfo.getTel()+"',idcard='"+roominfo.getUserid()+"',startdate='"+roominfo.getStartdata()+"',enddate='"+roominfo.getEnddata()+"'whereroomid="+id+";"); break; case21: case22: case23: update=pStatement.executeUpdate("updatehighroomsetname='"+roominfo.getName()+"',sex="+roominfo.getSex()+",tel='"+roominfo.getTel()+"',idcard='"+roominfo.getUserid()+"',startdate='"+roominfo.getStartdata()+"',enddate='"+roominfo.getEnddata()+"'whereroomid="+id+";"); break; case31: case32: case33: update=pStatement.executeUpdate("updateloverroomsetname='"+roominfo.getName()+"',sex="+roominfo.getSex()+",tel='"+roominfo.getTel()+"',idcard='"+roominfo.getUserid()+"',startdate='"+roominfo.getStartdata()+"',enddate='"+roominfo.getEnddata()+"'whereroomid="+id+";"); break; default: update=pStatement.executeUpdate("updatehaohuaroomsetname='"+roominfo.getName()+"',sex="+roominfo.getSex()+",tel='"+roominfo.getTel()+"',idcard='"+roominfo.getUserid()+"',startdate='"+roominfo.getStartdata()+"',enddate='"+roominfo.getEnddata()+"'whereroomid="+id+";"); break; } } }catch(SQLExceptione){ //TODO自動生成的catch塊 e.printStackTrace(); }finally{ JDBCUtils.close(executeQuery,pStatement,connection); } }else{ try{ connection=JDBCUtils.getConnection(); switch(roominfo.getRoomstyle()){ case1: case2: case3: pStatement=connection.prepareStatement("updatesmallroomset'"+roominfo.getName()+"',sex="+roominfo.getSex()+",tel='"+roominfo.getTel()+"',idcard='"+roominfo.getUserid()+"',startdate='"+roominfo.getStartdata()+"',enddate='"+roominfo.getEnddata()+"'whereroomid="+roominfo.getIdValue()+";"); break; case11: case12: case13: pStatement=connection.prepareStatement("updatenomalroomset'"+roominfo.getName()+"',sex="+roominfo.getSex()+",tel='"+roominfo.getTel()+"',idcard='"+roominfo.getUserid()+"',startdate='"+roominfo.getStartdata()+"',enddate='"+roominfo.getEnddata()+"'whereroomid="+roominfo.getIdValue()+";"); break; case21: case22: case23: pStatement=connection.prepareStatement("updatehighroomset'"+roominfo.getName()+"',sex="+roominfo.getSex()+",tel='"+roominfo.getTel()+"',idcard='"+roominfo.getUserid()+"',startdate='"+roominfo.getStartdata()+"',enddate='"+roominfo.getEnddata()+"'whereroomid="+roominfo.getIdValue()+";"); break; case31: case32: case33: pStatement=connection.prepareStatement("updateloverroomset'"+roominfo.getName()+"',sex="+roominfo.getSex()+",tel='"+roominfo.getTel()+"',idcard='"+roominfo.getUserid()+"',startdate=
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 代銷意向合同范本
- 二手車線上交易合同范本
- 眾籌股東合同范本6
- 買賣帶表格合同范例
- 加工中心保養(yǎng)合同范本
- 兄弟共同承包土地合同范本
- 辦公電腦合同范本
- 代理執(zhí)行合同范本
- 共同買地皮合同范本
- pc吊裝合同范本
- 2025年海域使用權租賃合同
- 《走近世界民間美術》 課件 2024-2025學年人美版(2024)初中美術七年級下冊
- 2025年江蘇省高職單招《職測》高頻必練考試題庫400題(含答案)
- 2025云南紅河州個舊市大紅屯糧食購銷限公司招聘及人員高頻重點模擬試卷提升(共500題附帶答案詳解)
- X證書失智老年人照護講解
- 工廠安全事故預防知識
- 2024-2025學年人教版數(shù)學八年級下冊期中檢測卷(含答案)
- 2024年江西應用工程職業(yè)學院高職單招職業(yè)適應性測試歷年參考題庫含答案解析
- 2025屆江蘇蘇州市四校高三12月聯(lián)考語文試題(教師版)
- 中醫(yī)護理技術操作質(zhì)量控制
- 傳感器技術-武漢大學
評論
0/150
提交評論