您的位置:首页 > 运维架构 > Nginx

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

2019-05-10 20:38 323 查看

目录

  • Http服务器搭建
  • FtpClient实现文件上传
  • 实现商品新增
  • 实现商品的回显
  • 商品信息修改
  • 到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链接:
    1. 启动ftp服务:
      service vsftpd start
    2. 进入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

    • 最后项目打包, 测试, 本阶段完成.
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: 
    相关文章推荐