Java电商项目

Wesley13
• 阅读 502

[toc]

到Github获取源码请点击此处

一. 商品类目查询

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

Java电商项目

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

Java电商项目

  • 编写对应的实现类.

Java电商项目

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

Java电商项目

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

Java电商项目

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

Java电商项目

  • 编写controller

Java电商项目

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

Java电商项目

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

Java电商项目

二. FTP图片服务器的搭建

图片上传思路介绍

Linux中安装vsftpd

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

Java电商项目

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

Java电商项目

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

Java电商项目

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

Java电商项目

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

Java电商项目

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

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

Java电商项目

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

Java电商项目

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

Java电商项目

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

Java电商项目

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

Java电商项目

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

Java电商项目

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

  • 接着执行make install命令

Java电商项目

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

Java电商项目

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

Java电商项目

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

  • 接下来启动nginx:

  • 进入到nginx的安装目录中

Java电商项目

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

Java电商项目

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

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

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

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

Java电商项目

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

配置Nginx

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

Java电商项目

Java电商项目

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

Java电商项目

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

Java电商项目

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

Java电商项目

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

Java电商项目

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

Java电商项目

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

Java电商项目

FtpClient实现文件上传

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

Java电商项目

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

Java电商项目

  • 这里要记录一个编码时遇到的问题.

  • 上面的代码验证过其实是没错的, 但是第一次写的时候一直上传不了. 网上说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电商项目

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

Java电商项目

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

Java电商项目

  • 接着创建工具类IDUtils, 封装了两个方法:

  • 一个是对上传图片的名字进行重命名

  • 另一个是封装了一个方法用于生成商品的组件.

  • 这个类已经给出, 直接复制到项目中即可.

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

Java电商项目

  • 编写响应的controller方法

Java电商项目

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

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

Java电商项目

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

Java电商项目

  • 编写实现方法

Java电商项目

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

Java电商项目

  • 编写实现类

Java电商项目

  • 编写controller

Java电商项目

  • 重新打包, 发布测试.

实现商品的回显

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

Java电商项目

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

Java电商项目

  • 编写实现类.

Java电商项目

  • 发布为远程服务

Java电商项目

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

Java电商项目

  • 编写实现类

Java电商项目

  • 编写Controller

Java电商项目

  • 最后打包测试.

商品信息修改

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

Java电商项目

  • 编写实现类

Java电商项目

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

Java电商项目

  • 编写实现类

Java电商项目

  • 最后编写controller

Java电商项目

  • 最后项目打包, 测试, 本阶段完成.
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
2年前
Docker 部署SpringBoot项目不香吗?
  公众号改版后文章乱序推荐,希望你可以点击上方“Java进阶架构师”,点击右上角,将我们设为★“星标”!这样才不会错过每日进阶架构文章呀。  !(http://dingyue.ws.126.net/2020/0920/b00fbfc7j00qgy5xy002kd200qo00hsg00it00cj.jpg)  2
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这