目錄
到Github獲取源碼請點擊此處
一. 商品類目查詢
- 功能分析: 在后天管理頁面可以添加商品, 添加商品時首先需要選擇類目. 在本項目中, 商品的類目選擇使用的是異步加載, 當我們點擊選擇類目時會彈出一級類目, 進一步選擇時會彈出二級類目. 這里涉及到
tb_item_cat
表. 下面進行編碼實現
- 首先和商品上下架一樣, 我們需要在Dubbo中發布遠程服務.
- 先到
ashop-rpc-service
模塊中編寫服務接口類
- 編寫對應的實現類.
- 然后在Dubbo配置文件中進行配置, 發布Dubbo服務.
- 自此, 商品類目節點查詢的遠程服務已經編寫好.
- 下面在
ashop-manager-web
模塊中編寫和前端交互部分代碼. - 首先, 我們需要封裝響應給前端的數據模型, 需要三個參數: 節點id, 內容text, 狀態status
- 接下來編寫
Service
接口及其實現類(調用遠程服務)
- 編寫controller
- 到spring配置文件中注冊遠程代理對象
- 然后重新打包啟動項目: 對整體項目進行install, 然后啟動之前在
ashop-rpc-service-impl
模塊中編寫好的測試程序啟動Dubbo服務, 然后啟動Tomcat. 最后到瀏覽器查看運行結果.
二. FTP圖片服務器的搭建
圖片上傳思路介紹
Linux中安裝vsftpd
- 執行安裝命令
yum install vsftpd -y
- 安裝完畢后添加vsftpd用戶, 輸入命令:
useradd ftpuser
- 這時進入home目錄(
cd /home
), 會看見多了一個ftpuser
用戶
- 接下來分配ftp密碼
- 輸入命令:
passwd ftpuser
, 然后連續兩次輸入密碼
- 限定用戶不能通過ssh登陸到linux系統
- 輸入命令:
vi /etc/passwd
- 把
.../ftpuser:/bin/bash
修改為.../ftpuser:/sbin/nologin
- 配置防火牆開放21端口.
- 輸入命令
vi /etc/sysconfig/iptables
- 接着重啟防火牆:
service iptables restart
, 使打開防火牆21端口操作生效.
接着配置ftp服務, 讓外網可以訪問
- 查看ftp狀態:
getsebool -a | grep ftp
, 會看到所有選項都是關閉狀態:
- 接下來修改ftp狀態, 就修改其中兩項:
setsebool -P allow_ftpd_full_access on
和setsebool -P ftp_home_dir on
- 修改后的狀態如下:
- 接下來關閉ftp的匿名訪問:
vi /etc/vsftpd/vsftpd.conf
- 設置vsftpd服務開機啟動:
chkconfig vsftpd on
- 最后測試ftp鏈接:
- 啟動ftp服務:
service vsftpd start
- 進入windows的命令行工具, 輸入
ftp ftp服務所在的ip地址
, 然后依次輸入用戶名和密碼即可
- 配置vsftpd的被動模式(默認是開啟的, 需要配置端口號的范圍)
- 首先進入vsftpd的配置文件:
vi /etc/vsftpd/vsftpd.conf
- 下拉到配置文件的最后, 配置端口號的范圍(最大值, 最小值)
- 接下來需要在防火牆打開相應范圍的端口:
vi /etc/sysconfig/iptables
- 改完記得重啟:
service iptables restart
- 至此, 圖片服務器的配置和安裝已經完成.
Http服務器搭建
- 我們使用Nginx搭建http服務器, Nginx是一個高性能的http和反向代理服務, 占有內存少, 並發能力強.
Nginx安裝
- 安裝編譯環境:
yum install gcc gcc-c++
- 安裝Pcre庫:
yum -y install pcre-devel
- 安裝壓縮工具:
yum install zlib-devel
- 接下來上傳Nginx的安裝包
- 上傳安裝包的常用套路是在根目下創建一個文件夾, 讓后使用工具把安裝包傳到linux機上, 這里就暫不演示.
- 然后創建Nginx的安裝目錄:
mkdir /usr/local/nginx
- 回到安裝包的目錄, 對壓縮了的安裝包進行解壓:
tar -zxvf 文件名
- 進入解壓后的nginx安裝包, 可以看見一個
configure
可執行文件, 這個是用來檢測環境的. - 接着把下面這段代碼復制到linux命令窗口進行檢測, (注意是進入nginx安裝包后的目錄, 也就是
configure
文件所在的目錄)
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi
- 檢測完畢后同樣在進入到安裝包的目錄后進行編譯:
make
- 接着執行
make install
命令
- 安裝成功后, 到之前預設好的安裝目錄
/usr/local/nginx
中可以看到如下文件
- 然后我們需要配置防火牆, Nginx的默認端口是80端口.
- 進入防火牆配置文件:
vi /etc/sysconfig/iptables
.
-
完成后記得重啟防火牆
service iptables restart
-
接下來啟動nginx:
-
進入到nginx的安裝目錄中
- 進入sbin:
cd sbin
, 執行nginx:./nginx
-
提示說缺少一個目錄. 我們按照錯誤提示創建缺少的文件:
mkdir -p /var/temp/nginx/client
-
重新執行
./nginx
, 沒有報錯說明啟動成功. -
補充: 重啟nginx:
./nginx -s reload
-
最后我們訪問一下Nginx, 在瀏覽器中直接輸入Nginx所在的ip地址, 可以看到以下內容
- 至此, Nginx的安裝已經結束.
配置Nginx
- 先進入Nginx安裝目錄, 然后進入conf目錄, 修改nginx.conf文件
- 配置Nginx用戶名, 照上面的操作打開配置文件進行操作, 在首行添加ftpuser
- 保存退出並重啟Nginx(到sbin目錄下):
./nginx -s reload
- 最后給Host配置域名
- 什么叫配置域名呢? 首先我們進入C盤, 然后進入Windows目錄, 然后進入System32目錄, 然后進入drivers目錄, 然后進入etc目錄, 里面有個host配置文件, 打開該配置文件, 我們在這里為nginx配置域名
- 把開啟nginx服務的機器ip對應
image.taotao.com
, 這個域名是我們數據庫中的數據寫好的. - 嘗試訪問
- 我們給服務器上傳一張圖片試試.
- 在/home/ftpuser目錄下創建一個
jd
目錄, 並在里面放一張圖片
- 然后重新到瀏覽器中進行訪問.
- 我們返回Nginx的安裝目錄, 查看html目錄, 可以看見之前訪問Nginx時的首頁html就保存在這里
FtpClient實現文件上傳
- 上傳圖片的思路這樣: 瀏覽器先上傳到Tomcat服務器, 然后再從Tomcat容器上傳到Nginx圖片服務器.
- 現在先實現后半部分, 把圖片從Tomcat容器上床到Nginx服務器.
- 首先到
ashop-common
模塊中添加相應的依賴
- 然后封裝上傳圖片的方法
- 這里要記錄一個編碼時遇到的問題.
- 上面的代碼驗證過其實是沒錯的, 但是第一次寫的時候一直上傳不了. 網上說Nginx調試可以使用
getReplyString()
打印錯誤. 我得到的是553, could not create file不能創建文件. 查看了Nginx的配置文件也都沒有問題. 網上還有提示說添加一些額外的代碼, 也不奏效. 最后考慮是linux系統不讓寫, 也就是說對/home/ftpuser/jd
這個目錄根本沒有寫的權利. - 通過查看權限發現確實只有讀的權限, 修改后即正常上傳.
- 修改權限的語句是
chmod 數字 文件名
, 數字對應的是權限比如-rwxr--r--
對應x111 100 100
, 也就是744, 要改為-rwxrw-rw-:766
要輸入命令:chmod 766 文件名
.
- 繼續.
- 查看前端代碼看看圖片提交的上傳路徑和提交圖片的參數.
- 封裝圖片上傳后返回給瀏覽器的數據模型
- 下面開始實現圖片從本地上傳到Tomcat容器, 然后再上傳到圖片服務器.
- 創建ftp.properties文件: 在
web
模塊中的main/resource目錄下創建resources目錄, 在里面創建ftp.properties文件. 並存儲連接FTP服務器的信息.
- 接着創建工具類IDUtils, 封裝了兩個方法:
- 一個是對上傳圖片的名字進行重命名
- 另一個是封裝了一個方法用於生成商品的組件.
- 這個類已經給出, 直接復制到項目中即可.
- 然后編寫商品圖片上傳的Service接口及其實現類
- 編寫響應的controller方法
- 自此圖片上傳功能已經完成了, 對整體項目進行打包, 照例啟動Dubbo服務, 然后啟動Tomcat容器.
- 問題記錄: 這次連接Dubbo服務的時候出現了問題, 老是超時連接不上.
INFO [main-SendThread(192.168.117.129:2183)] - Opening socket connection to server 192.168.117.129/192.168.117.129:2183. Will not attempt to authenticate using SASL (unknown error)
INFO [main-SendThread(192.168.117.129:2183)] - Client session timed out, have not heard from server in 10006ms for sessionid 0x0, closing socket connection and attempting reconnect
INFO [main-SendThread(192.168.117.129:2181)] - Opening socket connection to server 192.168.117.129/192.168.117.129:2181. Will not attempt to authenticate using SASL (unknown error)
INFO [main-SendThread(192.168.117.129:2181)] - Client session timed out, have not heard from server in 10001ms for sessionid 0x0, closing socket connection and attempting reconnect
INFO [main-SendThread(192.168.117.129:2182)] - Opening socket connection to server 192.168.117.129/192.168.117.129:2182. Will not attempt to authenticate using SASL (unknown error)
- 后來發現是沒有在linux上開放zookeeper的端口. 之前關閉了防火牆所以沒有問題, 后來對防火牆一頓操作重啟后忘記關了, 所以出現了這樣的錯誤, 可以考慮把zookeeper的端口也開放.
- 測試成功后, 進入下一個環節
實現商品新增
- 引入富文本編輯器kindeditor, 商品的描述信息將在富文本編輯器中進行編輯, 最終會以html格式保存到數據庫. 使用該富文本編輯器需要在jsp中引入該資源.
- 而且需要在表單中添加一個文本域(已經添加好了). 文本域的作用: 我們在富文本編輯器編輯的內容最終會轉化為html的形式放在文本域中, 向后台提交的時候商品的描述信息從該文本域中獲取, 也就是根據
desc
參數接收
- 首先還是編寫提供遠程服務的方法. 保存商品信息需要用到兩張表, 一張是商品的詳細信息表, 一張是商品的描述信息表.
- 編寫實現方法
- 接着在
ashop-manager-web
模塊中也完成響應的service接口與實現類
- 編寫實現類
- 編寫controller
- 重新打包, 發布測試.
實現商品的回顯
- 接下來要實現的功能是, 在后台點擊編輯商品的時候要把商品的信息回顯出來
- 首先完成商品描述信息回顯的遠程方法, 創建
ItemDescService
接口
- 編寫實現類.
- 發布為遠程服務
- 接着到
web-manager-web
模塊中實現service接口與實現類. - 首先在配置文件中注冊已經發布的遠程服務對象.
- 編寫service接口
- 編寫實現類
- 編寫Controller
- 最后打包測試.
商品信息修改
- 編寫遠程服務service接口與實現類(和添加商品差不多)
- 編寫實現類
- 繼續到
ashop-manager-web
中編寫service接口和實現類
- 編寫實現類
- 最后編寫controller
- 最后項目打包, 測試, 本階段完成.