商城專案(ssm+dubbo+nginx+mysql統合專案)總結(4)
我不會在這裡貼程式碼和詳細步驟什麼的,我覺得就算我把它貼出來,你們照著步驟做還是會出很多問題,我推薦你們去看一下黑馬的這個視訊,我個人感覺很不錯,一步一步走下來可以學到很多東西。另外,視訊和相關文件的話,關注微信公眾號“Java面試通關手冊”回覆“資源分享第一波”即可領取.
本節內容具體可參考黑馬該專案第四天的教案,教案以及相關文件和資料都在分享的網盤裡面,下載解壓即可。
第三天學到的內容
1、FastDFS
實現圖片伺服器的時候用到了FastDFS,所以這裡總結一下。
1.1 什麼是FastDFS?
FastDFS是用c語言編寫的一款開源的分散式檔案系統。FastDFS為網際網路量身定製,充分考慮了冗餘備份
1.2 FastDFS架構
FastDFS架構包括 Tracker server和Storage 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架構
1.6 圖片伺服器的安裝
提供的參考資料中給出了圖片伺服器的安裝,使用的時候只用稍微修改一下網路配置就可以使用了。黑馬提供的學習資料中有較為詳細的步驟和講解,所以我這裡就不畫蛇添足了,感興趣的可以去看看第四天學習筆記。
1.7 圖片伺服器使用
Java客戶端:
你需要把下面的Maven工程通過 Maven Install安裝到本地倉庫,這樣才能在其他工程中通過Maven依賴使用。
上傳圖片功能的簡單使用:
具體步驟:
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()
具體程式碼就不貼出 ,資料中很詳細,另外商品批量刪除和上架下架功能老師以作業的形式佈置下去,我這裡自己實現了一下: