到Github获取源码请点击此处

一. 商品类目查询

  • 功能分析: 在后天管理页面可以添加商品, 添加商品时首先需要选择类目. 在本项目中, 商品的类目选择使用的是异步加载, 当我们点击选择类目时会弹出一级类目, 进一步选择时会弹出二级类目. 这里涉及到tb_item_cat表. 下面进行编码实现

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 首先和商品上下架一样, 我们需要在Dubbo中发布远程服务.
  • 先到ashop-rpc-service模块中编写服务接口类

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 编写对应的实现类.

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 然后在Dubbo配置文件中进行配置, 发布Dubbo服务.

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 自此, 商品类目节点查询的远程服务已经编写好.
  • 下面在ashop-manager-web模块中编写和前端交互部分代码.
  • 首先, 我们需要封装响应给前端的数据模型, 需要三个参数: 节点id, 内容text, 状态status

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 接下来编写Service接口及其实现类(调用远程服务)

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 编写controller

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 到spring配置文件中注册远程代理对象

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 然后重新打包启动项目: 对整体项目进行install, 然后启动之前在ashop-rpc-service-impl模块中编写好的测试程序启动Dubbo服务, 然后启动Tomcat. 最后到浏览器查看运行结果.

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

 

二. FTP图片服务器的搭建

图片上传思路介绍

Linux中安装vsftpd

  • 执行安装命令yum install vsftpd -y
  • 安装完毕后添加vsftpd用户, 输入命令: useradd ftpuser
  • 这时进入home目录(cd /home), 会看见多了一个ftpuser用户

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 接下来分配ftp密码
  • 输入命令: passwd ftpuser, 然后连续两次输入密码

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 限定用户不能通过ssh登陆到linux系统
  • 输入命令: vi /etc/passwd
  • .../ftpuser:/bin/bash修改为.../ftpuser:/sbin/nologin

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 配置防火墙开放21端口.
  • 输入命令vi /etc/sysconfig/iptables

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 接着重启防火墙: service iptables restart, 使打开防火墙21端口操作生效.

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

接着配置ftp服务, 让外网可以访问

  • 查看ftp状态: getsebool -a | grep ftp, 会看到所有选项都是关闭状态:

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 接下来修改ftp状态, 就修改其中两项:
  • setsebool -P allow_ftpd_full_access onsetsebool -P ftp_home_dir on
  • 修改后的状态如下:

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 接下来关闭ftp的匿名访问: vi /etc/vsftpd/vsftpd.conf

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 设置vsftpd服务开机启动: chkconfig vsftpd on
  • 最后测试ftp链接:
  1. 启动ftp服务: service vsftpd start
  2. 进入windows的命令行工具, 输入ftp ftp服务所在的ip地址, 然后依次输入用户名和密码即可

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 配置vsftpd的被动模式(默认是开启的, 需要配置端口号的范围)
  • 首先进入vsftpd的配置文件: vi /etc/vsftpd/vsftpd.conf
  • 下拉到配置文件的最后, 配置端口号的范围(最大值, 最小值)

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 接下来需要在防火墙打开相应范围的端口: vi /etc/sysconfig/iptables

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 改完记得重启: 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

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 接着执行make install命令

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 安装成功后, 到之前预设好的安装目录/usr/local/nginx中可以看到如下文件

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 然后我们需要配置防火墙, Nginx的默认端口是80端口.
  • 进入防火墙配置文件: vi /etc/sysconfig/iptables.

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 完成后记得重启防火墙service iptables restart

  • 接下来启动nginx:

  • 进入到nginx的安装目录中

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 进入sbin: cd sbin, 执行nginx: ./nginx

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 提示说缺少一个目录. 我们按照错误提示创建缺少的文件: mkdir -p /var/temp/nginx/client

  • 重新执行./nginx, 没有报错说明启动成功.

  • 补充: 重启nginx: ./nginx -s reload

  • 最后我们访问一下Nginx, 在浏览器中直接输入Nginx所在的ip地址, 可以看到以下内容

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 至此, Nginx的安装已经结束.

 

