侯金彪
(德州學院計算機與信息學院,山東 德州253023)
當今世界是數據信息隨處可見的時代,時至今日信息依靠于現代先進科技的計算機網絡信息技術早就被看作是人們工作、學習中非常重要的一部分?,F在在互聯網上進行信息的管理和分配已經成為極其普遍的事情,利用互聯網技術來構建一個外賣系統也是有一定必要的,通過對傳統訂餐方式的改變,能夠使得用戶就餐得到較大的便利;通過這個系統,可以對菜品、訂單、配送的各項情況進行電腦化和系統化的管理,能夠持續(xù)不斷地加快系統管理的進程,也使得飯菜食物管理所需要的各項數據信息能便捷迅速地完成記錄、查詢、刪除和更新等操作,并對相應關鍵數據也能夠方便快速地得到統計[1]。本文采用比較流行的Jsp技術,實現了一個功能強大的外賣系統。
Jsp具備面向服務器的特點,正因為如此它支持在在各類瀏覽器軟件上運行。當客戶端發(fā)送數據請求的時候,該數據將通過Jsp服務器將數據傳輸到客戶端,而且Jsp可以利用JavaBean或Servlet等不同的組件做出一些適當正確的反饋,這個對管理系統設計的反饋過程可能有對表中內容資料的查詢、刪除、更新等多個不一樣的操縱工作,再將所得到的結果返還回到前臺頁面,并加以顯示,該過程實現了服務器客戶端的B/S模式。[2]
Jsp第一次接到對其傳遞出來的申請請求時候,與之對應的Jsp文件就會借助Jsp引擎轉變替換成Servlet。Jsp文件可能會由Jsp引擎轉化成Java文件的過程中產生語法錯誤,若語法有誤,轉換將會失敗。錯誤信息也會被服務器和客戶端搜集起來。如果轉化完成沒有錯誤的話,這個Java文件將會被Jsp引擎編譯成相應的class文件,并且逐漸生產成為Servlet實例,然后借助Servlet實例中的Jsp Service把HTML文件精準確切地送回到與之相對應的客戶端。
MySQL是一個關系數據庫控制系統,適用于中小型企業(yè)開發(fā)。MySQL會把數據信息存儲在一個個不同名字的表中,而不是將所有數據信息都堆放在一個大型的倉庫內,表與表之間可以獨立也可以相互關聯,這樣就加快了程序運行速率并且提高了管理工作的靈便性。一般習慣用的標準化SQL語言就是數據庫能夠采用的語言[3]。
MySQL憑借它所占用的體積小、運行速率快、各方面性能優(yōu)越等多個特點優(yōu)點被很多人使用[4]。其基本組成部分流程圖如圖1所示。
圖1 MySQL基本組成部分流程圖
Struts2是一個關于MVC設計樣式的Web框架,站在MVC的角度上來看,包含了這幾個部分,分別是模型層、視圖層、控制層。簡單來說大致為:模型層的任務是承擔完成事務功能,包括兩個組成成分:業(yè)務數據跟業(yè)務操作邏輯。 目標對象類、DAO、Service全部存在在模型層中。視圖層的主要任務就是承擔顯示頁面跟使用者互相交流并且獲取使用者的資料。存在視圖中的類是沒有涵蓋業(yè)務邏輯和控制邏輯的Jsp??刂破魇墙覯和視圖層V之間的紐帶,目的是操作管理運行過程[5]。
Struts 2是Struts的更新一代Web開發(fā)框架。Struts 2基于MVC模式在操作申請轉發(fā)方面非常方便,通常而言是依據攔截器的機制來解決使用者的申請,這樣的設計也讓業(yè)務邏輯控制器可以跟Servlet API徹底分開,這樣框架愈來愈方便使用。當Jsp經由表單遞交數據的過程中,Struts 2架包中的過濾器就會攔住[6]。
Internet計算機技術逐漸發(fā)展使得外賣系統軟件也得到了更好更快地發(fā)展,外賣市場的潛力巨大,由此也可以確立了以下幾點需求:菜品類別管理、菜品管理、訂單管理、菜品評價、在線下單、菜品瀏覽。
(1)系統需求
依據JavaEE技術把B/S系統作為基礎,計算機程序跟數據一起存于后臺中。全部系統管理操作都是在瀏覽器的基礎上進行的,下載、安裝、運行、維修保護、更新都非常便利。
(2)功能需求
根據目前的調研看,軟件應該實現菜品類別管理、菜品管理、訂單管理、菜品評價、在線下單、菜品瀏覽等功能。
(3)性能需求
為了保證系統能夠長期高效、安全穩(wěn)定地運行,系統對菜品和數據的管理以及程序開發(fā)語言的編寫很重要,所以這個系統就采用Struts2框架來進行開發(fā)。性能上總體要求如下:
a.需要網站提供一定的并發(fā)量,保證用戶可以正常訪問。
b.網站能夠自發(fā)處理一些異常的問題,比如路徑訪問出錯就會出現友好的404錯誤界面等。
c.由于這個軟件設計到了很多表格與信息的載入,能夠以較快的形式完成數據顯示與執(zhí)行。
(4)運行需求
系統要求較低,商場主流配置即可。
(5)其他需求
這個系統可維護性比較好,安全性比較高,可靠性也比較強。界面很容易讓用戶來操作,同時在后臺方面也要對用戶訂單的管理有好處。并且在開發(fā)時間,經費上要嚴格控制,以最大的限度,合理地利用有限資源,來完成所需要的功能,滿足外賣系統和用戶們的需求。
本系統的設計及開發(fā)利用Jsp來進行前臺展示,采用MVC框架(利用Struts2作為框架)來實現對網站的整體設計,來達到對業(yè)務功能的實現,在對系統角色進行細分后對不同的菜品信息進行展示和管理等。
數據庫設計是極為重要的,在這個流程中充分考慮到所有表結構之間的數據關聯,同時還應該琢磨數據表之間的對應聯系。下圖2即為數據庫中表的關系圖。
圖2 數據庫關系圖
從外賣系統的設計角度看,對應的功能列表下面需要有對應的數據庫表,依據上節(jié)數據庫關系圖能夠知道,由于網站設計的數據表有些多,因此接下來羅列一些關鍵數據表的設計,如下面表1-表9所示:
表1 admin表
表2 dd表
表3 fl表
表4 member表
表5 news表
表6 pl表
表7 prep表
表8 sale表
表9 system表
3.4.1 系統結構設計 MVC就是按照職責不同將程序劃分為3個組成部分,可以改善程序結構,便于日后維護和擴展,其中,Model層實現系統中的業(yè)務邏輯,用JavaBean(實體類)來實現;View層一般被用來和系統使用者進行交流互動,借助Jsp達到目的;Controller層是Model與View交流的紐帶。
1)M-Model 模型
Model的職責為承擔業(yè)務邏輯工作。
2)V-View 視圖 V View的職責為承擔展現頁面與使用者交流互動(獲取使用者資料)。
3)C-Controller 控制器
在Struts2的架構中,Struts2的框架部分主要負責MVC設計中的主要用來實現整個系統的流程跳轉過程。圖3即為系統執(zhí)行流程圖。
圖3 系統執(zhí)行流程圖
3.4.2 系統功能模塊設計
外賣系統在開發(fā)中應該通過軟件管理功能來分解軟件功能模塊,而且開展完成相應模塊。系統功能模塊圖如下圖4所示。
圖4 系統功能模塊圖
在諸多Web中應該有導入數據源的模塊。一般而言,存在兩種數據庫的連接情況,一種是通過于Java類寫明數據庫驅動與數據庫連接名等信息開展適當的連接與釋放操作,另一種是通過數據庫連接池,這種方式的優(yōu)點在于可以合理的管控數據庫的連接。設計結合以上兩種的特點,將連接和釋放的操作通過一個統一的類來管理,這個數據庫連接類即為Conn.java,在該類中將數據庫連接和關閉寫成靜態(tài)方法,方便適時的關閉和打開。
通過下面的代碼段來聲明變量,并在該類中的方法內做說明。
// 定義MySQL數據庫的連接地址
private String url = "jdbc:mysql://localhost:3306/takeaway";
// MySQL數據庫的連接用戶名
private String user = "root";
// MySQL數據庫的連接密碼 private String password = "123";
借助這幾個變量來實現與之相符的數據庫連接,得到手段的代碼。
public Connection getCon() throws Exception {
Class.forName(jdbcName);
Connection con = DriverManager.getConnection(url, user, password);
return con;
}
得到連接之后,也應該為數據庫展開及時地停止關掉工作,停止關掉的工作能夠參考下面方式:
public void closeCon(Connection con) throws Exception {
if(con!=null) {
con.close();
}
}
在外賣系統中,普通用戶需要登錄系統之后才能夠下單,管理員對系統進行數據維護和處理也需要進行登錄操作,因此在平臺的登錄系統需要提供對應的接口。
由于系統采用了Struts2的架構,因此,系統的所有請求都會經過一個稱為struts.xml的文件,通過該文件可以知道最后的請求地址,即根據login的請求做一定的分發(fā)操作,具體的代碼部分如下所示。
從上面的程序片段中可以看出,系統識別到了login對象會通過Action中名為LoginAction的類,該類中做進一步的處理,比如用戶在登錄的過程中會觸發(fā)下面的函數入口。
public String login() throws Exception{
}
在該函數的入口中,可以看到首先通過下面的方式來判斷用戶名和密碼是否完整,并且是否符合匹配要求。
if(StringUtil.isEmpty(user.getUserName()) || StringUtil.isEmpty(user.getPassword())) {
error = "用戶名或密碼為空!";
return ERROR;
}
if(StringUtil.isEmpty(imageCode)) {
error = "驗證碼為空!";
return ERROR;
}
if(!imageCode.equals(session.getAttribute("sRand"))){
error = "驗證碼錯誤!";
return ERROR;
}
倘若數據符合系統條件之后,經過數據庫練級,接下來繼續(xù)進行,如果數據庫連接成功之后,到了最終檢索申請傳達到數據庫中實現檢索,辨別有沒有該使用者,同時密碼有沒有和這個使用者的相對應,倘若完全對應就會調轉到Main,即進入到軟件的服務器界面,關鍵代碼在下面展現。
con=dbUtil.getCon();
User currentUser=userDao.login(con, user);
if(currentUser!=null){
session.setAttribute("currentUser", currentUser);
return "main";
}else{
request.setAttribute("error", "用戶名或密碼錯誤!");
return "login";
}
使用者單擊系統運行后所實現界面的注冊鏈接便跳轉到注冊界面,在注冊界面上填寫上必填的使用者名字、密碼、確認密碼、聯系人住處的使用者資料。當使用者上交時,先由網頁腳本辨別有沒有合乎上交的基礎條件,合乎條件則給后臺上交表單數據。倘若輸入不對,就會彈出不對警告框,讓顧客再次輸入。
購物車模塊的實現方式主要有三種,一種是將商品信息加入數據庫,這樣用戶重新登錄系統后可以查看到用戶的購物車中的商品;另一種是將顧客購物車內容放到session中存放在服務器端,就能夠達到多個頁面的資源共享。
在設計的模塊中,菜品類別的管理也是一重要的模塊,因為在該模塊中,管理員可以設置菜品品類,有利于后面對菜品信息管理;菜品信息更改或刪除完成后,也能夠用另一個頁面進行添加菜品。
以菜品類別為例,重點介紹關于列表數據展示的模塊和實現過程,菜品類別信息展開查詢時會一開始借助Struts2的配置文件,并且依據配置文件完成一個跳轉,一些主要代碼參考如下。
利用該配置的過程可以實現一次數據的跳轉,即點擊了菜品類別后會進入到GoodsTypeAction該類中。
運行代碼的時候,一開始應該對數據庫構成連接,在完成數據庫連接后再對數據展開處理,重點代碼如下所示。
Connection con = null;
PageBean pageBean = new PageBean(Integer.parseInt(page),Integer.parseInt(rows));
try {
if(goodsType==null){
goodsType = new GoodsType();
}
goodsType.setTypeName(s_typeName);
con = dbUtil.getCon();
JSONObject result = new JSONObject();
JSONArray jsonArray = JsonUtil.formatRsToJsonArray(goodsTypeDao.goodsTypeList(con, pageBean, goodsType));
int total = goodsTypeDao.goodsTypeCount(con, goodsType);
result.put("rows", jsonArray);
result.put("total", total);
ResponseUtil.write(ServletActionContext.getResponse(), result);
}catch(Exception e){
e.printStackTrace();
}finally{
try {
dbUtil.closeCon(con);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return null;
系統開發(fā)的時候,常常遇到開發(fā)不對的問題。最大限度地找到系統中的不足,而不是證明系統的優(yōu)點,這是經典的一句對測試的解釋。及時察覺錯誤,就可以避免一些不必要的損失。系統測試不僅能確保軟件的正常實現,還能證明需求和功能相符合,系統測試包括兩部分:一部分是驗證產品質量,它包括檢查軟件的實現在需求分析的一致性、軟件實現速度的快慢跟計算機系統的擴展性等等;另一部分查找軟件中的不對并修改,確保軟件功能的實現。
系統測試對形式上的不同而言可以包括靜態(tài)測試與動態(tài)測試兩個關鍵部分。
1)靜態(tài)測試方法
靜態(tài)測試法根據系統功能需求、源代碼跟腳本的察看和考慮,找出系統存在的缺點。
2)動態(tài)分析方法
動態(tài)測試方法根據查看當前代碼與想要達到的要求之間的直接差距,從性能、用處、可靠性等角度考評軟件。
對測試的內部結構與操作的算法上來說,其動態(tài)測試方法又涵蓋白盒測試法和黑盒測試法這兩種方法。
其中黑盒測試法(Black-Box Test)基本上將程序代碼當成黑色盒子,不看程序內部結構跟算法,而僅著眼于程序代碼的外部特性來測試軟件有沒有達到要求。
在這個部分測試過程中,往往使用以黑盒測試法的手段來完成計算機系統查看,這樣能夠有效找出錯誤,檢驗系統能否滿足用戶需要,達到最佳測試效果。
功能測試是計算機軟件用處的檢驗,憑借功能測試用例,一個一個察看,查看程序有沒有完成了使用者想要的結果,各個測試如下:
1)登錄功能的測試
目標:確保使用者可以根據對的使用者名字跟密碼進入服務器。
測試方法:
(1)不做輸入直接回車。
(2)輸入空字符串然后回車。
(3)輸入合理的字符數據然后回車登錄。
2)菜品類別管理功能的測試
目的:確保用戶可以對菜品類別進行管理。
測試方法:
(1)單擊菜的類別,核對是否能夠顯示正確的功能表。
(2)選中對應的餐品信息,核對是否可以完成修改與刪除工作。
(3)修改跟刪除信息,核對可不可以實現和得到反饋。
本模塊各個功能的測試結果如下:
1)進入功能不發(fā)生異常,使用者可以進入系統。
2)餐品使用正常,用戶對于餐品資料實現合理的增刪改查此操作。
本次測試結果與預計基本一致。通過測試,可得出以下結論:該模塊滿足外賣系統的功能需求,運行穩(wěn)定,具備實用價值。
隨著社會生活的迅速發(fā)展,互聯網給予人們的公共服務也慢慢地變多了,為了滿足廣大的用戶就餐方面的需求,本設計采用編程語言Jsp,開發(fā)了一個基于B/S架構的外賣系統,這個外賣系統牽涉到了對多個不同的應用領域的相關認知,有效幫助整合相關知識框架,滿足了社會的需要,有一定的現實意義和社會價值。