訂餐系統(tǒng)javaee課程設(shè)計_第1頁
訂餐系統(tǒng)javaee課程設(shè)計_第2頁
訂餐系統(tǒng)javaee課程設(shè)計_第3頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、網(wǎng)上訂餐系統(tǒng)1. 課程設(shè)計的目的當(dāng)計算機與互聯(lián)網(wǎng)飛速的發(fā)展和使用, 越來越多的公司、單位和個人通過提供服務(wù)、 公布信息、交流知識等使互聯(lián)網(wǎng)越來越方便我們的生活。在Web開發(fā)中,Java語言以其可擴展性、靈活性、可靠性和跨平臺等特點,成為進(jìn)行web編程的首選。更重要的是, 開源社區(qū)提供了一大批功能強大的框架技術(shù),Structs、Spring、Hibernate等,利用這些技術(shù)使我們更高效的維護(hù)和建立我們自己的同時也讓的開發(fā)更加方便和快捷。在這學(xué)期課堂上所學(xué)到的Java知識,能夠為我們解決一些實際問題的能力。 利用一 周時間,使用Java框架技術(shù)完成網(wǎng)上訂餐系統(tǒng)的分析設(shè)計和開發(fā)。有了網(wǎng)上訂餐系統(tǒng),

2、 人們可以在家隨意挑選自己喜愛的食物。現(xiàn)在正是經(jīng)濟全球化的時代,利用網(wǎng)絡(luò),我們 可以瀏覽不同地區(qū)甚至不同國家的商品,這也改變著人們的消費觀,網(wǎng)上訂餐系統(tǒng)正是 符合了這一趨勢的發(fā)展,越來越多的人能夠不出門就能吃上美味可口的飯菜。2. 設(shè)計方案論證2.1需求分析隨著科技的進(jìn)步、計算機技術(shù)的發(fā)展,越來越多的人選擇用網(wǎng)絡(luò)來滿足自己的需求, 網(wǎng)上訂餐的出現(xiàn),正是體現(xiàn)了這一點。不少商家都把眼觀放在了網(wǎng)上銷售這一方面,把 實體銷售漸漸轉(zhuǎn)變?yōu)榫W(wǎng)上銷售。現(xiàn)在人們越來越重視節(jié)省時間,提高效率,不管是消費 者還是商家都如此,有了網(wǎng)上訂餐系統(tǒng),可以讓訂餐者與餐廳進(jìn)行互動,足不出戶,選 擇自己喜愛的菜品,對與商家而言,

3、這樣做節(jié)省了成本,不需要為實體店的地址而煩惱, 這樣做對于商家和消費者來說無疑是雙贏的。2.2系統(tǒng)總體設(shè)計本系統(tǒng)為了便于各種操作,采用多頁面的模式。用戶可在不同網(wǎng)頁進(jìn)行相應(yīng)操作:在管理員信息表中,包括的數(shù)據(jù)項:,密碼,權(quán)限,注冊時間。在訂餐客戶信息表中,包括的數(shù)據(jù)項:用戶編號,用戶名,密碼,注冊時間 等。在菜品信息表中,包括的數(shù)據(jù)項:菜品編號,菜品名稱,菜品價格,容,類別, 添加時間等,每道菜都有它的菜名、介紹、價格等信息,為了讓菜品的這些信息在頁面 有個很好的呈現(xiàn),我們把這些信息存入菜品信息表中進(jìn)行維護(hù)。 。在定單列表中,包括的數(shù)據(jù)項:定單列表編號,用戶名,菜品編號,下單時間等。在購物車信息

4、,包括的數(shù)據(jù)項:購物車信息唯一標(biāo)識,食品 id,訂餐用戶名,添 加時間等。當(dāng)顧客選購菜品放入購物車時,我們會把這些菜品的 id、數(shù)量、價格記錄存 入訂單關(guān)聯(lián)表中,通過訂單關(guān)聯(lián)表中的信息算出會員將要支付的金額,再通過菜品id這個主健把相應(yīng)的信息存入個人訂單這表中進(jìn)行維護(hù)。為了有效地管理菜品,在新增菜品時加了一個分類屬性,在此需要建分類表進(jìn)行 維護(hù),系統(tǒng)總體功能圖如圖1所示。圖1系統(tǒng)功能框圖2.3系統(tǒng)流程設(shè)計課程設(shè)計信息管理系統(tǒng),包括用戶注冊、管理員登錄、菜品查詢、菜品詳單等。任 務(wù)執(zhí)行的流程如圖2所示。進(jìn)入系統(tǒng)主界面圖2系統(tǒng)流程圖2.4數(shù)據(jù)庫設(shè)計該系統(tǒng)是借助MySQL數(shù)據(jù)庫對數(shù)據(jù)進(jìn)行統(tǒng)一管理的。