配置Nginx

  • 先进入Nginx安装目录, 然后进入conf目录, 修改nginx.conf文件

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 配置Nginx用户名, 照上面的操作打开配置文件进行操作, 在首行添加ftpuser

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 保存退出并重启Nginx(到sbin目录下): ./nginx -s reload
  • 最后给Host配置域名
  • 什么叫配置域名呢? 首先我们进入C盘, 然后进入Windows目录, 然后进入System32目录, 然后进入drivers目录, 然后进入etc目录, 里面有个host配置文件, 打开该配置文件, 我们在这里为nginx配置域名

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 把开启nginx服务的机器ip对应image.taotao.com, 这个域名是我们数据库中的数据写好的.
  • 尝试访问

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 我们给服务器上传一张图片试试.
  • 在/home/ftpuser目录下创建一个jd目录, 并在里面放一张图片

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 然后重新到浏览器中进行访问.

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 我们返回Nginx的安装目录, 查看html目录, 可以看见之前访问Nginx时的首页html就保存在这里

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

 

FtpClient实现文件上传

  • 上传图片的思路这样: 浏览器先上传到Tomcat服务器, 然后再从Tomcat容器上传到Nginx图片服务器.
  • 现在先实现后半部分, 把图片从Tomcat容器上床到Nginx服务器.
  • 首先到ashop-common模块中添加相应的依赖

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 然后封装上传图片的方法

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 这里要记录一个编码时遇到的问题.
  • 上面的代码验证过其实是没错的, 但是第一次写的时候一直上传不了. 网上说Nginx调试可以使用getReplyString()打印错误. 我得到的是553, could not create file不能创建文件. 查看了Nginx的配置文件也都没有问题. 网上还有提示说添加一些额外的代码, 也不奏效. 最后考虑是linux系统不让写, 也就是说对/home/ftpuser/jd这个目录根本没有写的权利.
  • 通过查看权限发现确实只有读的权限, 修改后即正常上传.
  • 修改权限的语句是chmod 数字 文件名, 数字对应的是权限比如-rwxr--r--对应x111 100 100, 也就是744, 要改为-rwxrw-rw-:766要输入命令:chmod 766 文件名.

 

  • 继续.
  • 查看前端代码看看图片提交的上传路径和提交图片的参数.

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 封装图片上传后返回给浏览器的数据模型

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 下面开始实现图片从本地上传到Tomcat容器, 然后再上传到图片服务器.
  • 创建ftp.properties文件: 在web模块中的main/resource目录下创建resources目录, 在里面创建ftp.properties文件. 并存储连接FTP服务器的信息.

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 接着创建工具类IDUtils, 封装了两个方法:
  • 一个是对上传图片的名字进行重命名
  • 另一个是封装了一个方法用于生成商品的组件.
  • 这个类已经给出, 直接复制到项目中即可.

 

  • 然后编写商品图片上传的Service接口及其实现类

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 编写响应的controller方法

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 自此图片上传功能已经完成了, 对整体项目进行打包, 照例启动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中引入该资源.

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 而且需要在表单中添加一个文本域(已经添加好了). 文本域的作用: 我们在富文本编辑器编辑的内容最终会转化为html的形式放在文本域中, 向后台提交的时候商品的描述信息从该文本域中获取, 也就是根据desc参数接收

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 首先还是编写提供远程服务的方法. 保存商品信息需要用到两张表, 一张是商品的详细信息表, 一张是商品的描述信息表.

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 编写实现方法

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 接着在ashop-manager-web模块中也完成响应的service接口与实现类

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 编写实现类

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 编写controller

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 重新打包, 发布测试.

 

实现商品的回显

  • 接下来要实现的功能是, 在后台点击编辑商品的时候要把商品的信息回显出来

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 首先完成商品描述信息回显的远程方法, 创建ItemDescService接口

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 编写实现类.

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 发布为远程服务

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 接着到web-manager-web模块中实现service接口与实现类.
  • 首先在配置文件中注册已经发布的远程服务对象.
  • 编写service接口

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 编写实现类

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 编写Controller

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 最后打包测试.

 

商品信息修改

  • 编写远程服务service接口与实现类(和添加商品差不多)

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 编写实现类

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 继续到ashop-manager-web中编写service接口和实现类

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 编写实现类

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 最后编写controller

Java电商项目-3.使用VSFTPD_Nginx完成商品新增-LMLPHP

  • 最后项目打包, 测试, 本阶段完成.
05-21 13:29