時間:2023-05-24 16:54:02 | 來源:網(wǎng)站運營
時間:2023-05-24 16:54:02 來源:網(wǎng)站運營
javaWeb綜合案例:商城案例 分模塊:用戶模塊→ 分類模塊 → 商品模塊→購物車模塊(最難)→ 訂單模塊 后臺模塊(往前臺的數(shù)據(jù)的增刪改查) 今日任務(wù): 1用戶注冊 a注冊完成 b給注冊人發(fā)郵件 2用戶激活 a 去郵箱激活發(fā)送的郵件 3用戶登錄 a 登錄失敗:回首頁顯示 b 判斷用戶是否激活了郵件 c 如果沒激活讓用戶去激活,如果激活了首頁展示 4用戶退出 Session相關(guān) 注意點: 1.數(shù)據(jù)庫和表 create database store; use store; 用戶表: CREATE TABLE `user` ( `uid` varchar(32) NOT NULL, //id號 `username` varchar(20) DEFAULT NULL, //賬號 `password` varchar(20) DEFAULT NULL, //密碼 `name` varchar(20) DEFAULT NULL, //姓名 `email` varchar(30) DEFAULT NULL, //注冊電子郵件 `telephone` varchar(20) DEFAULT NULL, //聯(lián)系電話 `birthday` date DEFAULT NULL, //生日 `sex` varchar(10) DEFAULT NULL, //性別 `state` int(11) DEFAULT NULL, // 0 未激活 1 已激活 `code` varchar(64) DEFAULT NULL, // 激活碼 PRIMARY KEY (`uid`) //主鍵 設(shè)置賬號是否已經(jīng)注銷了,如果注銷了,設(shè)置一個標(biāo)記,標(biāo)記已注銷. ) ENGINE=InnoDB DEFAULT CHARSET=utf8; //設(shè)置編碼格式 servlet工具類的抽取: 之前編寫的servlet的問題: 1.doget每次請求都會執(zhí)行 2.用了大量 if else if 判斷執(zhí)行的是那個方法讓方法執(zhí)行 Method method = this.getClass().getMethod(mt, HttpServletRequest.class,HttpServletResponse.class); method.invoke(this, request,response); 3.每個方法執(zhí)行的結(jié)果無非就是請求轉(zhuǎn)發(fā)或者重定向或者打印數(shù)據(jù) 讓所有的方法都返回一個字符串 若最后的結(jié)果需要請求轉(zhuǎn)發(fā),就把轉(zhuǎn)發(fā)的路徑給返回 若最后的結(jié)果不需要請求轉(zhuǎn)發(fā),就返回一個null String path=method.invoke(this, request,response); if(path != null){ request.getx(path).forward(...) } 4.所有servlet的service中的代碼都一樣 向上繼續(xù)抽取 編寫一個BaseServlet,將之前方法中的代碼復(fù)制過來即可, 然所有的servlet都繼承baseservlet即可 今日難點:servlet工具類的抽取(baseServlet) :真正的企業(yè)開發(fā)中一個模塊一個servlet 1先搭建數(shù)據(jù)庫 2建立項目并且將頁面信息加載進(jìn)去 3在外部建立一個index.jsp 跳轉(zhuǎn)到servlet(list=封裝熱門商品--->請求轉(zhuǎn)發(fā)到首頁顯示數(shù)據(jù)庫面的信息) <%request.getrequestDispacher(“”);%> 4找到登錄頁面中登錄與注冊入口 href=${}/jsp/jsp; //如果一個頁面放在了WEB-INF文件下:不能被瀏覽器直接訪問,只能通過代碼訪問,(通過Servlet) 步驟: 在href= 標(biāo)簽里${pageContext....}/sd1 創(chuàng)建一個servlet 名字為sd1 doGet方法中使用請求轉(zhuǎn)發(fā) getRequestDispacher(需要訪問的jsp); 注意:之前做需求的時候一個功能一個Servlet,發(fā)現(xiàn)這樣做的效率不高 解決方案:一個模塊一個servlet(UserServlet) 實現(xiàn)方案:傳參 在href= 標(biāo)簽里${pageContext....}/sd1改成${pageContext....}/user?method=loginUI Servlet中的代碼實現(xiàn) doGet()}{ String method = request.getPatameter(“method”); If(loginUI.equals(method){ //登錄 LoginUI(request,response); }else if(registUI.equals(method)){ //注冊 RegistUI(request,response) } 問:雖然傳參方式滿足了一個模塊使用一個servlet但是if,else太多,不利于后期維護(hù) 是否有什么方法解決? 答:反射:傳什么方法用什么方法 Class.forName(“cn.baidu.web.UserServlet”) 或者Class clazz =this.getClass(); String me = request.getParameter(“method”)) Method method = clazz.getMethod(me,HttpServletRequest.cass.....) String value = (String)Method.invoke(clazz.newInstance(),request,response) //做一個統(tǒng)一的請求轉(zhuǎn)發(fā) If(value!=null){ request.getRequestDispacher(Value).forward(request,response) } 問:反射的方式解決了頻繁編寫 if else問題 //雖然好處很大,但是只限于用戶模塊的功能,以后能不能所有的模塊全部不需要在寫了 答:有:工具類的抽取(base extends HttpServlet) } //登錄 Public String LoginUI( HttpServletRequest request){ //到登錄頁面 //request.getRequest.Dispacher(/jsp/login.jsp) Return “jsp/login.jsp” } //注冊 重定向 Public String RegistUI( HttpServletRequest request){ //注冊 //request.getRequest.Dispacher(/jsp/regist.jsp) Return “/jsp/regist.jsp ” } //重定向() Public String zhuce(request,response){ resonse.sendRedirect(“”) Return null; } 5.創(chuàng)建一個servlet工具類base之后的servlet類只需要繼承他并且去掉doGet與doPost,只需要寫自己的方法就好,需要用doGet與doPost就找父類 doGet()}{ Try(){} Class.forName(“cn.baidu.web.UserServlet”) 或者Class clazz =this.getClass(); String me = request.getParameter(“method”)) Method method = clazz.getMethod(me,HttpServletRequest.cass.....) String value = (String)method.invoke(clazz.newInstance(),request,response) //做一個統(tǒng)一的請求轉(zhuǎn)發(fā) If(value!=null){ request.getRequestDispacher(Value).forward(request,response) } 問:反射的方式解決了頻繁編寫 if else問題 //雖然好處很大,但是只限于用戶模塊的功能,以后能不能所有的模塊全部不需要在寫了 答:有:工具類的抽取(base extends HttpServlet) } 6.UerServlet(注冊) 表單提交 action, method=”post” 隱藏域<input tyoe =hidden, name=”method” value =’regist’> //日期控件......有資料,只讀屬性 /把過濾器拿過來動態(tài)代理,編碼 配置文件XML中藥配置一個filter Url->/* 創(chuàng)建一個JAVABean(不要用int用Integer,int的默認(rèn)值是0,Integer默認(rèn)值是null) 不和業(yè)務(wù)邏輯起沖突 uid用UUID保證它唯一,激活碼 uuid+uuid Public String regist(reqest,response){ Try(){ //獲取注冊的所有頁面信息 Map<String,String[]> map = request.getParameter(); //創(chuàng)建一個bean User uer = new User(); //把map中的數(shù)據(jù)封裝到User中 BeanUtils.populate(user,map); //設(shè)置主鍵uid user.setUid(UUID.randomUUID().toString().replace(“-”,””)); //設(shè)置激活狀態(tài),剛注冊的時候是未激活狀態(tài) user.setState(0); //設(shè)置激活碼 uuid+uuid user.setCode(...); //調(diào)用service //以后工作中的開發(fā)都是面向接口開發(fā),好處是拓展性高 UserServic us = new UserServiceImpl();//多態(tài) Us.regist(user); Syso(數(shù)據(jù)注冊成功,可以給該用戶發(fā)郵件了) //注冊只要成功就給該用戶發(fā)郵件一個工具類mailUtils,一個jar包 //email就是收信人 emaliMsg是正文 String emaliMsg = “”+user.getName()+”<a href=’http://httplocalhost:8080/store/user?method=active&code=’’+user.getCode()> 點擊激活</a>” mailUtils. request.setAttribute(“msg”,”郵件發(fā)送成功,去郵件激活再登錄”) } }catch(Exeption e){ e.printStack... //請求轉(zhuǎn)發(fā)到另一個頁面 request.setAttribute(“msg”,”注冊失敗,稍后繼續(xù)..”); Return “ /jsp/**.jsp” } Return “/jsp/**.jsp”; } //激活 Public String active(Http..request,Http...response){ Try{ //先判斷數(shù)據(jù)庫中有沒有該用戶 String code = request.getParameter(“code”); UserService us = new UserService(); User user = us.findByCode(code); If(user==null){ //代表該用戶已經(jīng)從數(shù)據(jù)庫中移除了 request.setAttibute(“msg”,”激活失效,重新注冊”) Return ”/jsp/**.jsp” } //有的話就把狀態(tài)碼改成1 user.setState(1); //提示信息,激活成功,去登錄吧 request.setAttrubute(“msg”,”激活成功去登錄吧”) }catch(Exception e){ request.setAttribute(“msg”,”查詢用戶失敗,請稍后繼續(xù)”) } Return “/jsp/**.jsp” } //登錄的方法實現(xiàn) //也需要核實jsp中是否有這些name屬性 Public String login((Http..request,Http...response){ Try{ HttpSession session = request.getSession(); //獲取用戶名與密碼 String username = request.getParameter(“username”); String password = request.getParameter(“password”); //根據(jù)用戶名和密碼查詢該用戶 UserService us = new UserServiceImpl(); User user =us.findUser(username,password); If(user==null){ Request.setA...(“msg”,”用戶名或者密碼錯誤”) Return “/jsp...” } //判斷是否激活 If(user.getState()!=1){ Request.setA...(“msg”,”沒有激活,先激活再登錄”) Return “/jsp...” } //既有該用戶也做了激活 自動登錄=Request--->javabean---->服務(wù)器關(guān)閉了-->request中數(shù)據(jù)沒有了 Session--->javabean--->服務(wù)器關(guān)閉了---->session沒有銷毀 永遠(yuǎn)可以從session中拿到j(luò)avabean(用戶的信息永遠(yuǎn)在session中) session.setA...(“user”,”user”); //重定向 response.sendRedirect(request.getContextPath()+”/jsp/**.jsp”) //index.jsp中做el判斷 登錄注冊購物車 <c: if test=”${empty user}”> </c:if> <c: if test=”${ not empty user}”> “歡迎***登錄” 加一個購物車標(biāo)簽 </c:if> }catch(){ E.print..... Request.set...(“msg”,”失敗”) Return “/jsp/**.jsp” } Return null; } //用戶退出 點擊用戶退出就干掉session,在index.jsp中用戶退出標(biāo)簽中添加鏈接 Public String quit((Http..request,Http...response){ Try{ //獲取session HttpSeesion session = request.getSession(): Session.remove(“user”) //重定向 response.sendRedirect..... Return null; } }前臺分類信息展示 從數(shù)據(jù)庫獲取導(dǎo)航條的信息展示 分類商品的分頁展示 單個商品詳情 最新商品和熱門商品展示 特點: select 所需要的表: 分類表, 商品表 1.創(chuàng)建分類表 CREATE TABLE `category` ( `cid` varchar(32) NOT NULL, `cname` varchar(20) DEFAULT NULL, PRIMARY KEY (`cid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `category` VALUES ('1','手機(jī)數(shù)碼'),('172934bd636d485c98fd2d3d9cccd409','運動戶外'),('2','電腦辦公'),('3','家具家居'),('4','鞋靴箱包'),('5','圖書音像'),('59f56ba6ccb84cb591c66298766b83b5','aaaa'),('6','母嬰孕嬰'),('afdba41a139b4320a74904485bdb7719','汽車用品'); 2 創(chuàng)建商品表 CREATE TABLE `product` ( `pid` varchar(32) NOT NULL, `pname` varchar(50) DEFAULT NULL, `market_price` double DEFAULT NULL, `shop_price` double DEFAULT NULL, `pimage` varchar(200) DEFAULT NULL, `pdate` date DEFAULT NULL, `is_hot` int(11) DEFAULT NULL, // 熱門 0: 熱門 1 不熱門 `pdesc` varchar(255) DEFAULT NULL, `pflag` int(11) DEFAULT NULL, // 是否下架 0: 上架 1 下架 做邏輯刪除的 `cid` varchar(32) DEFAULT NULL, PRIMARY KEY (`pid`), KEY `sfk_0001` (`cid`), CONSTRAINT `sfk_0001` FOREIGN KEY (`cid`) REFERENCES `category` (`cid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `product` VALUES ('1','小米 4c 標(biāo)準(zhǔn)版',1399,1299,'products/1/c_0001.jpg','2015-11-02',1,'小米 4c 標(biāo)準(zhǔn)版 全網(wǎng)通 白色 移動聯(lián)通電信4G手機(jī) 雙卡雙待',0,'1'),('10','華為 Ascend Mate7',2699,2599,'products/1/c_0010.jpg','2015-11-02',1,'華為 Ascend Mate7 月光銀 移動4G手機(jī) 雙卡雙待雙通6英寸高清大屏,纖薄機(jī)身,智能超八核,按壓式指紋識別!!選擇下方“移動老用戶4G飛享合約”,無需換號,還有話費每月返還!',0,'1'),('11','vivo X5Pro',2399,2298,'products/1/c_0014.jpg','2015-11-02',1,'移動聯(lián)通雙4G手機(jī) 3G運存版 極光白【購機(jī)送藍(lán)牙耳機(jī)+藍(lán)牙自拍桿】新升級3G運行內(nèi)存·雙2.5D弧面玻璃·眼球識別技術(shù)',0,'1'),('12','努比亞(nubia)My 布拉格',1899,1799,'products/1/c_0013.jpg','2015-11-02',0,'努比亞(nubia)My 布拉格 銀白 移動聯(lián)通4G手機(jī) 雙卡雙待【嗨11,下單立減100】金屬機(jī)身,快速充電!布拉格相機(jī)全新體驗!',0,'1'),('13','華為 麥芒4',2599,2499,'products/1/c_0012.jpg','2015-11-02',1,'華為 麥芒4 晨曦金 全網(wǎng)通版4G手機(jī) 雙卡雙待金屬機(jī)身 2.5D弧面屏 指紋解鎖 光學(xué)防抖',0,'1'),('14','vivo X5M',1899,1799,'products/1/c_0011.jpg','2015-11-02',0,'vivo X5M 移動4G手機(jī) 雙卡雙待 香檳金【購機(jī)送藍(lán)牙耳機(jī)+藍(lán)牙自拍桿】5.0英寸大屏顯示·八核雙卡雙待·Hi-Fi移動KTV',0,'1'),('15','Apple iPhone 6 (A1586)',4399,4288,'products/1/c_0015.jpg','2015-11-02',1,'Apple iPhone 6 (A1586) 16GB 金色 移動聯(lián)通電信4G手機(jī)長期省才是真的省!點擊購機(jī)送費版,月月送話費,月月享優(yōu)惠,暢享4G網(wǎng)絡(luò),就在聯(lián)通4G!',0,'1'),('16','華為 HUAWEI Mate S',4200,4087,'products/1/c_0016.jpg','2015-11-03',0,'華為 HUAWEI Mate S 臻享版 手機(jī) 極晝金 移動聯(lián)通雙4G(高配)滿星評價即返30元話費啦;買就送電源+清水套+創(chuàng)意手機(jī)支架;優(yōu)雅弧屏,mate7升級版',0,'1'),('17','索尼(SONY) E6533 Z3+',4099,3999,'products/1/c_0017.jpg','2015-11-02',0,'索尼(SONY) E6533 Z3+ 雙卡雙4G手機(jī) 防水防塵 澗湖綠索尼z3專業(yè)防水 2070萬像素 移動聯(lián)通雙4G',0,'1'),('18','HTC One M9+',3599,3499,'products/1/c_0018.jpg','2015-11-02',0,'HTC One M9+(M9pw) 金銀匯 移動聯(lián)通雙4G手機(jī)5.2英寸,8核CPU,指紋識別,UltraPixel超像素前置相機(jī)+2000萬/200萬后置雙鏡頭相機(jī)!降價特賣,驚喜不斷!',0,'1'),('19','HTC Desire 826d 32G',1599,1469,'products/1/c_0020.jpg','2015-11-02',1,'后置1300萬+UltraPixel超像素前置攝像頭+【雙】前置揚聲器+5.5英寸【1080p】大屏!',0,'1'),('2','中興 AXON',2899,2699,'products/1/c_0002.jpg','2015-11-05',1,'中興 AXON 天機(jī) mini 壓力屏版 B2015 華爾金 移動聯(lián)通電信4G 雙卡雙待',0,'1'),('20','小米 紅米2A 增強(qiáng)版 白色',649,549,'products/1/c_0019.jpg','2015-11-02',0,'新增至2GB 內(nèi)存+16GB容量!4G雙卡雙待,聯(lián)芯 4 核 1.5GHz 處理器!',0,'1'),('21','魅族 魅藍(lán)note2 16GB 白色',1099,999,'products/1/c_0021.jpg','2015-11-02',0,'現(xiàn)貨速搶,搶完即止!5.5英寸1080P分辨率屏幕,64位八核1.3GHz處理器,1300萬像素攝像頭,雙色溫雙閃光燈!',0,'1'),('22','Galaxy S5 (G9008W)',2099,1999,'products/1/c_0022.jpg','2015-11-02',1,'5.1英寸全高清炫麗屏,2.5GHz四核處理器,1600萬像素',0,'1'),('23','sonim XP7700 4G手機(jī)',1799,1699,'products/1/c_0023.jpg','2015-11-09',1,'三防智能手機(jī) 移動/聯(lián)通雙4G 安全 黑黃色 雙4G美國軍工IP69 30天長待機(jī) 3米防水防摔 北斗',0,'1'),('24','努比亞(nubia)Z9精英版 金色',3988,3888,'products/1/c_0024.jpg','2015-11-02',1,'移動聯(lián)通電信4G手機(jī) 雙卡雙待真正的無邊框!金色尊貴版!4GB+64GB大內(nèi)存!',0,'1'),('25','Apple iPhone 6 Plus (A1524) 16GB 金色',5188,4988,'products/1/c_0025.jpg','2015-11-02',0,'Apple iPhone 6 Plus (A1524) 16GB 金色 移動聯(lián)通電信4G手機(jī) 硬貨 硬實力',0,'1'),('26','Apple iPhone 6s (A1700) 64G 玫瑰金色',6388,6088,'products/1/c_0026.jpg','2015-11-02',0,'Apple iPhone 6 Plus (A1524) 16GB 金色 移動聯(lián)通電信4G手機(jī) 硬貨 硬實力',0,'1'),('27','三星 Galaxy Note5(N9200)32G版',5588,5388,'products/1/c_0027.jpg','2015-11-02',0,'旗艦機(jī)型!5.7英寸大屏,4+32G內(nèi)存!不一樣的SPen更優(yōu)化的浮窗指令!贈無線充電板!',0,'1'),('28','三星 Galaxy S6 Edge+(G9280)32G版 鉑光金',5999,5888,'products/1/c_0028.jpg','2015-11-02',0,'贈移動電源+自拍桿+三星OTG金屬U盤+無線充電器+透明保護(hù)殼',0,'1'),('29','LG G4(H818)陶瓷白 國際版',3018,2978,'products/1/c_0029.jpg','2015-11-02',0,'李敏鎬代言,F(xiàn)1.8大光圈1600萬后置攝像頭,5.5英寸2K屏,3G+32G內(nèi)存,LG年度旗艦機(jī)!',0,'1'),('3','華為榮耀6',1599,1499,'products/1/c_0003.jpg','2015-11-02',0,'榮耀 6 (H60-L01) 3GB內(nèi)存標(biāo)準(zhǔn)版 黑色 移動4G手機(jī)',0,'1'),('30','微軟(Microsoft) Lumia 640 LTE DS (RM-1113)',1099,999,'products/1/c_0030.jpg','2015-11-02',0,'微軟首款雙網(wǎng)雙卡雙4G手機(jī),5.0英寸高清大屏,雙網(wǎng)雙卡雙4G!',0,'1'),('31','宏碁(acer)ATC705-N50 臺式電腦',2399,2299,'products/1/c_0031.jpg','2015-11-02',0,'爆款直降,滿千減百,品質(zhì)宏碁,特惠來襲,何必苦等11.11,早買早便宜!',0,'2'),('32','Apple MacBook Air MJVE2CH/A 13.3英寸',6788,6688,'products/1/c_0032.jpg','2015-11-02',0,'寬屏筆記本電腦 128GB 閃存',0,'2'),('33','聯(lián)想(ThinkPad) 輕薄系列E450C(20EH0001CD)',4399,4199,'products/1/c_0033.jpg','2015-11-02',0,'聯(lián)想(ThinkPad) 輕薄系列E450C(20EH0001CD)14英寸筆記本電腦(i5-4210U 4G 500G 2G獨顯 Win8.1)',0,'2'),('34','聯(lián)想(Lenovo)小新V3000經(jīng)典版',4599,4499,'products/1/c_0034.jpg','2015-11-02',0,'14英寸超薄筆記本電腦(i7-5500U 4G 500G+8G SSHD 2G獨顯 全高清屏)黑色滿1000減100,狂減!火力全開,橫掃3天!',0,'2'),('35','華碩(ASUS)經(jīng)典系列R557LI',3799,3699,'products/1/c_0035.jpg','2015-11-02',0,'15.6英寸筆記本電腦(i5-5200U 4G 7200轉(zhuǎn)500G 2G獨顯 D刻 藍(lán)牙 Win8.1 黑色)',0,'2'),('36','華碩(ASUS)X450J 黑色獨顯',4599,4399,'products/1/c_0036.jpg','2015-11-02',0,'14英寸筆記本電腦 (i5-4200H 4G 1TB GT940M 2G獨顯 藍(lán)牙4.0 D刻 Win8.1 黑色)',0,'2'),('37','戴爾(DELL)靈越',3399,3299,'products/1/c_0037.jpg','2015-11-03',0,' Ins14C-4528B 14英寸筆記本(i5-5200U 4G 500G GT820M 2G獨顯 Win8)黑',0,'2'),('38','惠普(HP)WASD 暗影精靈',5699,5499,'products/1/c_0038.jpg','2015-11-02',0,'15.6英寸游戲筆記本電腦(i5-6300HQ 4G 1TB+128G SSD GTX950M 4G獨顯 Win10)',0,'2'),('39','Apple 配備 Retina 顯示屏的 MacBook',11299,10288,'products/1/c_0039.jpg','2015-11-02',0,'Pro MF840CH/A 13.3英寸寬屏筆記本電腦 256GB 閃存',0,'2'),('4','聯(lián)想 P1',2199,1999,'products/1/c_0004.jpg','2015-11-02',0,'聯(lián)想 P1 16G 伯爵金 移動聯(lián)通4G手機(jī)充電5分鐘,通話3小時!科技源于超越!品質(zhì)源于沉淀!5000mAh大電池!高端商務(wù)佳配!',0,'1'),('40','機(jī)械革命(MECHREVO)MR X6S-M',6799,6599,'products/1/c_0040.jpg','2015-11-02',0,'15.6英寸游戲本(I7-4710MQ 8G 64GSSD+1T GTX960M 2G獨顯 IPS屏 WIN7)黑色',0,'2'),('41','神舟(HASEE) 戰(zhàn)神K660D-i7D2',5699,5499,'products/1/c_0041.jpg','2015-11-02',0,'15.6英寸游戲本(i7-4710MQ 8G 1TB GTX960M 2G獨顯 1080P)黑色',0,'2'),('42','微星(MSI)GE62 2QC-264XCN',6199,5999,'products/1/c_0042.jpg','2015-11-02',0,'15.6英寸游戲筆記本電腦(i5-4210H 8G 1T GTX960MG DDR5 2G 背光鍵盤)黑色',0,'2'),('43','雷神(ThundeRobot)G150S',5699,5499,'products/1/c_0043.jpg','2015-11-02',0,'15.6英寸游戲本 ( i7-4710MQ 4G 500G GTX950M 2G獨顯 包無亮點全高清屏) 金',0,'2'),('44','惠普(HP)輕薄系列 HP',3199,3099,'products/1/c_0044.jpg','2015-11-02',0,'15-r239TX 15.6英寸筆記本電腦(i5-5200U 4G 500G GT820M 2G獨顯 win8.1)金屬灰',0,'2'),('45','未來人類(Terrans Force)T5',10999,9899,'products/1/c_0045.jpg','2015-11-02',0,'15.6英寸游戲本(i7-5700HQ 16G 120G固態(tài)+1TB GTX970M 3G GDDR5獨顯)黑',0,'2'),('46','戴爾(DELL)Vostro 3800-R6308 臺式電腦',3299,3199,'products/1/c_0046.jpg','2015-11-02',0,'(i3-4170 4G 500G DVD 三年上門服務(wù) Win7)黑',0,'2'),('47','聯(lián)想(Lenovo)H3050 臺式電腦',5099,4899,'products/1/c_0047.jpg','2015-11-11',0,'(i5-4460 4G 500G GT720 1G獨顯 DVD 千兆網(wǎng)卡 Win10)23英寸',0,'2'),('48','Apple iPad mini 2 ME279CH/A',2088,1888,'products/1/c_0048.jpg','2015-11-02',0,'(配備 Retina 顯示屏 7.9英寸 16G WLAN 機(jī)型 銀色)',0,'2'),('49','小米(MI)7.9英寸平板',1399,1299,'products/1/c_0049.jpg','2015-11-02',0,'WIFI 64GB(NVIDIA Tegra K1 2.2GHz 2G 64G 2048*1536視網(wǎng)膜屏 800W)白色',0,'2'),('5','摩托羅拉 moto x(x+1)',1799,1699,'products/1/c_0005.jpg','2015-11-01',0,'摩托羅拉 moto x(x+1)(XT1085) 32GB 天然竹 全網(wǎng)通4G手機(jī)11月11天!MOTO X震撼特惠來襲!1699元!帶你玩轉(zhuǎn)黑科技!天然材質(zhì),原生流暢系統(tǒng)!',0,'1'),('50','Apple iPad Air 2 MGLW2CH/A',2399,2299,'products/1/c_0050.jpg','2015-11-12',0,'(9.7英寸 16G WLAN 機(jī)型 銀色)',0,'2'),('6','魅族 MX5 16GB 銀黑色',1899,1799,'products/1/c_0006.jpg','2015-11-02',0,'魅族 MX5 16GB 銀黑色 移動聯(lián)通雙4G手機(jī) 雙卡雙待送原廠鋼化膜+保護(hù)殼+耳機(jī)!5.5英寸大屏幕,3G運行內(nèi)存,2070萬+500萬像素攝像頭!長期省才是真的?。?#39;,0,'1'),('7','三星 Galaxy On7',1499,1398,'products/1/c_0007.jpg','2015-11-14',0,'三星 Galaxy On7(G6000)昂小七 金色 全網(wǎng)通4G手機(jī) 雙卡雙待新品火爆搶購中!京東尊享千元良機(jī)!5.5英寸高清大屏!1300+500W像素!評價贏30元話費券!',0,'1'),('8','NUU NU5',1288,1190,'products/1/c_0008.jpg','2015-11-02',0,'NUU NU5 16GB 移動聯(lián)通雙4G智能手機(jī) 雙卡雙待 曬單有禮 晨光金香港品牌 2.5D弧度前后鋼化玻璃 隨機(jī)附贈手機(jī)套+鋼化貼膜 曬單送移動電源+藍(lán)牙耳機(jī)',0,'1'),('9','樂視(Letv)樂1pro(X800)',2399,2299,'products/1/c_0009.jpg','2015-11-02',0,'樂視(Letv)樂1pro(X800)64GB 金色 移動聯(lián)通4G手機(jī) 雙卡雙待樂視生態(tài)UI+5.5英寸2K屏+高通8核處理器+4GB運行內(nèi)存+64GB存儲+1300萬攝像頭!',0,'1'); 案例1-前臺分類信息展示 需求: 訪問任意頁面的時候,都需要將分類的信息展示出來 技術(shù)分析: 靜態(tài)包含 ajax異步的數(shù)據(jù)交互 要從redis中獲取數(shù)據(jù) 有數(shù)據(jù) 直接返回 無數(shù)據(jù) 從mysql中拿數(shù)據(jù) 放到redis中 然后返回 實現(xiàn)步驟: 1 抽取所有頁面上 logo和菜單部分(head.jsp) 頁面加載的時候 編寫函數(shù) 發(fā)送ajax請求 $.post(url,params,fn,type); url:/store/category params: method=findAll fn:將返回值遍歷,每一個分類封裝成li標(biāo)簽,插入到ul標(biāo)簽內(nèi)部 type:json 編寫categoryservlet,繼承baseservlet,編寫findAll方法 調(diào)用service,查詢所有的分類,分類列表的json字符串(String) 寫回頁面 categoryservice中的操作 調(diào)用dao,獲取所有的分類 將list轉(zhuǎn)成json返回 2 在所有的頁面里將 head.jsp 包含進(jìn)去 獲取返回值 遍歷返回值 每一個分類封裝成li標(biāo)簽,插入到ul標(biāo)簽內(nèi)部 3 使用redis進(jìn)行優(yōu)化(理解) 修改service層的代碼 獲取的時候,去redis中獲取, 若獲取到了返回 若沒有獲取到,先去mysql數(shù)據(jù)庫中查詢出來,將list轉(zhuǎn)成json放入redis中即可 ----------------------------------------------------------------------------------------------------- 案例2-分類商品的分頁展示 需求: 點擊菜單欄上某一個分類的時候,將該分類下的商品,分頁展示出來(默認(rèn)第一頁) 技術(shù)分析: 分頁 起始數(shù)據(jù) limit (當(dāng)前頁-1)*每頁顯示的條數(shù),每頁顯示的條數(shù) (重要)頁面上需要的數(shù)據(jù)(list) 當(dāng)前頁(pageNumber) 每頁顯示的條數(shù)(pageSize) 總頁數(shù)(totalPage) 總記錄數(shù)(totalCount) 總記錄數(shù)%每頁顯示的條數(shù)==0 總頁數(shù)=總記錄數(shù)/每頁顯示的條數(shù) pageBean 步驟分析: 1.修改head.jsp上的每個分類的超鏈接 <a href="/store/product?method=findByPage&pageNumber=1&cid=xxx"> 2.在cateservlet中編寫findByPage方法 獲取pagenumber 獲取cid 設(shè)置pageSize 調(diào)用service獲取分頁的數(shù)據(jù) 返回值:PageBean 將pagebean放入request域中,請求轉(zhuǎn)發(fā) /jsp/product_list.jsp 3.編寫service: 返回值:pagebean 創(chuàng)建一個pagebean 設(shè)置當(dāng)前頁需要的數(shù)據(jù) 調(diào)用dao 設(shè)置總記錄數(shù) 調(diào)用dao 4.dao 5.在jsp/product_list.jsp上展示商品 ----------------------------------------------------------------------------------------------------- 案例3-單個商品詳情 需求: 在首頁上點擊每個商品,將這個商品的詳細(xì)信息展示在頁面上(product_info.jsp) 步驟分析: 1.給每個商品添加超鏈接 <a href="/store/product?method=getById&pid=xxx">yy</a> 2 .編寫productservlet,繼承baseservlet,編寫getById 獲取商品的pid 調(diào)用service獲取一個商品 返回值:product 請求轉(zhuǎn)發(fā)到product_info.jsp 3.service ,dao 4.在product_info.jsp將商品展示 ------------------------------------------------------------------------------------------------ 案例4-最新商品和熱門商品展示 需求: 訪問首頁的時候,需要將最新商品和熱門商品展示出來. is_hot:是否熱門 熱門: 1 不熱門:0 pflag: 是否下架 (邏輯刪除) 沒下架: 0 下架了: 1 查最新: list =select * from product where pflag=0 order by date desc limit 0,9 查熱門: list=SELECT * FROM product WHERE pflag=0 AND is_hot=1 ORDER BY pdate DESC LIMIT 0,9; 步驟: 1.訪問項目首頁,請求轉(zhuǎn)發(fā)productServlet productServlet中處理 調(diào)用productservice查詢熱門商品和最新商品, 每一個都返回一個list 將兩個list放入request域中,請求轉(zhuǎn)發(fā)到 /jsp/index.jsp 2.在頁面上將數(shù)據(jù)遍歷出來 商城案例實現(xiàn) 今日內(nèi)容 (購物車模塊 訂單模塊) 購物車 生成訂單案例1-添加到購物車需求: 在商品的詳情頁面,輸入購買數(shù)量,點擊加入購物車,將該商品添加到購物車了技術(shù)分析: 一個用戶只有一個購物車,購物車?yán)锩娴纳唐范际怯脩襞R時選擇的 所以購物車的商品,我們并不會存在數(shù)據(jù)庫中 現(xiàn)實中: 購物車--->存放商品 在java代碼中: javabean---->商品數(shù)據(jù) 對等: Cart---->商品數(shù)據(jù)購物車 -------------------------------------> Cart 商品圖片 { 商品名稱 商品圖片屬性 商品價格 商品名稱屬性 商品數(shù)量 商品價格屬性 商品小計 商品數(shù)量屬性 商品的小計屬性 總金額 商品總金額的屬性 } 一個用戶---存2個商品(大冬瓜,小冬瓜,黃瓜)-----> Cart { 購物項對象的集合(3個購物項對象) 商品總金額的屬性 } 購物項(多個) CartItem { 商品圖片屬性 商品名稱屬性 商品價格屬性 ----替換成商品對象(好處:擴(kuò)展性很強(qiáng)) 商品數(shù)量屬性 商品的小計屬性 } 購物車(1個) Cart { 購物項集合(new CartItem) 商品總金額的屬性 }jack用戶---大冬瓜----CartItem(商品對象,商品數(shù)量,商品小計 )jack用戶---小冬瓜----CartItem(商品對象,商品數(shù)量,商品小計 ----Cart(購物項集合,總金額)任務(wù):封裝這2個對象CartItem 商品對象--->pid編號 商品數(shù)量--->購買數(shù)量 商品小計---商品對象.getshop_price*數(shù)量Cart 購物項集合 總金額(待定)////////////////////////////////案例2-從購物車移除一個商品需求: 在cart.jsp上,點擊某一個商品的 刪除 ,點擊確定,從購物車中移除.步驟分析: 1.給 刪除 添加連接 /store/cart?method=remove&pid=xxx 2.在cartservlet中編寫remove方法 獲取pid 獲取cart,執(zhí)行removeFromCart()方法 重定向到cart.jsp案例3-清空購物車需求: 點擊cart.jsp上的 清空購物車,需要將購物車中所有商品移除掉步驟分析: 1.修改 清空購物車的連接 /store/cart?method=clear 2.編寫clear方法 獲取購物車,執(zhí)行clearCart() 重定向到cart.jsp上 3.判斷購物車中是否有商品, 有則展示 無則提示/////////////////////////案例2-生成訂單需求: 在cart.jsp上,點擊 "提交訂單",將購物車中的商品,最終保存到數(shù)據(jù)庫中.技術(shù)分析: 要把購物車的而所有數(shù)據(jù)在生成訂單的時候,插入的數(shù)據(jù)庫的2張表上當(dāng)用戶開始點擊生成訂單的時候 會產(chǎn)生1個訂單以及N個訂單下的訂單商品 1個訂單詳情 (訂單編號,下單時間,訂單總金額....) N個訂單商品詳情 (訂單商品的數(shù)量 訂單商品的時間,訂單商品的id...) saveOrders(對象) 訂單表(orders) 訂單ID: UUID 訂單時間: 點擊生成訂單的當(dāng)前系統(tǒng)時間 總金額: cart購物車對象中的總金額 訂單的狀態(tài): 0 未付款 1 已付款未發(fā)貨 2 以發(fā)貨未收貨 3 以收貨未評價 4 已結(jié)束 地址 姓名 電話 -------- 下訂單的時候不寫,在要付款的時候在填寫 saveOrderitem(對象) 訂單詳情表(orderitem) 訂單詳情ID: uuid 訂單ID: 訂單表的主鍵 商品ID: 商品表的主鍵 數(shù)量: 購物項里的數(shù)量 小計: 購物項里的小計需要的表 -- 訂單表 javabean=orders(封裝訂單時間,訂單編號,訂單總金額,訂單狀態(tài),訂單收貨人,訂單收貨人電話...) dao:insert into orders values(orders.getoid,) CREATE TABLE `orders` ( `oid` varchar(32) NOT NULL, `ordertime` date DEFAULT NULL, `total` double DEFAULT NULL, `state` int(11) DEFAULT NULL, `address` varchar(30) DEFAULT NULL, `name` varchar(20) DEFAULT NULL, `telephone` varchar(20) DEFAULT NULL, `uid` varchar(32) DEFAULT NULL, PRIMARY KEY (`oid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; javabean==orderitem(封裝所屬訂單,封裝該訂單項的數(shù)量,封裝該訂單項的小計..) dao:insert into orders values(orderitem.getitemid....) -- 訂單商品詳情表 CREATE TABLE `orderitem` ( `itemid` varchar(32) NOT NULL, `count` int(11) DEFAULT NULL, `subtotal` double DEFAULT NULL, `pid` varchar(32) DEFAULT NULL, // 訂單項下的商品 `oid` varchar(32) DEFAULT NULL, // 訂單項所屬的訂單 PRIMARY KEY (`itemid`), KEY `fk_0001` (`pid`), KEY `fk_0002` (`oid`), CONSTRAINT `fk_0001` FOREIGN KEY (`pid`) REFERENCES `product` (`pid`), CONSTRAINT `fk_0002` FOREIGN KEY (`oid`) REFERENCES `orders` (`oid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 商城案例實現(xiàn)今日內(nèi)容: 我的訂單(難點) 單個訂單詳情 在線支付(第三方的支付平臺--易寶(了解)) 權(quán)限過濾器//////////////////////////////////////////案例1-我的訂單需求: 在任意頁面上,點擊 "我的訂單" 將當(dāng)前用戶的訂單(包含訂單項列表)分頁展示出來技術(shù)分析: 分頁 多表查詢步驟分析: 1.修改 head.jsp 上"我的訂單"的連接 /store/order?method=MyOrder&pageNumber=1 2.在orderservlet中編寫 MyOrder 獲取pagenumber 設(shè)置pagesize 獲取當(dāng)前用戶的id 調(diào)用service完成分頁查詢操作:返回pagebean 將pagebean放入request域中,請求轉(zhuǎn)發(fā) order_list.jsp 3.service中操作 創(chuàng)建pagebean 設(shè)置總條數(shù) 設(shè)置當(dāng)前頁數(shù)據(jù) 4.dao中操作: 獲取當(dāng)前頁訂單數(shù)據(jù) sql:只能查詢訂單的基本信息,沒有訂單項 select * from orders where uid = ? order by ordertime desc limit ?,? 執(zhí)行上面的sql,返回的 List<Order> 遍歷orderlist集合,獲取到每一個訂單,關(guān)聯(lián)查詢訂單項和商品表,將該訂單下的所有信息查詢出來, 封裝成orderItem,將每一個orderitem放入當(dāng)前order的訂單項列表中 SELECT * FROM orderitem oi,product p WHERE oi.pid = p.pid AND oi.oid = '8727C1B22C214E6D865ECFB3B118E330' 上面的結(jié)果用什么封裝??? 使用maplisthandler封裝, 將查詢結(jié)果的每一條記錄封裝成map (key:字段名(和bean屬性名一樣),value:具體指),將所有的map放入list中返回 遍歷map的list,獲取每一個訂單的詳情,使用beanutils進(jìn)行封裝即可 封裝orderitem和product對象,最后將orderitem對象放入訂單項列表中 [{itemid=xxxx,pname=華為,...},{itemid=uyyyyx,pname=中興,...}]--------------------------------------------------------------------------------------------------- 案例2-訂單詳情需求: 在訂單列表頁面上點擊 "去付款",展示出當(dāng)前的訂單的詳情.步驟分析: 1.修改 "去付款" 連接 /store/order?method=payOrderPage&oid=xxxx 2.在orderservlet編寫payOrderPage方法 獲取oid 調(diào)用service查詢單個訂單 返回值:order 將order放入request域中,請求轉(zhuǎn)發(fā)到order_info.jsp 3.service中操作 4.dao中操作 先查詢訂單信息 select * from orders where oid = ? 再查詢當(dāng)前訂單的訂單項 select * from orderitem oi,product p where oi.pid = p.pid and oi.oid=? 使用maplisthandler進(jìn)行封裝 獲取每一個訂單項詳情,封裝成orderitem,最后將orderitem添加到訂單的訂單項列表項即可 ---------------------------------------------------------------------------------------------------案例3-在線支付需求: 在詳情頁面上 輸入收貨人信息,選擇支付的銀行,點擊確認(rèn)訂單,保存收獲人信息,跳轉(zhuǎn)到銀行頁面,輸入用戶名(卡號),點擊支付, 最后跳轉(zhuǎn)到商城,提示 訂單支付成功,(修改訂單的狀態(tài))技術(shù)分析: 在線支付/////////////////////在線支付: 對銀行 對第三方 /////////////////////////////////支付步驟的分析: 1.在訂單詳情頁面上 填寫收貨人信息, 選擇支付銀行,點擊"確認(rèn)訂單",向商城發(fā)送請求 表單提交 收貨人信息 支付銀行 訂單號 路徑: /store/order?method=payorder 2.在orderservlet中 編寫pay方法 接受收貨人信息 訂單號 調(diào)用service獲取訂單, 設(shè)置收貨人信息 更新訂單 拼接重定向的字符串支付成功之后的步驟分析: 編寫callback方法 獲取第三方發(fā)送過來的數(shù)據(jù)(order_id) 通過id獲取訂單 修改訂單的狀態(tài) =1 更新訂單 ---------------------------------------------------------------------------------------------案例4-權(quán)限過濾需求: 訪問購物車的時候,需要判斷用戶是否登錄,若沒有登錄,則提示技術(shù)分析: 過濾器過濾器編寫步驟: 1.編寫一個類 PrivilegeFilter 實現(xiàn)filter接口 重寫方法(主要doFilter) 2.編寫配置文件 filter filter-mapping步驟分析: doFilter方法中的邏輯 從session中獲取用戶, 判斷用戶是否為空 若為空:提示"請先登錄",請求轉(zhuǎn)發(fā)到 /jsp/msg.jsp return ///////////////////////////////////////////////// 商城案例的后臺實現(xiàn)回顧: jquery easyUi 作用:增強(qiáng)用戶界面,完成了與服務(wù)器數(shù)據(jù)交互(異步方式)的功能環(huán)境搭建: 3個css文件+2個js文件 easyui.css + images圖片 themes/bootstrap/easyui.css + images圖片 icon.css+icons圖標(biāo)圖片 themes/incos(incos.css) demo.css demo/demo.css js庫 jquery.easyui.min.js jquery-easyui-1.4.2/(jquery.easyui.min.js/jquery.min.js) 如果將一個普通的html標(biāo)簽渲染成easyui插件? 如果給這個插件設(shè)置屬性,事件,方法?例如: ps : add('abc'); 不加單引號僅限于數(shù)值類型 如果涉及到了字符串類型就必須得加單引號,如果不加,它會認(rèn)為是一個變量靜態(tài)方式/css方式 特點: 都在標(biāo)簽體內(nèi)設(shè)置 <div class="easyui-dialog" data-options="屬性,事件,方法"></div> 就是在標(biāo)簽體內(nèi)通過屬性class的值 easyui-組件名來渲染 就是標(biāo)簽體內(nèi)通過屬性data-options來設(shè)置該插件的屬性,事件和方法動態(tài)方式/js方式 特點: 需要寫js代碼 <div id="d"></div> <script> // 將html標(biāo)簽渲染成easy組件并設(shè)置屬性 $("標(biāo)簽體").組件名( { 屬性名1:屬性值1, 屬性名2:屬性值2, 屬性名3:屬性值3 } ) // 將html標(biāo)簽渲染成easy組件并設(shè)置事件 $("標(biāo)簽體").組件名( { 事件名1:function(){}, 事件名2:function(){}, 事件名3:function(){}, } ) // 將html標(biāo)簽渲染成easy組件并設(shè)置方法 $("標(biāo)簽體").組件名("該組件提供的方法名","方法參數(shù)") 方法參數(shù)有2種: 1 一個值: 直接寫 2 多個值: { 值名1:值1, 值名2:值2, 值名2:值2 } </script>datagrid-data1.json {"total":28,"rows":[ {"productid":"FI-SW-01","productname":"Koi","unitcost":10.00,"status":"P","listprice":36.50,"attr1":"Large","itemid":"EST-1"}, {"productid":"K9-DL-01","productname":"Dalmation","unitcost":12.00,"status":"P","listprice":18.50,"attr1":"Spotted Adult Female","itemid":"EST-10"}, {"productid":"RP-SN-01","productname":"Rattlesnake","unitcost":12.00,"status":"P","listprice":38.50,"attr1":"Venomless","itemid":"EST-11"}, {"productid":"RP-SN-01","productname":"Rattlesnake","unitcost":12.00,"status":"P","listprice":26.50,"attr1":"Rattleless","itemid":"EST-12"}, {"productid":"RP-LI-02","productname":"Iguana","unitcost":12.00,"status":"P","listprice":35.50,"attr1":"Green Adult","itemid":"EST-13"}, {"productid":"FL-DSH-01","productname":"Manx","unitcost":12.00,"status":"P","listprice":158.50,"attr1":"Tailless","itemid":"EST-14"}, {"productid":"FL-DSH-01","productname":"Manx","unitcost":12.00,"status":"P","listprice":83.50,"attr1":"With tail","itemid":"EST-15"}, {"productid":"FL-DLH-02","productname":"Persian","unitcost":12.00,"status":"P","listprice":23.50,"attr1":"Adult Female","itemid":"EST-16"}, {"productid":"FL-DLH-02","productname":"Persian","unitcost":12.00,"status":"P","listprice":89.50,"attr1":"Adult Male","itemid":"EST-17"}, {"productid":"AV-CB-01","productname":"Amazon Parrot","unitcost":92.00,"status":"P","listprice":63.50,"attr1":"Adult Male","itemid":"EST-18"}]}這個文件表示要給esayui返回的分頁數(shù)據(jù) EasyUI底層是用ajax做的,所以給easyUI回傳的時候,必須使用json回傳,也只能用json回傳數(shù)據(jù),(ajax回傳就是用json傳輸數(shù)據(jù)的.) 商城案例的實現(xiàn)上傳原理解釋: 下面是請求體: ----------------------7e111423100812 ----->傳統(tǒng)的方式 Content-Disposition:form-data:name="username" 整個請求體的內(nèi)容="request.getInputStream()"; lisi ----------------------7e111423100812 實現(xiàn)步驟: Content-Disposition:form-data:name="upload";filename="cs.txt" 1:根據(jù)分割線將整個請求體的內(nèi)容分成多個. Content-Type:text/plain 2:根據(jù)filename判斷哪些是普通表單項,哪些是上傳表單項 aaa 3.普通表單項:name和value bbbb 4.上傳表單項:表單項和表單內(nèi)容 cccccc io -- >服務(wù)器 |上傳: | 瀏覽器端有3個要求 apache:上傳工具包(企業(yè)開發(fā)) 1 form表單的提交方式必須得是post method=post 2 上傳框必須得有name屬性 <input type="file" name="upload" /> 3 表單的enctype屬性必須得是 multpart/form-data 在form表單里面有一個默認(rèn)屬性enctype,這個默認(rèn)屬性的默認(rèn)屬性值: enctype="application/x-www-form-urlencoded" url表單 只要玩上傳,這個enctype屬性值就必須修改了 enctype=multipart/form-data 多部分表單 ps:上傳就必須得是多部分表單 什么是url表單? 就是之前一直玩的 所有的內(nèi)容都在請求體里面,以url形式進(jìn)行參數(shù)的拼接 username=zhangsan&upload=cs.txt&password=123 什么是多部分表單? 所有的內(nèi)容也都在請求體里面,但是以一部分一部分進(jìn)行拼接的 ----------------------- 一部分 ------------------------- 一部分 --------------------------- 一部分 ............. 服務(wù)器的要求: 如果表單是以多部分進(jìn)行提交的,那么request的3中獲取數(shù)據(jù)的方法全部失效上傳: 瀏覽器對于上傳會要求3件事: 1 上傳框要有name屬性 name="upload" 2 表單的method必須是post method="post" 3 表單的enctype屬性必須得是 multipart/form-data 在表單里面有個entype屬性,這個屬性有一個默認(rèn)值: 你寫或則不寫都會有 enctype="application/x-www-form-urlencoded"(這個屬性表示告訴服務(wù)器給你上傳所有提交的內(nèi)容都是字符串,沒有二進(jìn)制的形式) url表單 從要玩上傳開始,這個屬性就必須要做更改,要把這個屬性改成: enctype="multipart/form-data"(該屬性以后文件是以二進(jìn)制形式傳輸?shù)? 多部分表單 什么是url(普通)表單? 什么是多部分表單? url(普通)表單: 就是之前一直玩的 username=zhangsan&password=123&hobby=eat&hobby=sleep.. 以url形式進(jìn)行數(shù)據(jù)拼裝傳遞的表單 多部分表單: --------------------------------------- 一部分 ----------------------------------------- 一部分 ------------------------------------------- 一部分 不論是url(普通)表單還是多部分表單,數(shù)據(jù)都在請求體 注意:如果是多部分的表單進(jìn)行提交,之前使用的request獲取數(shù)據(jù)的3種方式,全部失效部署應(yīng)用需求: 將我們自己的項目部署到linux下技術(shù)分析: 1 linux的環(huán)境 安裝jdk 安裝tomcat 安裝mysql 安裝redis 2 如何把已完成的項目給linux 項目打包: 后綴名: .war 通過ide工具: 在項目右鍵-->export-->搜索 war -->選擇目的地 特點:在web服務(wù)器下的webapps目錄下,隨著服務(wù)器的啟動而解壓 3 如何把數(shù)據(jù)庫表和數(shù)據(jù)給linux 數(shù)據(jù)備份還原: 數(shù)據(jù)備份 導(dǎo)出本地數(shù)據(jù)庫中的表結(jié)構(gòu)和數(shù)據(jù) 數(shù)據(jù)遷移 導(dǎo)入表結(jié)構(gòu)和數(shù)據(jù)到linux下的數(shù)據(jù)庫注意: 中文亂碼 在連接的url后面追加: ?useUnicode=true&characterEncoding=utf-8 重啟tomcat
關(guān)鍵詞:綜合
微信公眾號
版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。