1. 程式人生 > >商城專案(ssm+dubbo+nginx+mysql統合專案)總結(4)

商城專案(ssm+dubbo+nginx+mysql統合專案)總結(4)

我不會在這裡貼程式碼和詳細步驟什麼的,我覺得就算我把它貼出來,你們照著步驟做還是會出很多問題,我推薦你們去看一下黑馬的這個視訊,我個人感覺很不錯,一步一步走下來可以學到很多東西。另外,視訊和相關文件的話,關注微信公眾號“Java面試通關手冊”回覆“資源分享第一波”即可領取.

本節內容具體可參考黑馬該專案第四天的教案,教案以及相關文件和資料都在分享的網盤裡面,下載解壓即可。

第三天學到的內容

1、FastDFS

實現圖片伺服器的時候用到了FastDFS,所以這裡總結一下。

1.1 什麼是FastDFS?

FastDFS是用c語言編寫的一款開源的分散式檔案系統。FastDFS為網際網路量身定製,充分考慮了冗餘備份

負載均衡線性擴容等機制,並注重高可用高效能等指標,使用FastDFS很容易搭建一套高效能的檔案伺服器叢集提供檔案上傳、下載等服務。

1.2 FastDFS架構

FastDFS架構包括 Tracker serverStorage server客戶端請求Tracker server進行檔案上傳、下載,通過Tracker server排程最終由Storage server完成檔案上傳和下載。
Tracker server作用是負載均衡和排程,通過Tracker server在檔案上傳時可以根據一些策略找到Storage server提供檔案上傳服務。可以將tracker稱為追蹤伺服器或排程伺服器。

Storage server作用是檔案儲存,客戶端上傳的檔案最終儲存在Storage伺服器上,Storage server沒有實現自己的檔案系統而是利用作業系統 的檔案系統來管理檔案。可以將storage稱為儲存伺服器。

服務端兩個角色:
Tracker:管理叢集,tracker也可以實現叢集。每個tracker節點地位平等。
收集Storage叢集的狀態。
Storage:實際儲存檔案
Storage分為多個組,每個組之間儲存的檔案是不同的。每個組內部可以有多個成員,組成員內部儲存的內容是一樣的,組成員的地位是一致的,沒有主從的概念。

1.3. 檔案上傳的流程

檔案上傳的流程


客戶端上傳檔案後儲存伺服器將檔案ID返回給客戶端,此檔案ID用於以後訪問該檔案的索引資訊。檔案索引資訊包括:組名,虛擬磁碟路徑,資料兩級目錄,檔名。

示例:

圖片伺服器ip地址/group1//M00/00/00/wKgZhVrMqfWARLOPAAG9BAtQUBg574.jpg

  • 組名:檔案上傳後所在的storage組名稱,在檔案上傳成功後有storage伺服器返回,需要客戶端自行儲存。
  • 虛擬磁碟路徑:storage配置的虛擬路徑,與磁碟選項store_path*對應。如果配置了store_path0則是M00,如果配置了store_path1則是M01,以此類推。
  • 資料兩級目錄:storage伺服器在每個虛擬磁碟路徑下建立的兩級目錄,用於儲存資料檔案。
  • 檔名:與檔案上傳時不同。是由儲存伺服器根據特定資訊生成,檔名包含:源儲存伺服器IP地址、檔案建立時間戳、檔案大小、隨機數和檔案拓展名等資訊。

1.4 圖片下載流程

圖片下載流程

1.5 最簡單的FastDFS架構

最簡單的FastDFS架構

1.6 圖片伺服器的安裝

提供的參考資料中給出了圖片伺服器的安裝,使用的時候只用稍微修改一下網路配置就可以使用了。黑馬提供的學習資料中有較為詳細的步驟和講解,所以我這裡就不畫蛇添足了,感興趣的可以去看看第四天學習筆記。
圖片伺服器的安裝

1.7 圖片伺服器使用

Java客戶端:

你需要把下面的Maven工程通過 Maven Install安裝到本地倉庫,這樣才能在其他工程中通過Maven依賴使用。
Java客戶端

上傳圖片功能的簡單使用:

上傳圖片功能的簡單使用