5、在網(wǎng)上訂餐系統(tǒng)中需MySQL 創(chuàng)建數(shù)據(jù)庫 訂餐管理系統(tǒng)”,MySQL數(shù)據(jù)庫中數(shù)據(jù)的操作可以分為四種不同的類型, 分別是添加、刪除、查詢和修改。該數(shù)據(jù)庫包含的表有菜品信息表、管理員表、訂單表 等。菜品信息表菜品信息表,記錄系統(tǒng)中的菜品信息。把漢字轉(zhuǎn)化為漢語拼音,作為字段名。把ID 設(shè)為主鍵,且不為空,bianhao mingcheng leibie、tupian、jianjie、jiage、faburen、addtime 與之相關(guān)聯(lián),如表1所示。表1菜品信息表字段名類型長度是否為主鍵是否為空說明idint11是否菜品編號bia nhaovarchar20否是采品編碼min gche ngvarc

6、har50否是菜品名稱leibievarchar20否是菜品類別tupia nvarchar50否是菜品圖片jianjievarchar50否是菜品簡介fabure nvarchar30否是發(fā)布人242管理員信息表管理員信息表,存儲系統(tǒng)中的管理員信息。把漢字轉(zhuǎn)化為漢語拼音,作為字段名。 其中,ID設(shè)置為int型,并設(shè)為主鍵,且不能為空;username pwd設(shè)置為varchar型, 如表2所示。表2管理員信息表字段名類型長度是否為主鍵是否為空說明IdInt10是否用戶編號user nameVarchar30否是用戶PwdVarchar30否是用戶密碼243用戶注冊信息表用戶注冊信息表,記錄系

7、統(tǒng)中的注冊用戶信息。把漢字轉(zhuǎn)化為漢語拼音,作為字段名。把 ID 設(shè)為主鍵,且不為空,zhanghao mima、ximgming、diqu、zhaopian issh 與 之相關(guān)聯(lián)。表3用戶注冊信息表字段名類型長度是否為主鍵是否為空說明idint11是否編號Zhanghaovarchar30否是賬號mimavarchar20否是密碼Xi ngmi ngvarchar30否是Diquvarchar50否是地區(qū)Zhaopia nvarchar50否是照片Isshvarchar10否是備注2.5主要功能用struts框架中的異常處理機制,本系統(tǒng)自定義了異常類 SystemException和異常處

8、理類 SystemExceptionHandie。在 MessageRpertie中定義需要在 Dao 中拋出 異常時聲明的容。在struts-config.xml中配置公共異常處理文件 vglobal-exceptions,加入資源文件 message-resource®arameter="MessageResources" /在 Dao 中拋出 自定義異常。并在公 共異常處理頁面中使用struts標(biāo)簽html:errors/進(jìn)行異常信息顯示。顧客模塊為封裝的異常跳轉(zhuǎn)頁面如下圖3所示:探憤提眾痹:it功極正在博護(hù)申誦逅同一圖3在strut

9、s-config.xml文件中的配置信息如下:vglobal-excepti ons>vexcepti on key="errors.detail"type=".hhq.util.SystemExcepti on"han dler=".hhq.util.SystemExcepti onHan dler"path="/jsp/clie ntError.jsp"/></global-excepti ons>在配置文件中可見,異常是以鍵值對的方式在struts1.1中存放,type屬性是指異常類,

10、handler屬性是指異常的處理類,path屬性是指出現(xiàn)異常后跳轉(zhuǎn)的錯誤頁面。3. 設(shè)計結(jié)果與分析3.1訂餐系統(tǒng)登錄界面設(shè)計該系統(tǒng)通過輸入用戶名和密碼進(jìn)行登錄,登錄界面如圖4所示養(yǎng)h傳理員鬲統(tǒng)圖4登錄界面功能描述:顧客登陸管理,包括登陸時管理員需要輸入用戶名、密碼、驗證碼、也 可已選擇是否記錄用戶名和密碼以便以后登錄。如果管理員選擇記住用戶名和密碼則下 一次登陸的時候只需要輸入驗證碼,即可直接登錄。(1) 登錄頁面控制模塊Login相關(guān)代碼如下:login.jsp :<% page Ian guage="java"import="java.util.*,.a

