文章大綱
一、課程介紹
二、淘淘商城基本介紹
三、后台管理系統工程結構與搭建
四、svn代碼管理
五、項目源碼與資料下載
六、參考文章

一、課程介紹
1. 課程大綱
一共14天課程
(1)第一天:電商行業的背景。淘淘商城的介紹。搭建項目工程。Svn的使用。
(2)第二天:框架的整合。后台管理商品列表的實現。分頁插件。
(3)第三天:后台管理。商品添加。商品類目的選擇、圖片上傳、富文本編輯器的使用。
(4)第四天:商品規格的實現。
(5)第五天:商城前台系統的搭建。首頁商品分類的展示。Jsonp。
(6)第六天:cms系統的實現。前台大廣告位的展示。
(7)第七天:cms系統添加緩存。Redis。緩存同步。
(8)第八天:搜索功能的實現。使用solr實現搜索。
(9)第九天:商品詳情頁面的展示。
(10)第十天:單點登錄系統。Session共享。
(11)第十一天:購物車訂單系統的實現。
(12)第十二天:nginx。反向代理工具。
(13)第十三天:redis集群的搭建、solr集群的搭建。系統的部署。
(14)項目總結。
2. 今日課程
(1)電商行業的背景。
(2)淘淘商城的介紹。
(3)工程項目的搭建。
(4)svn的使用。
二、淘淘商城基本介紹
1. 電商行業技術特點
技術新
技術范圍廣
分布式
高並發、集群、負載均衡、高可用
海量數據
業務復雜
系統安全
2. 淘淘商城簡介
淘淘網上商城是一個綜合性的B2C平台,類似京東商城、天貓商城。會員可以在商城瀏覽商品、下訂單,以及參加各種活動。
管理員、運營可以在平台后台管理系統中管理商品、訂單、會員等。
客服可以在后台管理系統中處理用戶的詢問以及投訴。
3. 功能架構
3.1 系統功能圖

3.2 功能描述
后台管理系統:管理商品、訂單、類目、商品規格屬性、用戶管理以及內容發布等功能。
前台系統:用戶可以在前台系統中進行注冊、登錄、瀏覽商品、首頁、下單等操作。
會員系統:用戶可以在該系統中查詢已下的訂單、收藏的商品、我的優惠券、團購等信息。
訂單系統:提供下單、查詢訂單、修改訂單狀態、定時處理訂單。
搜索系統:提供商品的搜索功能。
單點登錄系統:為多個系統之間提供用戶登錄憑證以及查詢登錄用戶的信息。
4. 技術架構
4.1 傳統架構

思考:有什么問題?
1、模塊之間耦合度太高,其中一個升級其他都得升級
2、開發困難,各個團隊開發最后都要整合一起
3、系統的擴展性差
4、不能靈活的進行分布式部署。
4.2 分布式系統架構


