跳至主要內容
taotao-mall

taotao-mall

项目开发笔记(个人向)

项目源码 🏠

淘淘商城

学习总结

​ 众所周知,商城系统算是典型的一个学习案例了,放眼现在琳琅满目的系统中可能它的功能并不算丰富,且基于快餐式开发驱动下所要实现的内容也并不算复杂,主要是掌握一个电商行业企业级应用的开发流程和技术栈应用,可能结合视频学习更多的是基于技术栈应用,但作为一个企业级项目应用基础入门可算是不错的一个选择,起码对于当时的我而言已经不仅仅局限在单体应用开发的模式。第一次参与公司实习,机缘巧合之下接触taotao商城,也是公司布置的作为Java开发工程师个人技能考核的其中一项(至于为啥不得而知),当时也只有下班回到宿舍的时候才能够肝项目,断断续续大概花了半个多月的时间完成整个项目,到后续的发表,学业、导师项目、公司项目、个人考核,所有的事情堆到一起,实习的酸爽👻只有体会过的人才知道!

学习资料

​ 小伙伴有需自取(📣圈地自萌):神秘链接

项目介绍

​ 在项目搭建过程中主要使用到如下技术:

  • 使用框架:Spring、SpringMVC、Mybatis

  • 前端技术:JSP、JSTL、jQuery、jQuery plugin、EasyUI、KindEditor(富文本编辑器)、CSS+DIV

  • 服务器:Redis(缓存服务器)、Nginx(web服务器)

  • 搜索引擎:Solr(搜索)

  • 数据库:Mysql

  • 跨域服务:httpclient(调用系统服务)

​ 通过taotao商城项目开发了解的内容和相关的技术,除却基础的SSM单体应用相关的技术栈,针对核心扩展内容进行说明

1)Maven工程构建系统架构

​ taotao商城项目摒弃传统的工程结构,使用Maven构建项目的基本架构,将多个系统模块进行拆分,解决了传统工程架构模块之间耦合度过高、扩展性较差的问题,可以灵活地进行分布式部署。对比此前自己掌握的SSM框架项目,在这种开发模式下接口表现层调用服务需要使用HttpClient,需要在表现层创建重复的接口调用服务层接口,因此系统交互间需要额外的工作量。

2)使用HttpClient调用后台服务、使用ajax、jsonp进行跨域请求

​ 由于一开始接触开发模式都是直接在一个工程中划分多个系统模块实现,前端、后端的内容都是放在一块,没有“前后端分离”的概念,通过学习可以慢慢理解这种开发思路。

3)linux相关

​ 在taotao商城项目学习中需要搭建相关的linux服务器环境,例如fastDFS相关的图片服务器、redis单机版/集群版、solr单机/集群版、nginx环境等,由于此前没有接触过这方面相关的内容,导致在实际工作中也吃了不少亏,通过本次学习,能够完成基本环境的搭建,针对环境搭建遇到的问题也能够通过查找相关的日志信息,或者是参考相关的资料独立解决,为了避免之后出现类似的问题,针对在项目环境搭建过程中遇到的问题也会整理相应的文档,记录过程中的问题和相应的解决方案。

4)redis缓存、搜索系统搭建

​ 完成基本的环境搭建之后,需要在工程中加以应用,使用java代码(Jedis)访问redis数据库,在不影响正常业务逻辑的情况下对redis缓存进行处理。

​ 此外,借助SolrServer(单机版:HttpSolrServer、集群版:CloudSolrServer)创建连接,访问、操作相关的数据。对环境进行基本的搭建和简单的使用,但其中一些具体的细节和相关的数据设计原理、流程需要自己额外做功课加以巩固。

5)单点登录系统SSO实现

​ 在此前的项目开发经验中登录、注册仅仅只是作为一个子模块实现,由拦截器简单实现用户访问权限的设置。但随着业务的扩展,需要创建一个SSO在分布式环境下实现session共享,由相关系统调用单点登录系统发布的服务,访问相关的数据,使得用户登录一次,在有效的期限内便可访问不同的应用系统。系统获取用户登陆状态则只需要通过从cookies中获取相关的token,调用sso系统服务查询相关的用户信息,调用拦截器实现相应的强制登录、权限控制等。

6)网页静态化

​ 网页静态化实现:

​ 原始:采用action+jsp实现网页伪静态化(通过model的addAttribute方法将数据传到jsp页面,或采用ajax实现页面页面局部刷新获取数据)

​ 扩展:采用freemarker+nginx实现网页静态化访问测试

​ FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。其编写语法与jsp有所差异,有自己特定的优势,可以结合nginx实现页面静态化。

7)项目热部署

​ 项目开发完成之后,参考相关文档说明,将项目部署到linux测试环境,借助nginx进行域名映射设置,访问环境进行测试。

​ 由于资源的限制,此处服务器配置并没有按照文档要求进行配置,而是根据现有的实际的服务器资源进行配置,具体部署情况如下所示:(实际情况下不同的系统、服务层、表现层根据实际需求部署到不同的服务器上)

​ 实际部署情况:虚拟机192.168.187.128(图片服务器、redis单机/集群、项目部署)、192.168.187.129(solr单机/集群)

8)功能实现

​ 后台管理功能主要实现了基本的商品管理、网站内容管理

​ 商品管理:可以对商品详情、商品分类、规格参数进行管理。管理指定分类的规格参数信息,在编辑商品的时候可以选择指定的分类,根据自动生成的规格模板完善商品信息

​ 网站内容管理:可以对taotao前台网页的展示信息进行管理,可以根据需求管理相应的分类,每个分类对应不同的内容信息