具體步驟:
1、載入配置檔案,配置檔案中的內容就是tracker服務的地址。
配置檔案內容:tracker_server=192.168.25.133:22122

2、建立一個TrackerClient物件。直接new一個。
3、使用TrackerClient物件建立連線,獲得一個TrackerServer物件。
4、建立一個StorageServer的引用,值為null
5、建立一個StorageClient物件,需要兩個引數TrackerServer物件、StorageServer的引用
6、使用StorageClient物件上傳圖片。
7、返回陣列。包含組名和圖片的路徑。

示例程式碼:

    @Test
    public void testUpload() throws Exception {
        //建立一個配置檔案。檔名任意。內容就是tracker伺服器的地址。
        //使用全域性物件載入配置檔案。
        ClientGlobal.init("E:/workplace/JavaWebDemo/source2/e3-manager-web/src/main/resources/conf/client.conf");
        //建立一個TrackerClient物件
        TrackerClient trackerClient = new TrackerClient();
        //通過TrackClient獲得一個TrackerServer物件
        TrackerServer trackerServer = trackerClient.getConnection();
        //建立一個StrorageServer的引用,可以是null
        StorageServer storageServer = null;
        //建立一個StorageClient,引數需要TrackerServer和StrorageServer
        StorageClient storageClient = new StorageClient(trackerServer, storageServer);
        //使用StorageClient上傳檔案。

        String[] strings = storageClient.upload_file("D:/picture/meizi.jpg", "jpg", null);
        for (String string : strings) {
            System.out.println(string);
        }

    }

控制檯輸出結果:
group1
M00/00/00/wKgZhVrMpQiARy67AAEHcXUsij0687.jpg

瀏覽器訪問圖片

我們可以把上面的工程做成一個工具類,然後就可以直接在專案中使用了,黑馬提供的資料直接給了我們這個工具類。我這裡就多做敘述。

2、商城專案圖片上傳功能的實現

別忘記新增檔案上傳依賴:

            <!-- 檔案上傳元件 -->
            <dependency>
                <groupId>commons-fileupload</groupId>
                <artifactId>commons-fileupload</artifactId>
                <version>${commons-fileupload.version}</version>
            </dependency>

另外需要注意的是:KindEditor的多圖片上傳外掛最後響應的content-type是text/plan格式的json字串。相容性是最好的。
所以我們要使用@ResponseBody註解返回java物件,並且要在@RequestMapping註解中指定響應結果的content-type。

3、富文字編輯器的使用方法

3.1 一些常見的富文字編輯器:

純js開發,跟後臺語言沒有關係。

3.2使用方法

注意檢視KindEditor官網提供的使用方法
http://kindeditor.net/docs/usage.html
官方文件講的使用方法和下面的差不多
第一步:在jsp中引入KindEditor的css和js程式碼。
第二步:在表單中新增一個textarea控制元件。是一個富文字編輯器的載體。類似資料來源。
第三步:初始化富文字編輯器。使用官方提供的方法初始化。
第四步:取富文字編輯器的內容。
表單提交之前,把富文字編輯器的內容同步到textarea控制元件中

4、對商品的一些操作的實現

4.1 商品新增功能的實現

請求的url:/item/save

引數:表單的資料。可以使用pojo接收表單的資料,要求pojo的屬性和input的name屬性要一致。
使用TbItem物件接收表單的資料
TbItem item,String desc

返回值
Json資料。應該包含一個status的屬性。
可以使用E3Result,放到e3-common中。

業務邏輯:
1、生成商品id
實現方案:
a) Uuid,字串,不推薦使用。
b) 數值型別,不重複。日期+時間+隨機數20160402151333123123
c) 可以直接去毫秒值+隨機數。可以使用。
d) 使用redis。Incr。推薦使用。
使用IDUtils生成商品id
2、補全TbItem物件的屬性
3、向商品表插入資料
4、建立一個TbItemDesc物件
5、補全TbItemDesc的屬性
6、向商品描述表插入資料
7、E3Result.ok()

具體程式碼就不貼出 ,資料中很詳細,另外商品批量刪除和上架下架功能老師以作業的形式佈置下去,我這裡自己實現了一下:

4.2 批量刪除商品功能實現

4.3 商品上架和下架功能實現