分布式架構:
把系統按照模塊拆分成多個子系統。
優點:
1、把模塊拆分,使用接口通信,降低模塊之間的耦合度。
2、把項目拆分成若干個子項目,不同的團隊負責不同的子項目。
3、增加功能時只需要再增加一個子項目,調用其他系統的接口就可以。
4、可以靈活的進行分布式部署。
缺點:
系統之間交互需要使用遠程通信,接口開發增加工作量。
5. 項目技術選型
Spring、SpringMVC、Mybatis(重點掌握)
JSP、JSTL、jQuery、jQuery plugin、EasyUI、KindEditor(富文本編輯器)、CSS+DIV(了解即可)
Redis(緩存服務器,重點掌握)
Solr(搜索,重點掌握)
httpclient(調用系統服務,重點掌握)
Mysql(重點掌握)
Nginx(web服務器,重點掌握)
6. 開發工具和環境
idea
Maven 3.5
Tomcat 8.5.3
JDK 1.8
Mysql 5.7
Nginx 1.8.0
Redis 3.0.0
Win8 操作系統
SVN(版本管理)
三、后台管理系統工程結構與搭建
1. Maven基礎
Maven功能包括依賴管理、項目構建、工程聚合。工程類型包括pom、jar、war,具體功能請參考文章:https://www.cnblogs.com/WUXIAOCHANG/p/10784540.html
2. 淘淘商城后台項目之Maven使用
2.1 pom工程
(1)taotao-parent:
taotao-parent是整個項目的父工程,它是一個pom工程。用來做整個項目的版本控制,也就是項目中所有要使用到的jar包的版本都集中由父工程管理。這樣你在寫其他工程pom文件中maven依賴時就不需要寫版本號了。當然所有的項目都要先繼承它才行。
(2)taotao-manager:
創建taotao-manager用來做聚合工程,它也是一個pom工程。創建四個model分別是taotao-manager-pojo,taotao-manager-dao,taotao-manager-service,taotao-manager-web,同時會自動生成4個獨立的maven工程。聚合工程只是用來幫助其他模塊構建的工具,本身並沒有實質的內容。具體每個工程代碼的編寫還是在生成的工程中去寫。
使用聚合工程taotao-manager的意義就是:原本這些模塊也是一個個獨立的工程,現在將它們聚合到taotao-manager中,這樣我們構建項目的時候就只要構建taotao-manager一個就行了。我們只要使用maven構建這個聚合工程taotao-manager就行了而不用去操心模塊的構建,比如install時只要install taotao-manager就行。總之就是簡化操作。正常的編碼工作還是在對應的taotao-manager-pojo,taotao-manager-dao,taotao-manager-service,taotao-manager-web。工程中進行的。
2.2 war工程
(1)taotao-rest,taotao-portal這些
這些工程都是要部署在服務器上的,所以要打包成war形式。這些工程有的是用戶通過瀏覽器直接訪問,有的是通過發布服務被別的工程調用。
2.3 jar工程
(1)taotao-common
這個就是打包成jar的工程。它就是存放一些其他工程都會使用的類,工具類。我們可以在其他工程的pom文件中去引用它,和引用別的jar包沒什么區別。
3. Maven搭建后的項目結構

4. 代碼實戰
4.1 配置idea的maven地址


4.2 創建 taotao-parent項目
taotao-parent項目是整個商場的父項目,用於定義各個maven依賴的版本和配置tomcat插件及jdk版本,不編寫任何實際代碼




創建后項目結構如下

修改pom.xml文件代碼如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.wxc</groupId> <artifactId>taotao-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <!--1.pom工程:用在父級工程或聚合工程中。用來做jar包的版本控制。 2.war工程:將會打包成war,發布在服務器上的工程。如網站或服務。 3.jar工程:將會打包成jar用作jar包使用。--> <packaging>pom</packaging> <!-- 集中定義依賴版本號 --> <properties> <junit.version>4.12</junit.version> <spring.version>4.1.3.RELEASE</spring.version> <mybatis.version>3.2.8</mybatis.version> <mybatis.spring.version>1.2.2</mybatis.spring.version> <mybatis.paginator.version>1.2.15</mybatis.paginator.version> <mysql.version>5.1.32</mysql.version> <slf4j.version>1.6.4</slf4j.version> <jackson.version>2.4.2</jackson.version> <druid.version>1.0.9</druid.version> <httpclient.version>4.3.5</httpclient.version> <jstl.version>1.2</jstl.version> <servlet-api.version>2.5</servlet-api.version> <jsp-api.version>2.0</jsp-api.version> <joda-time.version>2.5</joda-time.version> <commons-lang3.version>3.3.2</commons-lang3.version> <commons-io.version>1.3.2</commons-io.version> <commons-net.version>3.3</commons-net.version> <pagehelper.version>3.4.2-fix</pagehelper.version> <jsqlparser.version>0.9.1</jsqlparser.version> <commons-fileupload.version>1.3.1</commons-fileupload.version> <jedis.version>2.7.2</jedis.version> <solrj.version>4.10.3</solrj.version> </properties> <!--只是定義版本,並未添加實際依賴--> <dependencyManagement> <dependencies> <!-- 時間操作組件 --> <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>${joda-time.version}</version> </dependency> <!-- Apache工具組件 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>${commons-lang3.version}</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-io</artifactId> <version>${commons-io.version}</version> </dependency> <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>${commons-net.version}</version> </dependency> <!-- Jackson Json處理工具包 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson.version}</version> </dependency> <!-- httpclient --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>${httpclient.version}</version> </dependency> <!-- 單元測試 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </