文章大綱
一、課程介紹
二、淘淘商城基本介紹
三、後臺管理系統工程結構與搭建
四、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