11、ct ion s.*"pageE ncodi ng="gbk"%><%Stri ng path = request.getC on textPath();String basePath = request.getScheme() + ":/"+ request.getServerName() + ":" + request.getServerPort()+ path + "/"%><% taglib prefix="s" uri="/struts-ta

12、gs"%>VDOCTYPE HTML PUBLIC "-/W3C/DTD HTML 4.01 Tran siti on aI/EN"> <html><head><title> 登錄頁面 </titIe><style type="text/css"></style>/head><body><div alig n="ce nter"><br><span class="STYLE2"

13、;> 訂餐系統(tǒng) </span></div><div alig n="cen ter"><s:form action="logi n"><s:textfield name="userName" label="用戶名"value=""></s:textfield><s:password name="password" label="密碼"value=""x/

14、s:password><div alig n="ce nter"><s:submit value="登錄"/><s:property value = "resultMSG" /></div></s:form></div></body></html>public class ALogi npublic void doLogi n ( Hashtable in putData, Hashtable outputData,HttpSessi

15、 on mySessi on )throws Excepti on/獲取輸入信息String sUser name = (Stri ng)i nputData.get("user name");String sPassword = (Stri ng)i nputData.get("password");/校驗用戶輸入信息LUserlUser=(LUser)GlobalObjectProvider.getLogicService(Commo nCon st .L OGIC_KEY_USER);/如果對應(yīng)的類沒有的話,報錯并返回login頁面if ( lUs

16、er = null ) throw new Exception(”用戶名或密碼錯誤請重新輸入!");/獲取用戶信息User userl nfo = lUser.getUserl nfo( sUser name, sPassword );if ( userl nfo = n ull )outputData.put( "pageld", CommonConst.VIEWID LOGIN );outputData.put( "errMsg"," 用戶名密碼檢杳失?。?請重新輸入。");outputData put( "u

17、sername" slJsername ) return;ElseoutputData put( "pageld", CommonConst VIEW/ID MENU);往sessio n中設(shè)置用戶信息mySessi on. setAttribute( "logi nU ser", userl nfo ); return;3.2訂餐系統(tǒng)主頁面模塊設(shè)計用戶可以通過訂餐系統(tǒng)主頁面進(jìn)行訂餐如圖 5所示圖5功能描述:顧客登陸管理,包括(1) 登陸時可以以游客或者會員的兩種方式進(jìn)行訂餐操作,如果是會員登陸,先前 需要錄入用戶名、密碼、驗證碼,以便系統(tǒng)確認(rèn)

18、登陸成功。(2) 會員個人信息管理,會員可以修改個人資料(如:,地址等),也可以查看訂餐 信息,了解當(dāng)前訂餐的動態(tài)(詳見會員登錄流程圖)。(3) 選購美食,作為顧客,在挑選美食的過程中,可以直接將稱心的美食選進(jìn)購物 車中也可通過一系列查詢,進(jìn)一步了解后,再選擇美食(詳見選購美食流程圖)選購美食部分代碼如下:得到在Spring中動態(tài)注入的Service層對象得到日志對象logpublic ActionFo rward queryForAII(Actio nM appi ng mapp ing, Acti onForm form,HttpServletRequest request, HttpSe

19、rvletResp onse resp on se) Stri ng forward = "first"if(request.getParameter("user").equals("ma nager") forward = "queryDishes"Food food = new Food();List<Food> foodList = n ull ;List<Food> topList = n ull ;int allRecorders = foodService.queryForAII

20、Recorders(food);/當(dāng)不是第一次登陸頁面時if(request.getParameter("cp")!=null&&request.getParameter("ls")!=null)int curre ntPage = In teger.parse In t(request.getParameter("cp");int lin eSize = In teger.parse In t(request.getParameter("ls");if(curre ntPage>1 &

21、;&lin eSize>allRecorders)curre ntPage = 1 ;food.setCurre ntPage(curre ntPage);food.setL in eSize(l in eSize);foodList= foodService.queryForFood(food);else第一次來到頁面,top5和食品圖片等信息foodList = foodService.queryForFood();int pageSize = (allRecorders + food.getL in eSize() - 1) / food.getL in eSize();

22、request.setAttribute("pageSize", pageSize);request.setAttribute("allRecorders", allRecorders);topList = foodService.queryForTop();下拉列表中的信息List<FoodAttribute> foodAttributeList = foodService.querySelect lnfo();/傳給 top10 的 listrequest.setAttribute("topList", topList

23、);/傳給視頻圖片等信息的listrequest.setAttribute("foodList", foodList);傳給下拉列表的listrequest.setAttribute("foodAttributeList", foodAttributeList);retur n mapp in g.fi ndForward(forward);首先判斷是從哪個頁面跳到到這里來調(diào)用這一方法,隨著調(diào)用者的不同,方法也會將最后的傳輸?shù)讲煌捻撁嬷腥?。然后查詢出所有美食的記錄?shù),再對是否是第一次 登錄到此頁面進(jìn)行判斷,以為,第一次登錄時當(dāng)前頁數(shù)和每頁顯示行數(shù)是默認(rèn)

24、的,而此 后登錄到此頁面時有可能發(fā)生改變,最后再用Spring中動態(tài)注入的服務(wù)層中食品類的對 象調(diào)用查詢食品信息的方法,再將結(jié)果通過request對象傳輸?shù)綄?yīng)的頁面中去。public String getFoodlnfo(String src) /圖片絕對路徑String picsrc = nu II;String foodI nfo = n ull ;/只保留相對路徑,將絕對路徑去掉Stri ng temp = src.split("/");for (int i = 0; i < tempen gth; i+) /得到圖片的相對路徑picsrc = temptem

