Skip to content

大型分布式购物网站-B2C项目,使用SSM框架

Notifications You must be signed in to change notification settings

sdksdk0/taotaoMalls

Repository files navigation

taotaoMalls

大型分布式购物网站-B2C项目(持续更新中) ##电商行业模式

  • B2B:企业到企业、商家到商家。例如阿里巴巴。
  • B2C:商家到客户。例如京东、淘宝商城
  • C2C:客户到客户。闲鱼。
  • O2O:线上到线下。美团、饿了么。

在互联网项目中尽可能的减少表的关联查询。

Sku:最小库存量单位。就是商品id,是商品最细粒度的划分,每一个sku都唯一对应一款商品,商品的颜色、配置。

##SSM框架整合 ###dao层

  • 1、配置数据源
  • 2、让spring容器管理SqlSessionFactory,单例存在
  • 3、把mapper的代理对象放到spring容器中。使用扫描包的方式加载mapper的代理对象。

###Service层

  • 1、事务管理
  • 2、需要把service实现类放到spring容器中管理

###表现层

  • 1、配置注解驱动
  • 2、配置视图解析器
  • 3、需要扫描controller

###web.xml

  • 1、spring容器的配置
  • 2、spring前端控制器的配置
  • 3、post乱码过滤器
  • 4、请求拦截

###数据库连接池:

Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。 Druid已经在阿里巴巴部署了超过600个应用,经过多年多生产环境大规模部署的严苛考验。

###配置静态资源映射:

<mvc:resources location="/WEB-INF/js/" mapping="/js/**"/>
<mvc:resources  location="/WEB-INF/css/" mapping="/css/**"/>

子容器可以访问父容器中的对象。

##分页插件pageHelper的使用 该分页插件对逆向工程生成的代码支持不好,不能对有查询条件的查询分页,会抛异常。

#图片保存位置 1、小型网站,传统项目是把图片放到Tomcat工程的image文件夹。

2、当并发增加后,就添加服务器,做tomcat集群。使用负载均衡服务器来决定存放到哪个服务器的image中。当图片传到tomcat1中到tomcat2中查找图片,我们可以将tomcat1和tomcat映射到另一台服务器上,然后做共享。或者在负载均衡中进行处理。

方案1:在负载均衡服务器上做一个session 映射,如果有记录则分发到原服务器上。

方案2:在负载均衡服务器中运行一个精灵线程,预测服务器压力过大时会自动把session转移压力过小的服务器中。

3、做专门的图片服务器。使用一个http服务器,Apache.或者Nginx。使用ftp服务上传图片,vsftpd

##图片服务器的搭建 使用centos7.0

需要把nginx的根目录指向ftp上传文件的目录。

##service层 接收Controller传递过来的参数,一个文件MultiPartFile对象。把文件上传到ftp服务器。生成一个新的文件。

使用map实现,Map中的数据应该包含error。

##Controller 接收页面传递过来的图片。调用service上传到图片服务器。返回结果。 参数:MultiPartFile uploadFile 返回值:返回json数据,应该返回一个pojo,PictureResult对象。

##富文本编辑器 //同步文本框中的商品描述 itemAddEditor.sync();

Service接收商品的pojo,把商品数据写入到tb_item中,返回resultMap

##商品描述的保存 商品信息和商品描述是分开存储的。把商品信息描述保存到tb_item_desc表中。

###规格参数

不同分类的规格参数不同,同一分类的规格项是相同的,值不同。

规格组: 规格项:规格值

同一类规格项的分组是相同的,规格参数个商品相关联。

##实现方案: ###方案1:使用多表来存储 每一类商品有多个分组,每个分组下有多个项,每个商品对应不同的规格参数。

商品分类表:Tb_item_cat

一对多:

商品规格分组表:Tb_item_param_group,外键,商品分类id

商品规格项:外键,商品规格分组id

商品表:

商品规格参数表:外键:商品id,商品规格项id,商品规格值。

SELECT  pg.group_name,pk.param_name,pv.param_value
FROM
	tb_item_param_value pv ,
	tb_item_param_key pk,
	tb_item_param_group pg
WHERE 
item_id=855739
AND pv.param_id=pk.id
AND pg.id=pk.group_id

该方案需要创建多张表来描述这个规格参数的关系,查询时需要复杂的sql来查询。如果规格参数的数据量是商品信息的几十倍的时候,数据量大的社会,查询效率非常低。可扩展性差。

###方案2 使用模板的思路来解决。 1、每一个商品分类对应一个规格参数模板。 每个商品对应一个唯一的规格参数,在添加商品时,可以根据规格参数的模板,生成一个表单。

实现流程:

不需要做多表关联。缺点:复杂的表单和json之间的转换。

创建规格参数模板

#前台 #系统架构分析 前台系统和服务层可以分开,降低了系统的耦合度。开发团队可以分开,提高了开发效率。系统可以分开灵活的进行分布式部署。 服务之间通信使用的接口通信,开发工作量提高。

使用SSM框架。pom文件添加依赖。

Spring、springmvc、jstl、jQuery、httpClient.

*.html:伪静态化,是给搜索引擎用的。

商品分类展示: 首页左侧的一个商品分类。页面做一个ajax请求,请求json数据含分类信息,得到json数据后初始化分类菜单。

###json跨域请求: 处于安全考虑,js设计时不允许跨域。域名不同;域名相同但是端口不同;只有域名相同,端口相同才可以访问。

可以使用jsonp来解决:jsonp,js跨域请求数据是不可以的,但是js跨域请求js脚本是可以的。所以我们可以把数据封装成一个js语句,跨域请求js脚本,可以得到此脚本。得到js脚本之后会立即执行。可以把数据作为参数传递到方法中。

URL_Serv: "http://localhost:8084/category.json"

//使用jsonp来实现跨域请求
    $.getJSONP(this.URL_Serv, category.getDataService);

MappingJacksonValue

About

大型分布式购物网站-B2C项目,使用SSM框架

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published