背景
大三的暑假學(xué)校安排了去中軟國(guó)際昌平校區(qū)做項(xiàng)目,在兩周時(shí)間內(nèi)開發(fā)一個(gè)叫"口袋小食"的web商城,當(dāng)然這個(gè)項(xiàng)目不會(huì)投入實(shí)際使用, 只是用來練手的...
前端的靜態(tài)頁(yè)面和數(shù)據(jù)庫(kù)表大部分是老師已經(jīng)給好的,對(duì)前端的修改主要體現(xiàn)在添加了 thymeleaf 將靜態(tài)頁(yè)面轉(zhuǎn)為動(dòng)態(tài)頁(yè)面,也適當(dāng)修改了下數(shù)據(jù)庫(kù)表以更適合我們的需求
人員分工
我們是一個(gè)三人小團(tuán)隊(duì),另外兩位同學(xué)統(tǒng)一了開發(fā)環(huán)境、數(shù)據(jù)庫(kù)表、實(shí)體層后,他們負(fù)責(zé)了商城的前臺(tái),我負(fù)責(zé)后臺(tái)??梢哉f我們?nèi)硕际?全棧"工程師吧(手動(dòng)狗頭),任務(wù)是按照功能劃分的而不是技術(shù)要求,每個(gè)人都要進(jìn)行從數(shù)據(jù)庫(kù)( database )到數(shù)據(jù)操作層( dao )、實(shí)體層 entity 、服務(wù)層 service 、控制層 (controller) 、視圖層( view ) 的全流程實(shí)現(xiàn)...
項(xiàng)目演示與源碼
github 項(xiàng)目地址:
"口袋小食"web商城
**線上演示地址: **
//to supply
本地部署指導(dǎo):
- 在上面的
gtihub地址下載好項(xiàng)目壓縮包文件后解壓 - 用IDEA編輯器打開該項(xiàng)目(選擇項(xiàng)目地址為剛剛的解壓目錄)
- 打開后等一會(huì),IDEA會(huì)自動(dòng)安裝需要的依賴(需要聯(lián)網(wǎng),安裝進(jìn)度可以看編輯器下方的進(jìn)度條)
- 安裝
MySql(推薦用phpStudy替代,MySql安裝有很多坑,使用教程自行百度,很簡(jiǎn)單),將解壓目錄里數(shù)據(jù)庫(kù)文件夾下的demo.sql導(dǎo)入到MySql中,注意項(xiàng)目運(yùn)行時(shí)需要開啟數(shù)據(jù)庫(kù) - 點(diǎn)擊IDEA右上角的啟動(dòng)按鈕
演示指導(dǎo):
在瀏覽器訪問 127.0.0.1:8080 可訪問項(xiàng)目前臺(tái)頁(yè)面,在瀏覽器訪問 127.0.0.1:8080/EndPagesLogin 可訪問后臺(tái)頁(yè)面
演示前臺(tái)推薦使用賬號(hào)用戶名:zky,密碼:1 ,演示后臺(tái)推薦使用 用戶名:y,密碼:1,
可以在前臺(tái)的登錄頁(yè)注冊(cè)新的用戶賬號(hào)(普通用戶,使用前臺(tái)),后臺(tái)的賬號(hào)(管理員賬號(hào))只能手動(dòng)在數(shù)據(jù)庫(kù)里的tb_admin 表里添加
注意新注冊(cè)的普通用戶登錄后訪問 個(gè)人中心 會(huì)有Bug...
技術(shù)棧
架構(gòu)模式:MVC
前端:
html 、css 、 javascript 、 jquery 、 thymeleaf 、Ajax
后端:
java Spring boot maven mybatis
數(shù)據(jù)庫(kù):
MySQL
實(shí)現(xiàn)了的功能
前臺(tái)
- 登錄
- 注冊(cè)
- 商品搜索
- 首頁(yè)最新商品展示
- 首頁(yè)二級(jí)分類展示及跳轉(zhuǎn)(依據(jù)固定的一級(jí)分類)
- 購(gòu)物車:商品增刪、結(jié)算、收貨地址編輯
- 個(gè)人中心:個(gè)人信息展示
- 我的交易:訂單管理(訂單列表顯示)
后臺(tái)
登錄
用戶管理:列表顯示、編輯、搜索
類型管理:列表顯示、添加、編輯、刪除、搜索
品牌管理:列表顯示、添加、編輯、刪除、搜索
商品管理:列表顯示、添加、編輯、搜索
賬單管理 :列表顯示、編輯
進(jìn)一步完善思路
前臺(tái)需要完善的地方
bug比較多,比如說登錄時(shí)沒有未注冊(cè)賬號(hào)反饋、新注冊(cè)用戶登錄后點(diǎn)擊個(gè)人中心會(huì)報(bào)錯(cuò)(因?yàn)闀?huì)執(zhí)行查詢余額的SQL語(yǔ)句,而數(shù)據(jù)庫(kù)返回為空會(huì)報(bào)錯(cuò))
還有很多功能可以實(shí)現(xiàn),在實(shí)現(xiàn)了的功能中來回跳轉(zhuǎn)也會(huì)報(bào)錯(cuò)(因?yàn)樵诟鱾€(gè)頁(yè)面的跳轉(zhuǎn)鏈接沒有完善...)
后臺(tái)需要完善的地方
數(shù)據(jù)庫(kù)中賬單表是商品表的子表,所以刪除商品的前提是刪除所有其有關(guān)的賬單,而實(shí)際場(chǎng)景中賬單是不應(yīng)該被刪除的,所以商品最好做個(gè) 歸檔 的功能而不是刪除。
代碼復(fù)用做得也不好,控制層和前端的傳值的相關(guān)代碼有很多重復(fù),應(yīng)該可以通過封裝函數(shù)來減少代碼重復(fù)。
各個(gè)功能的頁(yè)面其實(shí)是直接 th:replace 在主頁(yè)面 index.html 里的,這是老師一開始給的靜態(tài)文件的方案,這種將全部子功能的頁(yè)面放在一個(gè)頁(yè)面上不太妥,而且我也是每次刷新主頁(yè)后將全部5個(gè)主功能的對(duì)象全部傳遞到 index.html 里的,感覺這種設(shè)計(jì)很不好,實(shí)際使用時(shí)不太有必要,不應(yīng)該是一次就使5個(gè)功能就緒的
技術(shù)介紹與擴(kuò)展
MVC 設(shè)計(jì)模式介紹
MVC是Model-View-Controller(模型-視圖-控制器)的縮寫,是一種混合設(shè)計(jì)模式。用到這種設(shè)計(jì)模式時(shí),我們所創(chuàng)建的對(duì)象要分為:Model 對(duì)象,View對(duì)象和Controller對(duì)象。
Model對(duì)象:負(fù)責(zé)存儲(chǔ)數(shù)據(jù)以及定義如何操作這些數(shù)據(jù)。
View對(duì)象:負(fù)責(zé)展示而且允許用戶編輯來自應(yīng)用程序的Model對(duì)象,View對(duì)象用來構(gòu)建用戶界面,與用戶交互。
Controller對(duì)象:是Model對(duì)象與View對(duì)象的中間人,負(fù)責(zé)傳遞數(shù)據(jù),監(jiān)聽各種事件,管理其他對(duì)象的生命周期等。
MVC與經(jīng)典三層結(jié)構(gòu)的關(guān)系
三層架構(gòu)絕不是MVC??!
三層架構(gòu)是界面層(UI)業(yè)務(wù)邏輯層(BLL)和數(shù)據(jù)訪問層(DAL)構(gòu)成的,而MVC是模型層(M)界面層(View)和控制層(Controller)構(gòu)成的,而且他們之間也不對(duì)應(yīng)。
如果硬要給他們對(duì)應(yīng)的話,那么三層架構(gòu)中的UI對(duì)應(yīng)MVC中的view(jsp),都是用于顯示以及獲取界面的數(shù)據(jù);三層架構(gòu)中的BLL層和DAL層對(duì)應(yīng)MVC中的Model(javabean)層都是用于處理上層傳遞來的數(shù)據(jù)以及從數(shù)據(jù)庫(kù)獲取的數(shù)據(jù)的;MVC中的Controller(Servlet)最多算是三層架構(gòu)中的UI的一部分,也就我們常說的是Servlet。其實(shí)三層架構(gòu)和MVC是一樣的?。。∥覀兯吹降牟灰粯又皇潜砻嫔系牟灰粯?。核心的東西是一致的,那么什么是核心?
答曰:分層,解耦!
如果從解耦的角度來看三層架構(gòu)和MVC其實(shí)他們是一致的,只不過劃分的方法不一樣罷了,就像上面的圖所示。從這一點(diǎn)說他們可以說是一個(gè)東西。這就相當(dāng)于我們看到饅頭和面條一樣,表面上看他們不一樣(注意僅僅是表面)但是他們核心是一致的,都是面……
拓展鏈接:mvc與三層結(jié)構(gòu)終極區(qū)別
Spring框架是什么
Spring是一個(gè)開源的輕量級(jí)Java SE(Java 標(biāo)準(zhǔn)版本)/Java EE(Java 企業(yè)版本)開發(fā)應(yīng)用框架,其目的是用于簡(jiǎn)化企業(yè)級(jí)應(yīng)用程序開發(fā)。應(yīng)用程序是由一組相互協(xié)作的對(duì)象組成
拓展鏈接:Spring是什么
Spring 、Spring boot、Spring MVC 概念辨析
Spring 是一個(gè)“引擎”;
Spring MVC 是基于Spring 的一個(gè) MVC 框架,只是 Spring 處理 web 層請(qǐng)求的一個(gè)模塊。
Spring Boot 是基于 Spring4 的條件注冊(cè)的一套快速開發(fā)整合包, 是通過 Spring 提供的一系列解決方案,包括MVC, boot不是框架,是一個(gè)集成很多優(yōu)秀框架的腳手架。
-
Spring框架就像一個(gè)家族,有眾多衍生產(chǎn)品例如 boot、security、jpa等等。但他們的基礎(chǔ)都是Spring 的 ioc和 aop ioc 提供了依賴注入的容器 aop ,解決了面向橫切面的編程,然后在此兩者的基礎(chǔ)上實(shí)現(xiàn)了其他延伸產(chǎn)品的高級(jí)功能。
-
Spring MVC是Spring的一個(gè)模塊,是基于Servlet的一個(gè)MVC框架。主要解決 WEB 開發(fā)的問題,因?yàn)?Spring 的配置非常復(fù)雜,各種XML、 JavaConfig、hin處理起來比較繁瑣。于是為了簡(jiǎn)化開發(fā)者的使用,從而創(chuàng)造性地推出了Spring boot,約定優(yōu)于配置,簡(jiǎn)化了spring的配置流程。
Spring MVC提供了一種輕度耦合的方式來開發(fā)web應(yīng)用,通過Dispatcher Servlet, ModelAndView 和 View Resolver,開發(fā)web應(yīng)用變得很容易。解決的問題領(lǐng)域是網(wǎng)站應(yīng)用程序或者服務(wù)開發(fā)——URL路由。Session、模板引擎、靜態(tài)Web資源等等。
-
Spring Boot實(shí)現(xiàn)了自動(dòng)配置,降低了項(xiàng)目搭建的復(fù)雜度,它并不是用來替代Spring的解決方案,而是和Spring框架緊密結(jié)合用于提升Spring開發(fā)者體驗(yàn)的工具。眾所周知Spring框架需要進(jìn)行大量的配置,Spring Boot引入自動(dòng)配置的概念,讓項(xiàng)目設(shè)置變得很容易。Spring Boot本身并不提供Spring框架的核心特性以及擴(kuò)展功能,只是用于快速、敏捷地開發(fā)新一代基于Spring框架的應(yīng)用程序。也就是說,它并不是用來替代Spring的解決方案,而是和Spring框架緊密結(jié)合用于提升Spring開發(fā)者體驗(yàn)的工具。
同時(shí)它集成了大量常用的第三方庫(kù)配置(例如Jackson, JDBC, Mongo, Redis, Mail等等),Spring Boot應(yīng)用中這些第三方庫(kù)幾乎可以零配置的開箱即用(out-of-the-box),大部分的Spring Boot應(yīng)用都只需要非常少量的配置代碼,開發(fā)者能夠更加專注于業(yè)務(wù)邏輯。
Spring Boot只是承載者,輔助你簡(jiǎn)化項(xiàng)目搭建過程的。如果承載的是WEB項(xiàng)目,并且使用Spring MVC作為MVC框架,那么工作流程不變的,因?yàn)檫@部分工作是Spring MVC做的而不是Spring Boot。
對(duì)使用者來說,換用 Spring Boot 以后,項(xiàng)目初始化方法變了,配置文件變了,另外就是不需要單獨(dú)安裝 Tomcat 這類容器服務(wù)器了,maven 打出 jar 包直接跑起來就是個(gè)網(wǎng)站,但你最核心的業(yè)務(wù)邏輯實(shí)現(xiàn)與業(yè)務(wù)流程實(shí)現(xiàn)沒有任何變化。
拓展鏈接:[spring boot與spring mvc的區(qū)別是什么?](只是spring 處理web層請(qǐng)求的一個(gè)模塊。)
Servlet 是什么
Java Servlet 是運(yùn)行在 Web 服務(wù)器或應(yīng)用服務(wù)器上的 Java 程序。
它是作為來自 Web 瀏覽器 / 其他 HTTP 客戶端的請(qǐng)求和 HTTP 服務(wù)器上的數(shù)據(jù)庫(kù)或應(yīng)用程序之間的中間層。
使用 Servlet,您可以收集來自網(wǎng)頁(yè)表單的用戶輸入,呈現(xiàn)來自數(shù)據(jù)庫(kù)或者其他源的記錄,還可以動(dòng)態(tài)創(chuàng)建網(wǎng)頁(yè)。
拓展鏈接: Servlet 是什么?
Tomcat 是什么
Tomcat 是一個(gè)被廣泛使用的Java Web應(yīng)用服務(wù)器。
是一個(gè)Servlet 容器,是Apache的擴(kuò)展,處理動(dòng)態(tài)網(wǎng)頁(yè)部分。
在做web項(xiàng)目時(shí),多數(shù)需要http協(xié)議,也就是基于請(qǐng)求和響應(yīng),比如你在百度輸入一行內(nèi)容搜索, 那么百度服務(wù)器如何處理這個(gè)請(qǐng)求呢,他需要?jiǎng)?chuàng)建servlet來處理,servlet其實(shí)就是java程序,只是在服務(wù)器端的java程序 servlet通過配置文件攔截你的請(qǐng)求,并進(jìn)行相應(yīng)處理,然后展示給你相應(yīng)界面,那么servlet如何創(chuàng)建? 這時(shí)候tomcat用到了, 它就是幫助你創(chuàng)建servlet的東西,所以也稱web容器
Tomcat是用Java語(yǔ)言編寫的,需要運(yùn)行在Java虛擬機(jī)上,所以一般需要先安裝JDK,以提供運(yùn)行環(huán)境。
類似功能的還有:Jetty 、Resin 、Websphere 、weblogic 、JBoss 、Glassfish 、GonAS 等
拓展鏈接:
Tomcat(一) Tomcat是什么:Tomcat與Java技術(shù) Tomcat與Web應(yīng)用 以及 Tomcat基本框架及相關(guān)配置
MyBatis 是什么
MyBatis 是一個(gè) Java 持久化框架,它通過XML 描述符或注解把對(duì)象與存儲(chǔ)過程或 SQL 語(yǔ)句關(guān)聯(lián)起來。
MyBatis 對(duì)純 JDBC 做了封裝,使程序員能夠以面向?qū)ο蟮乃枷氩僮鲾?shù)據(jù)庫(kù)。
說白了,Mybatis就是JDBC的殼兒!
MyBatis是眾多ORM框架的一種,常見的ORM框架有 jpa ,hibernate ,mybatis 。
ORM: 對(duì)象關(guān)系映射(Object-relational mapping)
當(dāng)我們使用一種面向?qū)ο蟮木幊陶Z(yǔ)言來進(jìn)行應(yīng)用程序開發(fā)時(shí),從項(xiàng)目一開始就采用的是面向?qū)ο蠓治?、面向?qū)ο笤O(shè)計(jì)、面向?qū)ο缶幊?,但是到了訪問數(shù)據(jù)庫(kù)時(shí),又必須重返關(guān)系數(shù)據(jù)庫(kù)的訪問方式,即寫sql。這是一種很糟糕的感覺。于是人們需要一種工具,它可以把關(guān)系數(shù)據(jù)庫(kù)包裝成面向?qū)ο蟮哪P?,這個(gè)工具就是ORM。隨著面向?qū)ο髷?shù)據(jù)庫(kù)的廣泛使用,orm也會(huì)逐漸消亡。
只要依然采用面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言,底層依然采用關(guān)系數(shù)據(jù)庫(kù),中間就少不了mybatis。采用mybatis后,我們的程序就不再直接訪問底層數(shù)據(jù)庫(kù),而是以面向?qū)ο蟮姆绞絹聿僮鞒志没瘜?duì)象(例如,創(chuàng)建、修改、刪除等)。而mybatis則將這些操作轉(zhuǎn)換成底層的sql操作?!?mybaits其實(shí)是個(gè)殼
使用示例
<!--更新-->
<update id="update" parameterType="zhongfucheng.Student">
update students set name=#{name},sal=#{sal} where id=#{id};
</update>
拓展鏈接:
JDBC 是什么
JDBC 是Java語(yǔ)言中用來規(guī)范客戶端程序如何來訪問數(shù)據(jù)庫(kù)的應(yīng)用程序接口,提供了諸如查詢和更新數(shù)據(jù)庫(kù)中數(shù)據(jù)的方法。
Maven 是什么
Maven 是一個(gè)項(xiàng)目管理工具。
它包含了一個(gè)項(xiàng)目對(duì)象模型 (POM:Project Object Model),一組標(biāo)準(zhǔn)集合,一個(gè)項(xiàng)目生命周期(Project Lifecycle),一個(gè)依賴管理系統(tǒng)(Dependency Management System),和用來運(yùn)行定義在生命周期階段(phase)中插件(plugin)目標(biāo)(goal)的邏輯。
通俗地說,Maven 可以簡(jiǎn)化和標(biāo)準(zhǔn)化項(xiàng)目建設(shè)過程,即能幫你構(gòu)建工程,管理 jar 包,編譯代碼,還能幫你自動(dòng)運(yùn)行單元測(cè)試,打包,生成報(bào)表,部署項(xiàng)目等。
參考鏈接:Maven是什么
Thymeleaf 是什么
Thymeleaf 是一個(gè)Java庫(kù)。它是一個(gè)XML / XHTML / HTML5模板引擎,能夠應(yīng)用于轉(zhuǎn)換模板文件,以顯示您的應(yīng)用程序產(chǎn)生的數(shù)據(jù)和文本。
它尤其適合于基于XHTML / HTML5的web服務(wù)應(yīng)用程序,同時(shí)它可以作為web或獨(dú)立的應(yīng)用程序處理任何XML文件.
Thymeleaf 的主要目標(biāo)是提供一種優(yōu)雅的、可維護(hù)性強(qiáng)的方法來創(chuàng)建模版。
簡(jiǎn)單來說就是它可以接收來自后臺(tái)的數(shù)據(jù)并展示在前端頁(yè)面上。
在HTML頁(yè)面中使用 Thymeleaf的方式:
在網(wǎng)頁(yè)頭加上
<html xmlns:th="http://www.thymeleaf.org">
就可以在網(wǎng)頁(yè)上使用 Thymeleaf 的語(yǔ)法了
Thymeleaf 接收后臺(tái)的語(yǔ)法