版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1緒論1.1系統(tǒng)目的近幾年人們的消費(fèi)觀念在逐漸的發(fā)生改變,越來越多的人選擇在網(wǎng)路上購買自己所需要的產(chǎn)品,網(wǎng)購就需要快遞這個(gè)行業(yè)支撐。不知不覺中快遞已經(jīng)成為大多數(shù)人生活中一個(gè)必不可少的東西。為了能更好的服務(wù)大家,就需要一個(gè)良好的物流系統(tǒng)來實(shí)現(xiàn)。1.2需求描述在開始實(shí)現(xiàn)系統(tǒng)之前,首先得先做需求分析,有了良好的需求分析才能使得系統(tǒng)更好的進(jìn)行下去。該系統(tǒng)分為了兩大功能模塊:用戶模塊,管理員模塊。1.2.1用戶模塊a.注冊(cè),將用戶的姓名,密碼,手機(jī)號(hào)等信息記錄起來。b.登錄,用戶通過輸入用戶名和密碼登錄自己的賬號(hào),從而進(jìn)行更多的操作,不僅保護(hù)了用戶自己的個(gè)人數(shù)據(jù)不被他人操作,也告訴了系統(tǒng)是哪個(gè)用戶在進(jìn)行操作。c.修改密碼,提高用戶體驗(yàn)d.評(píng)論,記錄用戶的評(píng)論能更好的了解用戶的需求,這樣有利于后期對(duì)系統(tǒng)的完善。e.下單,新增訂單,記錄用戶的快遞信息。f.訂單查詢,將訂單的詳細(xì)信息展示給用戶,提高用戶體驗(yàn)。1.2.2管理員模塊a.用戶的增刪改查,作為該系統(tǒng)的操作與維護(hù)者,需要有更多的權(quán)限。不僅可以新增普通用戶,而且也能新增配送員,還能增加管理員。b.訂單進(jìn)行增刪改查,能更好的展示數(shù)據(jù)的時(shí)效性。c.對(duì)用戶評(píng)論進(jìn)行回復(fù)。1.3系統(tǒng)的可行性分析技術(shù)可行性是決定整個(gè)物流管理系統(tǒng)成效的最直接的因素,沒有堅(jiān)實(shí)可靠的技術(shù)作為支持,物流管理系統(tǒng)就無法正常穩(wěn)定的運(yùn)行。研究人員首先需要分析物流管理系統(tǒng)的技術(shù)特點(diǎn),然后結(jié)合系統(tǒng)的應(yīng)用特點(diǎn)進(jìn)行全面分析這樣才能夠搭建一個(gè)良好的系統(tǒng)。因?yàn)閖ava是一門強(qiáng)大的而且簡單易用的面向?qū)ο笳Z言編程語言,Java具有簡單性、面向?qū)ο?、分布式、健壯性、安全性等特點(diǎn),能更好的滿足需求。Mysql也是一非常強(qiáng)大的數(shù)據(jù)庫,而且還是開源(免費(fèi))的。1.4開發(fā)環(huán)境該系統(tǒng)是一個(gè)基于jsp+Mysql實(shí)現(xiàn)的web系統(tǒng)。采用的是前后端分離技術(shù),前臺(tái)主要是html,css,js,jQuery,jsp,Ajax來實(shí)現(xiàn)的,后端采用的編程預(yù)言是java,java代碼來處理操作數(shù)據(jù)的邏輯,持久層是利用Mysql數(shù)據(jù)庫來記錄數(shù)據(jù)。前端主要用的是WebStorm這款軟件編寫的,java代碼是用eclipse編寫的,持久層使用Navicat來編寫sql語句。雖然eclipse這一個(gè)應(yīng)用軟件能滿足以上代碼的編寫,但其對(duì)于前端的編程和sql的編寫太過于繁瑣,所以為了提高代碼的質(zhì)量,采用了三款軟件對(duì)代碼進(jìn)行編寫。該系統(tǒng)是在Windows操作系統(tǒng),jdk1,8,Tomcat下設(shè)計(jì)實(shí)現(xiàn)的。2系統(tǒng)相關(guān)技術(shù)2.1JspServlet是sun公司制定的一種擴(kuò)展web服務(wù)器功能的組件規(guī)范。web服務(wù)器只能夠處理靜態(tài)資源的請(qǐng)求(即需要事先將靜態(tài)頁面寫好),不能夠處理動(dòng)態(tài)資源的請(qǐng)求(即需要進(jìn)行計(jì)算,生成動(dòng)態(tài)頁面),所以,需要擴(kuò)展其功能??梢允褂肧ervlet來擴(kuò)展web服務(wù)器功能,web服務(wù)器收到請(qǐng)求之后,如果需要計(jì)算,則調(diào)用Servlet來處理。圖2-1Servlet工作原理圖Servlet的工作主要分成6步:a.瀏覽器依據(jù)ip和port建立連接。b.瀏覽器將相關(guān)數(shù)據(jù)放到請(qǐng)求數(shù)據(jù)包,然后將請(qǐng)求數(shù)據(jù)包發(fā)送給服務(wù)器。c.服務(wù)器解析請(qǐng)求數(shù)據(jù)包,將解析到的結(jié)果放到請(qǐng)求對(duì)象里面,同時(shí),創(chuàng)建一個(gè)響應(yīng)對(duì)象。d.服務(wù)器依據(jù)請(qǐng)求路徑,創(chuàng)建Servlet對(duì)象,然后調(diào)用該對(duì)象的service方法。e.容器從響應(yīng)對(duì)象中取出處理結(jié)果,然后創(chuàng)建響應(yīng)數(shù)據(jù)包并發(fā)送給瀏覽器。f.瀏覽器解析響應(yīng)數(shù)據(jù)包,生成結(jié)果頁面。jsp是sun公司制訂的一種服務(wù)器端動(dòng)態(tài)頁面技術(shù)規(guī)范。其本質(zhì)就是一個(gè)Servlet。雖然可以使用Servlet來實(shí)現(xiàn)動(dòng)態(tài)頁面效果,但是過于繁瑣,并且不利于頁面的維護(hù)(比如,要修改頁面就必須修改java代碼),所以,sun制訂了一個(gè)全新的技術(shù)規(guī)范,即jsp規(guī)范。jsp文件中主要包含了html和少量的java代碼,容器在啟動(dòng)的時(shí)候會(huì)將jsp文件自動(dòng)編譯成一個(gè)對(duì)應(yīng)的Servlet然后執(zhí)行。2.2Ajax在傳統(tǒng)開發(fā)模式中,瀏覽器向服務(wù)器提交請(qǐng)求的方式有:改變?yōu)g覽器地址欄中的URL、FORM表單,這2種方式發(fā)出請(qǐng)求后,由瀏覽器直接處理服務(wù)器的響應(yīng),而瀏覽器的響應(yīng)方式就是直接把響應(yīng)正文顯示在瀏覽器中!為了使得客戶端可以自行發(fā)出請(qǐng)求,并自行處理結(jié)果,而不是由瀏覽器把響應(yīng)的結(jié)果直接顯示出來,則需要使用到異步請(qǐng)求!AJAX是在網(wǎng)頁客戶端通過Javascript發(fā)出異步請(qǐng)求的做法,傳統(tǒng)的AJAX開發(fā)比較麻煩,通常,會(huì)結(jié)合jQuery框架來使用。其發(fā)送的是json類型的數(shù)據(jù)。其語法特征是:整個(gè)數(shù)據(jù)是使用大括號(hào)框住的;各組屬性之間使用逗號(hào)分隔;使用冒號(hào)分隔屬性名稱與屬性值;屬性名稱使用雙引號(hào)框住;如果屬性值是字符串,也需要使用雙引號(hào)框?。粚傩灾悼梢允腔拘蛿?shù)據(jù)(數(shù)值型、字符串、布爾值),也可以是另一個(gè)對(duì)象(使用`{}`),或數(shù)組(使用`[]`)。2.3MysqlMysql是一個(gè)非常流行的關(guān)系型數(shù)據(jù)庫,由于該系統(tǒng)是一個(gè)WEB應(yīng)用,而Mysql在WEB應(yīng)用方面是最好關(guān)系數(shù)據(jù)庫管理系統(tǒng)應(yīng)用軟件,所以該系統(tǒng)采用的是Mysql數(shù)據(jù)庫。2.4SSM框架SSM框架,即Spring、SpringMVC、MyBatis三個(gè)框架,SSM框架也是非常流行的2.4.1SpringSpring是一個(gè)輕量級(jí)的、用來簡化企業(yè)級(jí)應(yīng)用開發(fā)的開發(fā)框架。Spring的一個(gè)核心模塊是Spring容器,用于管理對(duì)象(包括對(duì)象的創(chuàng)建及對(duì)象之間的依賴關(guān)系)。Spring的核心技術(shù)為IOC和AOP。IOC(InversionOfControll控制反轉(zhuǎn))對(duì)象之間的依賴關(guān)系應(yīng)該由容器來建立,,對(duì)象之間的耦合度會(huì)大大降低,提供高了系統(tǒng)的維護(hù)性。AOP即面向切面編程,是面向?qū)ο缶幊痰难永m(xù),AOP使得業(yè)務(wù)邏輯變得更加清晰,可以讓業(yè)務(wù)邏輯只關(guān)注業(yè)務(wù)本身。2.4.2SpringMVCSpringMVC框架解決了V-C的交互問題,即視圖與控制器的交互問題。SpringMVC組件:DispatcherServlet:前端控制器,主要職責(zé)是接收所有請(qǐng)求(根據(jù)配置文件來決定),并將請(qǐng)求轉(zhuǎn)發(fā)給對(duì)應(yīng)的控制器,接收控制器的處理結(jié)果,確定最終由哪個(gè)視圖完成響應(yīng)!HandlerMapping:處理請(qǐng)求路徑與控制器的映射關(guān)系。Controller:實(shí)際處理請(qǐng)求的組件,例如接收請(qǐng)求參數(shù),決定最終是轉(zhuǎn)發(fā)或重定向的方式來響應(yīng)。ModelAndView:控制器的處理結(jié)果,其中的Model表示轉(zhuǎn)發(fā)的數(shù)據(jù)(如果是重定向,則Model沒有意義),而View表示最終負(fù)責(zé)響應(yīng)的視圖組件的名稱。ViewResolver:根據(jù)視圖組件的名稱,確定具體使用的是哪個(gè)視圖組件。圖2-2SpringMVC的原理圖2.4.3MyBatisMyBatis是優(yōu)秀的、簡化持久層開發(fā)的框架,MyBatis簡單易用,使用時(shí)只要定義數(shù)據(jù)操作接口的抽象方法,然后在編寫與之關(guān)聯(lián)的sql語句。MyBatis是一個(gè)獨(dú)立的框架,能單獨(dú)使用,但是比較麻煩,結(jié)合Spring框架和SpringMVC來使用會(huì)使得操作變得相對(duì)簡單。3系統(tǒng)數(shù)據(jù)庫的設(shè)計(jì)3.1用戶信息表(user)用戶信息表記錄的是用戶的詳細(xì)信息。其結(jié)構(gòu)如下:表3-1用戶信息表字段名稱類型含義idint主鍵,表示數(shù)據(jù)的唯一性u(píng)sernamevarchar(15)用戶姓名user_telvarchar(15)用戶手機(jī)號(hào)碼passwordchar(32)密碼customer_idint用戶類型(包含普通用戶,管理員,配送員)saltchar(32)鹽值is_deleteint是否刪除,用來判斷數(shù)據(jù)是否被刪除created_timedatetime創(chuàng)建時(shí)間created_uservarchar(20)創(chuàng)建人modified_uservarchar(20)最后一次修改人modified_timedatetime最后一次修改時(shí)間其中varchar表示為可變長度的字符串,括號(hào)后面的數(shù)字表示字符串的最大長度;char表示固定長度的字符串,括號(hào)里面的數(shù)字表示的是字符串的長度;datetime是用來保存時(shí)間的類型,保存年月日時(shí)分秒,默認(rèn)值為null,最大值9999-12-31。表中后四個(gè)字段是用來記日志的,方便追蹤數(shù)據(jù)。3.2評(píng)論信息表(comment)評(píng)論信息表記錄的是用戶的評(píng)論信息和管理員回復(fù)信息,其結(jié)構(gòu)如下:字段名稱類型含義idint主鍵,表示數(shù)據(jù)的唯一性customer_idint客戶id,用來記錄評(píng)論的用戶REMAKEvarchar(100)用戶評(píng)論內(nèi)容REPLYvarchar(100)管理員回復(fù)內(nèi)容REPLY_idint管理員id,用來記錄回復(fù)管理員信息is_deleteint是否刪除,用來判斷數(shù)據(jù)是否被刪除created_timedatetime創(chuàng)建時(shí)間created_uservarchar(20)創(chuàng)建人modified_timevarchar(20)最后一次修改人modified_userdatetime最后一次修改時(shí)間表3-2評(píng)論信息表(comment)3.3地址管理表(t_area)物流是離不開地址管理的,所以應(yīng)當(dāng)創(chuàng)建一個(gè)地址管理表來將全國的地址信息記錄下來,由于全國的省市縣數(shù)據(jù)量較大,所以不可能去一條條的新增,而且關(guān)于地址的管理網(wǎng)上有很多現(xiàn)成的sql,可拿過來直接使用,其表結(jié)構(gòu)如下:表3-3地址管理表(t_area)字段名稱類型含義areaIdint地區(qū)IdareaCodevarchar(50)地區(qū)編碼areaNamevarchar(20)地區(qū)名levelint地區(qū)級(jí)別(1:省份,2:市3:區(qū)縣cityCodevarchar(50)城市編碼centervarchar(50)城市中心點(diǎn)(即:經(jīng)緯度坐標(biāo))parentIdint地區(qū)父節(jié)點(diǎn)地址表里面的數(shù)據(jù)是固定的,所以沒有添加日志四項(xiàng)和is_delete字段。3.4枚舉值表(fix_code)枚舉值表用來記錄不同的枚舉值,比如用戶的類型,訂單的狀態(tài)等,相較于直接使用值類型去做判斷,枚舉類型更易讀,能夠提升代碼的可讀性和易維護(hù)性。該表結(jié)構(gòu)如下:表3-4枚舉值表(fix_code)字段名稱類型含義CODE_TYPEvarchar(20)枚舉值類型CODEint枚舉值CODE_NAMEvarchar(20)枚舉名稱TYPE_NAMEvarchar(20)枚舉類型名稱created_timedatetime創(chuàng)建時(shí)間created_uservarchar(20)創(chuàng)建人modified_timedatetime最后一次修改時(shí)間modified_uservarchar(20)最后一次修改人3.5訂單信息表(t_order)訂單信息表記錄的是訂單的詳細(xì)信息。其結(jié)構(gòu)如下:表3-5訂單信息表(t_order)字段名稱類型含義idint主鍵,表示數(shù)據(jù)的唯一性mail_namevarchar(20)寄件人姓名mail_telint寄件人手機(jī)號(hào)碼mail_pidint寄件省idmail_cidint寄件市idmail_aidint寄件區(qū)/縣idmail_addressvarchar(50)寄件詳細(xì)地址receipt_namevarchar(20)收件人姓名receipt_telvarchar(20)收件人手機(jī)號(hào)碼receipt_pidint收件省idreceipt_cidint收件市idreceipt_aidint收件區(qū)/縣idreceipt_addressvarchar(50)收件詳細(xì)地址statusint訂單狀態(tài)(枚舉值)is_deleteint是否刪除created_timedatetime創(chuàng)建時(shí)間created_uservarchar(20)創(chuàng)建人modified_timedatetime最后一次修改時(shí)間modified_uservarchar(20)最后一次修改人4系統(tǒng)設(shè)計(jì)4.1系統(tǒng)結(jié)構(gòu)圖4-1系統(tǒng)結(jié)構(gòu)圖系統(tǒng)的名稱為SF-logistics,是一個(gè)Mavenwar系統(tǒng)。在src/main/java目錄下創(chuàng)建包c(diǎn)om.cbb.logistics來存放java代碼,其內(nèi)部結(jié)構(gòu)如下:圖4-2java代碼結(jié)構(gòu)圖其中controller包存放的都是控制器類;entity包下存放的都是實(shí)體類,filter下存放的是過濾器;interceptor目錄下存放的是攔截器;mapper類下面存放的是持久層接口;service包下存放的是業(yè)務(wù)層接口,其子包ex下存放的是異常類,子包impl下存放的是業(yè)務(wù)層實(shí)現(xiàn)類。util包下存放的是幫助類;VO類存放的是多表查詢的實(shí)體類。每個(gè)包下存放的類都應(yīng)當(dāng)屬于同一類型,這樣使得結(jié)構(gòu)清晰,方便閱讀和維護(hù)。所有的前臺(tái)代碼都存放在src/main/webapp目錄下,其內(nèi)部結(jié)構(gòu)如下:圖4-3前端代碼結(jié)構(gòu)圖其中web文件夾下面存放的是.html文件;css文件夾下面存放的是.css文件,js目錄下存放的是.js文件;img目錄下存放的是圖片;WEB-INF目錄下有.jsp文件,還有配置文件web.xml,該目錄下的.jsp文件是不能直接通過瀏覽器輸入地址訪問的,必須是服務(wù)器內(nèi)部通過轉(zhuǎn)發(fā)或重定向才能訪問。持久層的代碼寫在src/main/resources下的mapper文件夾下面,一個(gè)xml映射文件,都會(huì)對(duì)應(yīng)一個(gè)持久層接口,對(duì)應(yīng)關(guān)系為xml文件的namespace值與持久層接口的全限名相同;而xml文件中的每一個(gè)Statement的id屬性值與的接口的方法名相等而形成對(duì)于關(guān)系;接口方法內(nèi)的參數(shù),就是傳遞給sql的參數(shù)。Mapper接口是沒有實(shí)現(xiàn)類的,當(dāng)調(diào)用接口方法時(shí),接口全限名+方法名拼接字符串作為主鍵值,可唯一對(duì)應(yīng)一個(gè)MapperStatement對(duì)象。在Mybatis中,每一個(gè)增刪改查標(biāo)簽,都會(huì)被解析為一個(gè)MapperStatement對(duì)象。4.2用戶模塊4.2.1注冊(cè)由于大部分的表都含有日志的四項(xiàng),所以在設(shè)計(jì)實(shí)體類前,先設(shè)計(jì)實(shí)體類的基類。在entity包下面按照javaBean的設(shè)計(jì)模式創(chuàng)建實(shí)體類基類BaseEntity,將日志四項(xiàng)createdUser(創(chuàng)建人)、createdTime(創(chuàng)建時(shí)間)、moidifiedUser(修改人)、modifiedTime(修改時(shí)間)申明成私有屬性,并生成對(duì)應(yīng)的get、set方法和toString方法。并實(shí)現(xiàn)序列化接口Serializable,并生成序列化版本號(hào)。在entity中創(chuàng)建用戶實(shí)體類User,繼承BaseEntity,申明私有化屬性id(用戶自增長id)、username(用戶姓名)、userTel(用戶手機(jī)號(hào))、password(密碼)、customerId(用戶類型)、salt(鹽值)、isDelete(是否刪除),同樣生成get、set方法和toString方法。為了保護(hù)用戶的信息,需要對(duì)用戶的密碼進(jìn)行加密處理,而不是直接將用戶的密碼記錄在數(shù)據(jù)庫中。加密算法有:對(duì)稱加密、非對(duì)稱加密。無論是哪種,在已知加密過程的各項(xiàng)數(shù)據(jù)參數(shù)后,都可以根據(jù)密文運(yùn)算得到原文。通常,密碼的存儲(chǔ)并不使用這些加密算法,而是使用消息摘要(MessageDigest)算法。消息摘要的特征有:使用特定的摘要算法,得到的摘要數(shù)據(jù)的長度是固定的;使用相同的原文,必然得到相同的摘要;使用不同的原文,可能得到相同的摘要,但是,機(jī)率非常非常低;消息摘要是不可被逆運(yùn)算的!常見的消息摘要算法有SHA家族(SecureHashAlgorithm)算法,MD系列。在Java原生API中,有`java.security.MessageDigest`類,用于處理消息摘要運(yùn)算,但是,使用相對(duì)繁瑣,通常,會(huì)使用其它API來實(shí)現(xiàn),例如,在Spring和Apache中都有`DigestUtils`工具類,可以用于摘要運(yùn)算,前者需要添加Spring的依賴,后者需要添加`commons-codec`的依賴:<dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.10</version> </dependency>為進(jìn)一步增加密碼的安全性,采取了加鹽操作和多次加密操作,其方法如下: privateStringgetEncrpytedPassword(Stringpassword,Stringsalt){ Stringpwd=password+salt;//將密碼與鹽值拼接 for(inti=0;i<5;i++){//循環(huán)5次加密 pwd=DigestUtils.md5Hex(pwd); } returnpwd;//返回 }首先在com.cbb.logistics.mapper包下創(chuàng)建接口UserMapper,創(chuàng)建抽象方法Integerinsert(Useruser)和UserfindByName(Stringn);在src/main/resources下創(chuàng)建一個(gè)mapper文件夾,該文件夾下面存放放的是持久層接口對(duì)應(yīng)的xml文件。在該目錄下創(chuàng)建UserMapper.xml文件。在該xml文件中創(chuàng)建兩個(gè)方法的映射。業(yè)務(wù)層在com.cbb.logistics.service包下創(chuàng)建建IUserService接口,聲明抽象方法User(Useruser),com.cbb.logistics.service.impl包下創(chuàng)建其實(shí)現(xiàn)類UserServiceImpl,并重寫抽象方法如下:publicUseruserReg(Useruser){ //驗(yàn)證輸入格式 if(!TextValidator.checkUsername(user.getUsername())){ thrownewUsernameFormatException("用戶名格式不正確!"); } if(!TextValidator.checkPassword(user.getPassword())){ thrownewPasswordFormatException("密碼的格式不正確!"); } if(!TextValidator.checkPhone(user.getUserTel())){ thrownewPhoneFormatException("手機(jī)號(hào)碼的格式不正確!"); } Stringusername=user.getUsername(); //根據(jù)用戶名查詢用戶信息 Userdata=findByName(username); if(data!=null){//如果用戶已存在,則拋出用戶沖突異常 thrownewUsernameConflictException("您嘗試注冊(cè)的用戶名"+username+"以被占用!"); } //反之說明用戶是不存在的,則執(zhí)行插入數(shù)據(jù)操作 try{ Userr=insertUserInfo(user); returnr; }catch(InsertDataExceptione){ throwe; } } privateUserinsertUserInfo(Useruser){ //在參數(shù)user中封裝那些不由外部提供的數(shù)據(jù): //1.生成隨機(jī)鹽,并封裝到user中 Stringsalt=UUID.randomUUID().toString(); user.setSalt(salt); //2.取出user中原密碼執(zhí)行加密,并封裝回user中 Stringpassword=getEncrpytedPassword(user.getPassword(),salt); user.setPassword(password); //3.設(shè)置customerId為普通用戶(10001001) user.setCustomerId(FixCode.USER_TYPE_CUSTOMER); //4.設(shè)置isDelete為0 user.setIsDelete(FixCode.IS_DELETE_NO); //5.日志的4項(xiàng) user.setCreatedUser(FixCode.SYSTEM);//"System" user.setCreatedTime(newDate()); user.setModifiedUser(FixCode.SYSTEM); user.setModifiedTime(newDate()); //調(diào)用持久層對(duì)象的方法實(shí)現(xiàn)功能,并獲取返回值 Integerrows=userMapper.insert(user); if(rows!=1){//拋出InsertDataException異常 thrownewInsertDataException("增加用戶數(shù)據(jù)時(shí)發(fā)生未知錯(cuò)誤!請(qǐng)聯(lián)系系統(tǒng)的管理員進(jìn)行處理!"); } returnuser; }注冊(cè)前臺(tái)頁面如下:圖4-1用戶注冊(cè)圖首先在com.cbb.logistics.controller創(chuàng)建控制器層基類BaseController,可以在基類處理控制器層拋出的異常,和控制器層共有的方法。創(chuàng)建UserController繼承BaseController,添加類注解@Controller和@RequestMapping("/user"),通過添加@RequestMapping("/user")注解表示該控制器都在/user目錄下。創(chuàng)建注冊(cè)方法,在方法上添加注解@ResponseBody和@RequestMapping(value="/handle_reg.do",method=RequestMethod.POST),@ResponseBody表示返回值為json字符串,@RequestMapping注解的value表示請(qǐng)求路徑,method屬性的值表示前端發(fā)送的請(qǐng)求為POST請(qǐng)求。用戶填選數(shù)據(jù)進(jìn)行注冊(cè),通過注冊(cè)按鈕的點(diǎn)擊事件發(fā)送Ajax請(qǐng)求給后臺(tái),判斷返回值,如果是200表示注冊(cè)成功,則跳轉(zhuǎn)到登錄頁面;如果不是200,根據(jù)不同的返回值判斷注冊(cè)失敗原因,提示用戶按照要求注冊(cè)。4.2.2登錄登錄在持久層里利用注冊(cè)持久層的方法findByName。業(yè)務(wù)層在IUserService創(chuàng)建抽象方法Userlogin(Strringusername,Stringpassword);并在UserServiceImpl實(shí)現(xiàn)該方法如下:publicUseruserLogin(Stringusername,Stringpassword){ //驗(yàn)證格式 if(!TextValidator.checkUsername(username)){//用戶名格式不正確 thrownewUsernameFormatException("用戶名格式不正確!"); } if(!TextValidator.checkPassword(password)){//密碼格式不正確 thrownewPasswordFormatException("密碼格式不正確"); } Userdata=findByName(username);//根據(jù)用戶名查找用戶數(shù)據(jù) if(data==null){//用戶名不存在 thrownewUserNotFoundException("用戶名不存在!"); } Stringsalt=data.getSalt(); //獲取鹽值//將顏值和用戶輸入的密碼進(jìn)行加密 Stringpwd=getEncrpytedPassword(password,salt); if(!pwd.equals(data.getPassword())){//加密后的密碼和數(shù)據(jù)庫中用戶密碼不一致 thrownewPasswordNotMatchException("密碼錯(cuò)誤"); } data.setSalt(null);//登錄成功將密碼和顏值設(shè)置為null data.setPassword(null); returndata; }控制器層在UserController類中創(chuàng)建注冊(cè)方法:@ResponseBody @RequestMapping(value="/login.do",method=RequestMethod.POST) publicResponseResult<Void>userLogin(Stringusername,Stringpassword,HttpSessionsession){ //驗(yàn)證格式 if(!TextValidator.checkUsername(username)){//用戶名格式不正確 thrownewUsernameFormatException("用戶名格式不正確!"); } if(!TextValidator.checkPassword(password)){//密碼格式不正確 thrownewPasswordFormatException("密碼格式不正確"); } Useruser=userService.userLogin(username,password); //登錄 //將登錄成功的user的id和username和customerId綁定到session中 session.setAttribute("uid",user.getId()); session.setAttribute("uname",user.getUsername()); session.setAttribute("cid",user.getCustomerId()); returnnewResponseResult<Void>(); }并返回json給前端。前臺(tái)用戶通過輸入用戶名和密碼進(jìn)行登錄,當(dāng)用戶名密碼全部輸入正確后才能登錄,并將用戶的id和name和用戶類型綁定在session中。否則提示用戶錯(cuò)誤信息。后期的很多功能是建立在登錄上的,,而且不同的用戶的操作權(quán)限也是不相同的,這些都是通過獲取session中綁定的數(shù)據(jù)來進(jìn)行判斷的。4.2.3修改密碼登錄成功后,點(diǎn)擊用戶身份進(jìn)入用戶信息界面,將用戶的用戶名和手機(jī)號(hào)顯示出來,而一些敏感的數(shù)據(jù)如密碼就不顯示。用戶可以點(diǎn)擊修改密碼按鈕來修改密碼,只有當(dāng)原密碼輸入正確的時(shí)候才能修改密碼,一旦修改密碼操作成功,用戶就需要重新登錄。其頁面如下:圖4-2修改密碼4.2.4評(píng)論用戶可以進(jìn)行評(píng)論,該功能同樣是需要用戶進(jìn)行登錄操作。用戶進(jìn)入評(píng)論界面,首先展示10條最新的評(píng)論以及管理員的回復(fù),用戶可以在文本域中輸入內(nèi)容進(jìn)行評(píng)論,系統(tǒng)會(huì)將用戶輸入的信息和用戶的用戶id記錄下來,每當(dāng)用戶評(píng)論成功后會(huì)再次刷新評(píng)論區(qū)的內(nèi)容。4.2.5寄件用戶寄件也是需要用戶登錄才能進(jìn)行操作的。進(jìn)入寄件頁面,首先向服務(wù)器發(fā)送請(qǐng)求,將所有的省全部查詢出來,顯示到下拉選中供用戶選擇。當(dāng)用戶選擇對(duì)應(yīng)的省份后,會(huì)向服務(wù)器發(fā)送請(qǐng)求獲取當(dāng)前省對(duì)應(yīng)的市,同理當(dāng)市發(fā)送改變的時(shí)候會(huì)將對(duì)應(yīng)的區(qū)縣查詢出來。用戶通過填選寄件的詳細(xì)信息來下單,并會(huì)生成對(duì)應(yīng)的訂單號(hào),默認(rèn)提交的訂單狀態(tài)為已生成,當(dāng)訂單保存成功后,會(huì)跳轉(zhuǎn)到我的訂單頁面。訂單頁面會(huì)展示當(dāng)前登錄人創(chuàng)建的所有訂單詳細(xì)信息。圖4-3寄件人信息圖4-4收件人信息4.2.6訂單查詢用戶不僅能通過訂單頁面查詢自己創(chuàng)建的訂單,也可以通過輸入訂單號(hào)來查詢對(duì)應(yīng)的訂單。通過輸入號(hào)碼
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 混凝土及鋼筋工程冬季施工方案
- 二零二五年鋼筋加工廠員工勞動(dòng)合同模板2篇
- 2024年深圳職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測驗(yàn)歷年參考題庫(頻考版)含答案解析
- 二零二五年畜禽糞便處理與資源化利用合作協(xié)議3篇
- 2024年海南職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測驗(yàn)歷年參考題庫(頻考版)含答案解析
- 星銳時(shí)代廣場二期開盤全新
- 九年級(jí)歷史上冊(cè)第四單元封建時(shí)代的亞洲國家第12課阿拉伯帝國課件1新人教版
- 四年級(jí)語文上冊(cè)第一單元習(xí)作一個(gè)好地方習(xí)題課件新人教版
- 二零二五年度集裝箱運(yùn)輸拖車運(yùn)輸保險(xiǎn)合同2篇
- SMT車間管理課程
- 四年級(jí)道法上冊(cè)知識(shí)點(diǎn)
- 英語閱讀理解專項(xiàng)練習(xí)(40篇)
- TD-T 1046-2016 土地整治權(quán)屬調(diào)整規(guī)范
- 高陽小學(xué)2022-2023學(xué)年校內(nèi)人車分流方案
- 一種基于STM32的智能門鎖系統(tǒng)的設(shè)計(jì)
- 《諫太宗十思疏》《答司馬諫議書》-統(tǒng)編版高中語文必修下冊(cè)
- GB/T 42249-2022礦產(chǎn)資源綜合利用技術(shù)指標(biāo)及其計(jì)算方法
- 扶梯吊裝方案
- GB/T 26846-2011電動(dòng)自行車用電機(jī)和控制器的引出線及接插件
- GB/T 18015.1-1999數(shù)字通信用對(duì)絞或星絞多芯對(duì)稱電纜第1部分:總規(guī)范
- 2020-2021學(xué)年青島版五年級(jí)上冊(cè)期末考試數(shù)學(xué)試卷(1)1
評(píng)論
0/150
提交評(píng)論