​ 前台购物演示:用户进入taotao商城首页,可以关联搜索到相应的商品,能够访问基本的购物车功能,其次强制用户登录之后才能确认订单信息,点击提交订单信息,完成订单

项目总结

​ 在taotao商城项目搭建过程中遇到许多问题,例如环境配置、项目开发等过程中均有着大大小小的问题。针对一些此前没有接触过的技术,一开始也是一头雾水,但随着尝试去学习相关的内容,了解其原理,简单加以应用,也能够实现一些简单的功能。在学习过程中学会发现问题,并记录问题和相应的解决思路,避免之后走弯路。

​ 这段时间项目学习给我最大的感悟就是“技术的及时更新”,不仅是要尝试新的技术,更是要更新已有的技术知识。虽然有SSM框架开发经历,但在实际的开发过程中还是会存在这样那样的小毛病,有时候只是简单Spring的配置文件出错导致的问题也难以察觉,需要一步步去排查,在这过程中也耗费了不少的时间。在信息快速发展的时代,程序员不得不面对“落后就要挨饿”的紧迫趋势,因此,要学会主动学习、探索新技术,不断地发现自己的不足,提升自身技术能力。

​ 参考了相关资料介绍,对比传统的JavaEE开发,使用SpringBoot进行开发,往往节省不少的开发资源。SpringBoot遵循“约定优先于配置”,目标实现零配置。使用默认配置便可实现项目快速搭建,可以以无感配置整合第三方框架。它可以支持支持多环境配置、filter/servlet/listener、CORS跨域请求、关系型数据库JPA、mybatis、ehcache缓存、rabbitmq等amqp、session集群、线上基于HTTP的监控、线程池druid以及线上监控等模块和功能

​ 相对于mybatis逆向工程而言,Java Persistence API+SpringData是通过正向操作数据库形式访问数据库,即可通过java代码(采用注解形式)访问数据库信息,从而为数据库调整提供了便捷的入口,只需要修改相关的注解信息即可。而Mybatis逆向工程生成的配置文件针对单表查询有相对的优势,但针对多表查询需要根据自身实际的需求修改相应的xxxMapper.xml文件,且一旦数据库作出调整,需要重新生成或者调整相应的配置文件,后期维护工作量较大,适用于有明确需求的数据库设计,而针对后期变化性较大的功能模块则难以控制

​ 此外,许多项目都采取前后端分离技术,前端使用Vue、React、AngularJS 等框架,不用完全依赖后端,但是如果对于比较小型的项目,Springboot+thymeleaf搭配也是个不错的选择。可以采用PageHelper+thymeleaf实现前端分页展示( thymeleaf是一种模板语言,可以动态或者静态显示文本内容,其功能与freemarker类似)。

​ 综上所述,最终虽然基本完成了系统的基本内容,但实际上针对其中一些技术的掌握还需额外扩展,也让我认识到此前在学校的的学习仅仅只是针对一些简单的基础知识,而对于具体的项目实践还欠缺了许多。学校老师提供的学习资源始终有限,很多东西还需要自己在课外或工作之余去加以完善,包括在学习和工作过程中,也认识到自己在许多方面仍然存在许多不足的地方,要学习的内容很多、但学习的时间却很仓促,没有一个比较明确的学习方向和计划、没有实际的实践经验,导致自身事事处于“半桶水”的状态,知其然而不知其所以然。不管如何,希望能够一直保持良好的心态接收新事物,虚心向身边的大佬们请教,努力学习专业知识、积累开发经验

(end - 20190123 完结撒花🎉)

学习内容

开发过程开发说明实现内容说明完成情况
开发环境说明/搭建1.了解电商行业和分布式架构
2.安装开发过程所需要的软件
3.了解项目结构,搭建淘淘后台管理框架
实现:商品列表的查询SSM框架整合创建数据库商品列表功能实现1.02完成
taotao-manager开发1.了解分页插件的使用
2.了解EasyUI的简单实现
3.了解数据库简单设计模式
4.了解富文本编辑器的使用
实现商品添加、商品规格保存相关的内容搭建图片服务器1.07完成
taotao前台系统搭建1.使用HttpClient调用后台服务
2.使用ajax、jsonp进行跨域请求
3.展示taotao商城首页、分类显示
搭建taotao前台系统taotao-rest提供服务层taotao-portal提供表现层1.09完成
CMS内容管理系统搭建1.后台管理实现基本的CRUD
2.通过HttpClient调用taotao-rest后台服务展示首页轮播图
完善后台管理系统,搭建CMS内容管理系统相关的内容1.11完成
Redis单机版、集群版环境搭建1.了解linux系统的使用
2.搭建redis单机版、集群版在项目中整合使用redis缓存处理数据
搭建redis单机版、集群版环境1.15完成
Solr搜索系统搭建Solr单机版、集群版环境搭建1.搭建solr单机版、集群版环境
2.实现solr搜索系统
搭建solr单机版、集群版环境发布taotao-search服务taotao首页实现搜索功能1.16完成
taotao-portal系统完善1.整合redis、solr相关内容
2.使用伪静态化+redis缓存实现
3.商品详情页面展示
4.通过freemaker+nginx实现网页静态化
实现商品详情页面展示1.17完成
SSO单点登录系统实现1.实现SSO单点登录系统创建SSO单点登录系统,发布服务taotao-portal调用单点登录系统了解拦截器的使用1.18完成
购物车、订单系统实现1.实现用户购物车功能
2.实现订单系统taotao-order
实现用户购物车功能实现订单系统,发布服务1.21完成
系统部署1.搭建测试环境
2.部署taotao商城项目
3.测试基本功能
在linux服务器搭建简单的测试环境实现项目热部署测试商城基本实现的功能录制项目演示视频1.22完成
收尾技术总结编写学习总结文档1.23完成