25、p .len gth - 1;Food fd = foodDAO.query(picsrc);food Info = fd.getFoodDescripti on();return foodI nfo;此方法要在jsp頁面中有DWR的對象調(diào)用,其中得到的路徑是圖片在服務(wù)器上的 絕對路徑,首先用String類中的split方法將其截成數(shù)據(jù)庫中所存入得圖片路徑形式,然后再作為查詢條件在數(shù)據(jù)庫中查詢,查詢出美食的信息。然后DWR對象會將查詢出來的信息作為jsp頁面中回調(diào)函數(shù)的參數(shù)傳回頁面端。3.3美食信息添加功能模塊功能描述:對菜品信息進(jìn)行維護(hù),包括:添加菜品,添加菜品圖品,價格,是否是推薦菜品等。

26、菜品過季下架,用于菜品原料缺少或菜品過季等情況,進(jìn)行邏輯刪除。菜品的查詢,可以按菜品的名稱、價格、銷售量、是否是推薦菜品進(jìn)行查詢, 默認(rèn)是推薦菜品查詢。修改維護(hù)菜品信息,主要針對菜品原料的價格更變菜品的價格及菜品是打折 時的價格更變,如圖6所示。圖6美食添加中圖片上傳功能代碼如下:/*圖片上傳*/定義局部變量try IPTimeStamp its = new IPTimeStamp(request.getRemoteAddr();自動為上傳圖片命名,以確定圖片的唯一性,以防覆蓋foodPictureAddr = its.getIPTimeStampRa nd()+"."+i

27、ts.getLastName(file.getFileName(); stream = file.get In putStream();filePaththis.getServlet().getServletCo ntext().getRealPath("/images/food")+"/"+foodPictureAddr;bos = new FileOutputStream(filePath);int bytesRead = 0;byte buffer = new byte8192;while (bytesRead = stream.read(buff

28、er, 0, 8192) != -1) bos.write(buffer, 0, bytesRead);catch (Excepti on e) e.pri ntStackTrace();fin allytry bos.close();stream.close(); catch (IOExcepti on e) e.pri ntStackTrace(); catch(Excepti on e)file.destroy();/*圖片上傳結(jié)束*/首先,有系統(tǒng)自動未上傳圖片命名,防止覆蓋,然后通過字符串拼接的方式作為圖片的地址存入數(shù)據(jù)庫(例如:圖片名稱叫aaa擴展名為jpg,在存入數(shù)據(jù)庫中的地址就是

29、相對地址系統(tǒng)自動生成的名字.jpg),在通過輸入輸出流的方式將圖片上傳到服務(wù)器上。 即由從form中得到的圖片路徑以流的方式服務(wù)器上的一本系統(tǒng)自動并命好的文件上, 最后關(guān)閉輸入流和輸入流,并將文件損毀。另附圖片自動命名類的部分代碼如下/為了得到不重復(fù)的圖片名稱(首先用數(shù)字零給本機IP地址的點補位,然后再加上當(dāng)前時間(精確到毫秒),最后再加上三個隨機數(shù))/定義局部變量public Stri ng getIPTimeStampRa nd() Stri ngBuffer buf = new Stri ngBuffer();if (ip != null) Stri ng str = this.ip.s

30、plit(".");for (int i = 0; i < str.le ngth; i+) buf.appe nd(this.addZero(stri, 3);buf.appe nd(this.getTimeStamp();Ran dom rand = new Ran dom();for (int i = 0; i < 3; i+) buf.appe nd(ra nd.n ext In t(10);retur n buf.toStri ng();ip已經(jīng)在實例化自動命名類對象是賦值,即是本機的ip地址,將ip地址通過“.”字符來分開有字符串?dāng)?shù)組接收,再將每部分

31、未滿三位的進(jìn)行補零操作,再加上時間戳, 最后加上三位隨機數(shù),再將StringBuffer轉(zhuǎn)換成String對象最后得到的容既是系統(tǒng)為圖片自動賦好的名字。另附美食類別處理代碼如下:if(!attributeld.trim().equals("O")&&! (attributeld.trim().equals("") food.setFoodTypeld(attributeld);else新類別foodAttributeValue = foodService.queryFoodAttributeld(); foodAttributeId =

32、foodAttributeValue.getAttributeId();try /調(diào)用 bean 中的 changeAttributeld 方法將 foodAttributeId 轉(zhuǎn)換成 foodattribute 表中 的格式attributeid = foodAttributeValue.changeAttributeld(foodAttributeld); catch (Excepti on e) /超過3位,提示減少不必要的食品類型,或者聯(lián)系hhqe.pri ntStackTrace(); log.error("系統(tǒng)添加食品類別信息過多!",e);throw new

33、 SystemException("foodattributelargenum.error",e);foodattribute = new FoodAttribute();foodattribute.setAttributeld(attributeid); foodattribute.setAttributeName(newAttributeName);將新類別向?qū)傩员碇胁逯祎ry isAdd = foodService.addFoodAttribute(foodattribute); catch (Excepti on e) e.pri ntStackTrace();lo

34、g.error(”系統(tǒng)添加食品類別信息時錯誤!”,e);throw new SystemExcepti on ("foodattributeadd.error",e);if(isAdd=true)food.setFoodTypeld(attributeid);基于美食的類別操作的可添加性,則需要判斷是在文本框中填寫的美食容(即:新 類別),還是在下拉菜單中選擇的容(即:老類別),如果是老類別則可以利用原有的類 別編號直接填入數(shù)據(jù)庫中。而如果是新類別則需要生成新的類別編號,再將類別編號填 入到數(shù)據(jù)庫中。3.4訂單查詢功能描述:對顧客的購物車所下的訂單進(jìn)行管理,包括:查看訂單,

35、可按訂單號、用戶進(jìn)行查詢管理員可以查看到當(dāng)前餐廳的訂單,并可 以進(jìn)行打印訂單以確認(rèn)發(fā)貨。修改訂單,管理員對不在自己店圍的訂單可進(jìn)行手動或者可以在訂單狀態(tài)為等待 中時為顧客修改菜品的數(shù)量及品種,若訂單狀態(tài)為以下單則不能為顧客修改。打印訂單,若打印訂單表示以確認(rèn)發(fā)貨,并自動修改訂單狀態(tài)為已發(fā)送。取消訂單,若顧客不方便上網(wǎng)打要取消訂餐的話,管理員查看訂單狀態(tài)若為已下單則不能為顧客取消訂單,若訂單狀態(tài)在等待中,則可以為顧客取消訂單,如圖7所示。IT單®刪:逞訂單 已確:Ail車 女或訂單 怖訂單 美夷昔査管崖員信息堆護(hù)圖7訂單信息查詢頁面查詢訂單部分代碼如下:vselect id = &qu

36、ot;getOrderBySA ndUsBefore"parameterClass = ".hhq.doma in .Order" resultClass = ".hhq.domain.Order" > SELECT temp.* FROM( select o.orderid as orderId ,to_char(o.ordertime ,'yyyy-MM-dd HH24:mi:ss' ) as orderTime ,o.receivern ame as receiverName , o.receiveraddr as

37、receiverAddr , o.receivertel as receiverTel , o.orderallprice as orderAllPrice , a.attributename as orderStatus , o.no des as no des , row num as rn fromordertable o, attributetable awhereo.orderstatusid = a.attributeidand o.orderstatusid not in ('06001','06002') ando.memberuser name

38、 like #memberUserName#and <!CDA TA rownum <= #currentPage# * #pageSize# >)tempWHERE<!CDATA temp.rn > ( #currentPage# - 1 ) * #pageSize# ></select>由于iBatis框架多持久層進(jìn)行封裝,所以SQL語句在寫法上會有些不同,針對物理 分頁這一要求,采用由rownum來控制輸出的列數(shù),在查詢結(jié)果上,也用到了 oracle自 己的函數(shù)to-char來對日期類型進(jìn)行處理。其中,在select標(biāo)簽中,id屬性對應(yīng)在D

39、AO的實現(xiàn)類中對象smctemplate所調(diào)用的 queryForList方法的第一個參數(shù),借此找到此 SQL,來進(jìn)行查詢操作。resultClass與 parameterclass分別表示,結(jié)果類的類型和參數(shù)類的類型,其中還有標(biāo)簽 <!CDATA>是 iBatis中使用rownum來進(jìn)行分頁操作所必須應(yīng)用到的。而如果在頁面上點擊“查看訂單詳情”則會彈出一個模態(tài)對話框,該對話框由兩部 分組成,上半部分是美食的信息,有美食名稱、美食份數(shù)、美食單價、美食總價四個屬 性,而其中有“沿著此處剪開”的字樣,下半部分則是顧客的信息有訂單號、訂單狀態(tài)、收貨人、地址、聯(lián)系、總價、支付方式、訂單時間

40、、備注信息幾項組成。4. 設(shè)計體會經(jīng)過一段時間的設(shè)計和開發(fā),網(wǎng)上訂餐系統(tǒng)基本開發(fā)完畢。其功能基本符合大眾需 求,能夠完成菜肴的更新,菜肴的查詢,菜肴的下單,后臺的管理等各種功能但是由于 課程設(shè)計時間較短和本人水平所限,雖然老師給予了我很多的指導(dǎo),但是該系統(tǒng)還有許 多不盡如人意的地方,對于 Java的框架技術(shù)我還需要深入的進(jìn)行學(xué)習(xí)。如今信息化的 普及,要想使該系統(tǒng)能在海量的網(wǎng)上訂餐系統(tǒng)中脫穎而出,以我們的編寫能力,及我們 對需求的分析和了解以及業(yè)務(wù)上的熟練程度都顯得遠(yuǎn)遠(yuǎn)的不夠。還有一些后續(xù)工作需要完成,下一步的改進(jìn)一定做到層次更清晰,功能劃分更明確,以實現(xiàn)更好的擴展性和重 用性。5. 參考文獻(xiàn)1

41、 嚴(yán)璋鵬.基于B-S的學(xué)生學(xué)籍管理系統(tǒng)的設(shè)計與實現(xiàn)J.價值工程.2013.19: 33-412 剛.輕量級J2EE企業(yè)應(yīng)用實戰(zhàn)一Struts+Spring+Hibernate整合開發(fā)M.:電子工業(yè), 2011.3: 46-753 賈素玲,王強.JSP應(yīng)用開發(fā)技術(shù)M.:清華大學(xué),2011.7: 35-764 王海濤,賈宗璞.基于Struts和Hibernate的 Web應(yīng)用開發(fā)J.計算機工程,2011, 37(9):113. 應(yīng)逵.Java Web數(shù)據(jù)庫系統(tǒng)應(yīng)用開發(fā)與實例 M.:人民郵電,2009.9:102-134.6 胡濤濤.基于MVC模式的課程管理系統(tǒng)的功能設(shè)計J.煤炭管理干部學(xué)院學(xué)報,2

42、013,04:140-142.7 任廣財.基于JSP的高校學(xué)生工作管理系統(tǒng)的設(shè)計與開發(fā)J.科技經(jīng)濟市場,2013,12:119-120.8 施陽,海燕,戴德偉.基于JavaEE的畢業(yè)設(shè)計管理系統(tǒng)設(shè)計與實現(xiàn)J.軟件導(dǎo)刊,2015,02:86-88.9 春生.淺談JavaEE程序設(shè)計課程教學(xué)改革J.科教導(dǎo)刊(中旬刊),2014,08:119-120.10 曉華,健,周慧貞.JSP應(yīng)用開發(fā)詳解(第三版)M.:電子工業(yè),2007. 16. 附錄:public class Common Servlet exte nds HttpServlet保存各頁面Id對應(yīng)的action類的對象private Has

43、htable hPageHa ndler = new Hashtable();/配置文件的存放位置private JXPathC on text con figC on text = nu II;public void in it()/取得配置文件,并獲得其中的dom元素Stri ng filePath = getI nitParameter("co nfigXML");Stri ng fileRealPath = getServletCo ntext().getRealPath(filePath);嘗試建立配置文件的DOMtryorg.jdom.i nput.SAXBui

44、lder builder = new SAXBuilder(); org.jdom.Docume nt pDoc = builder.build(fileRealPath );con figC on text = JXPathC on text. newC on text(pDoc);GlobalObjectProvider.i nit( con figC on text ); catch(Excepti on e) System.out.pri ntl n( "Servlet 初始化失敗!");/初始化共通類以獲取頁面信息Com monCon st.i nit();/每一

45、種動作第一次執(zhí)行的時候,初始化對應(yīng)的類public void doPost ( HttpServletRequest request, HttpServletResp onse resp onse ) throws ServletExcepti on, I OExceptio n/設(shè)置提交表單的中文編碼request.setCharacterE ncodi ng("GBK");HttpSessi on mySessi on = request.getSessi on (true);得到用戶輸入信息Stri ng sPageId = request.getParameter(

46、"pageld");Stri ng sActio nld = request.getParameter("act ionl d");if ( sPageld = n ull | sPageId.equals("")| sActio nld = n ull | sActio nld.equals("")非法進(jìn)入頁面,跳轉(zhuǎn)到首頁mySessio n.i nv alidate();resp on se.se ndRedirect("./log in .jsp"); return;如果非法進(jìn)入頁面(登錄

47、頁面除外)if ( !sPageld.equals("S001")&& mySession.getAttribute("loginUser") = null )非法進(jìn)入頁面,跳轉(zhuǎn)到首頁mySessio n.i nv alidate();resp on se.se ndRedirect("./log in .jsp"); return;try根據(jù)pageld獲得處理對象,如果沒有則創(chuàng)建一個對象Object oActi onO bject = hPageHa ndler.get( sPageld );if ( oActio

48、 nObject = n ull )/根據(jù)配置文件創(chuàng)建一個新對象Stri ng sClassName = (Stri ng)c on figC on text.getValue("ch08-co nfig/pageid='"+sPageld+"'/className"); oActio nObject = Class.forName( sClassName ). newl nsta nce(); hPageHa ndler.put( sPageld, oActio nObject);取得方法名Stri ng sMethodName = (

49、Stri ng)co nfigC on text.getValue("ch08-co nfig/pageid='"+sPageId+"'/actio nid='"+sActio nId+"'/methodName");生成對應(yīng)的參數(shù),并調(diào)用對應(yīng)對象的對應(yīng)方法/inputData是根據(jù)傳入的參數(shù)做成的 Hashtable in putData = new Hashtable();Enu meratio n params = request.getParameterNames();while( params

50、.hasMoreEleme nts()Stri ng sParaName = (Stri ng)params .n extEleme nt();in putData.put( sParaName, request.getParameter(sParaName); /outputData是下一個頁面的值域,在此只是被初始化Hashtable outputData = new Hashtable();生成參數(shù)列表Class paraType = Class.forName("java.util.Hashtable"), Class.forName("java.util

51、.Hashtable"), Class.forName("javax.servlet.http.HttpSessio n") ;Object paraObj = i nputData, outputData, mySessi on ;生成Method對象Method in vokeMethod = oActio nObject.getClass().getMethod( sMethodName,paraType );調(diào)用方法invokeMethod.invoke( oActionObject, paraObj );根據(jù)outputData的結(jié)果決定下一個頁面Stri ng sNextPageId = (Stri ng)outputData.get("pageId");Stri ng sRealPagePath = (Stri ng)c on figCo ntext.getValue( "ch08-co nfig/pageid=”'+sNextPageld+"'/path&

溫馨提示

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

評論

0/150

提交評論