首页 > 代码库 > 电商01

电商01

横向切分,把表现层和服务层拆分成不同的war包;纵向切分,把各个模块分成不同war包

<style>p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-size: 10.5000pt } h1 { margin-top: 17.0000pt; margin-bottom: 16.5000pt; margin-left: 21.6000pt; text-indent: -21.6000pt; page-break-after: avoid; text-align: justify; line-height: 240%; font-family: Calibri; font-weight: bold; font-size: 22.0000pt } h2 { margin-top: 13.0000pt; margin-bottom: 13.0000pt; margin-left: 28.9000pt; text-indent: -28.9000pt; page-break-after: avoid; text-align: justify; line-height: 172%; font-family: "Calibri Light"; font-weight: bold; font-size: 16.0000pt } h3 { margin-top: 13.0000pt; margin-bottom: 13.0000pt; margin-left: 36.0000pt; text-indent: -36.0000pt; page-break-after: avoid; text-align: justify; line-height: 173%; font-family: Calibri; font-weight: bold; font-size: 16.0000pt } h4 { margin-top: 14.0000pt; margin-bottom: 14.5000pt; margin-left: 43.2000pt; text-indent: -43.2000pt; page-break-after: avoid; text-align: justify; line-height: 156%; font-family: "Calibri Light"; font-weight: bold; font-size: 14.0000pt } span.10 { font-family: Calibri } span.15 { font-family: Calibri; color: rgb(5,99,193); text-decoration: underline } p.16 { margin: 0pt; margin-bottom: .0001pt; text-indent: 21.0000pt; text-align: justify; font-family: Calibri; font-size: 10.5000pt } p.17 { margin: 0pt; margin-bottom: .0001pt; text-indent: 21.0000pt; text-align: justify; font-family: Calibri; font-size: 10.5000pt } span.msoIns { text-decoration: underline; color: blue } span.msoDel { text-decoration: line-through; color: red } table.MsoNormalTable { font-family: "Times New Roman"; font-size: 10.0000pt } table.MsoTableGrid { font-family: "Times New Roman"; font-size: 10.0000pt } div.Section0 { }</style>

1 电商核心业务主线

技术分享

2 项目介绍

传统项目:使用人群是企业内部员工,类似项目(OAERP等)

互联网项目:使用人群是互联网用户,类似项目(京东、P2P金融)

IT公司类型

自己做产品的京东淘宝还有一些创业公司。特点是产品开发周期长

做互联网软件的方正北明中软开发周期一般最多半年

人力外包公司:华为、软通动力。开发周期一般三四个月。

3 整体课程计划

第一天

1、 电商介绍

2、 宜立方商城介绍

a) 宜立方商城的架构

3、 搭建后台管理系统

a) 使用maven搭建

4、 SSM框架整合

5、 上传代码到SVN

第二天:

1、 改造工程为SOA架构

a) 服务中间件dubbo

b) 工程改造

2、 后台首页展示及功能页面展示

3、 商品列表功能开发

a) Mybatis的分页pagehelper

第三天

1、 创建商品之商品类目选择easyui tree控件ztreedtree))

2、 创建商品之分析商品图片上传

3、 图片展示之Nginx讲解

第四天

1、 图片服务器fastdfs讲解(不需要课堂安装,直接提供安装好的虚拟机)

2、 实现图片上传功能

3、 商品描述之富文本编辑器KindEditorfckeditor

4、 实现商品添加功能

第五天

1、 搭建EC系统

2、 展示商城首页

3、 CMS系统实现

a) 内容分类(广告位)管理

b) 内容(广告)管理

第六天:

1、 首页大广告位动态展示

2、 redis安装

3、 redis集群安装

4、 实现业务缓存逻辑

第七天

1、 搜索系统搭建

2、 Solr安装

3、 初始化商品索引数据

4、 实现搜索功能

第八天:

1、 solrcloud 集群搭建

2、 activemq介绍

3、 activemq安装配置

4、 activemq使用

第九天:

1、 实现商品索引同步

2、 商品详情页动态展示jsp+redis

3、 Freemarker讲解

第十天

1、 商品详情页静态化

2、 创建登录系统

3、 实现注册功能

第十一天

1、 实现登录功能

2、 Cookie跨域

3、 Js跨域

第十二天

1、 创建购物车系统

2、 实现购物车功能

第十三天

1、创建订单系统

2、实现下单功能

第十四天

1、 项目部署

2、 项目总结

3、 面试中遇到的问题


4 电商介绍

4.1 电商理解

电商全名叫电子商务英文名称Electronic Commerce简称EC

“21世纪要么电子商务,要么无商可务’”——比尔?盖茨对电子商务的高度评价。

电子商务通常是指在全球各地广泛的商业贸易活动中,在因特网开放的网络环境下,基于浏览器/服务器应用方式,买卖双方不谋面地进行各种商贸活动,实现消费者的网上购物、商户之间的网上交易和在线电子支付以及各种商务活动、交易活动、金融活动和相关的综合服务活动的一种新型的商业运营模式。

4.2 电商运营模式(掌握)

按照电商行业的运营模型一般分为以下几种模式

B2B:商家到商家。例如:阿里巴巴(www.1688.com)、慧聪网。

B2C:商家到用户。例如京东商城、国美网上商城、小米商城、华为商城。

B2B2C:商家到商家到用户,比如京东、天猫都有第三方商户。

C2C:用户到用户。比如淘宝。

O2O:线上到线下,比如百度外卖、美团等。

4.3 11.11

技术分享

技术分享

技术分享

4.4 电商行业技术特点

? 分布式

? 高并发

? 高可用

? 集群

? 负载均衡

? 海量数据

? 系统安全

5 宜立方商城介绍

5.1 商城概述

宜立方网上商城是一个综合性的B2C商城,运营模式类似京东商城。对于B2C模式的商城来说,它的系统主要包括『前台商城系统』、『后台管理系统』,及一些『周边系统』。

[商城会员]可以在『前台商城系统』搜索商品、用户登录、添加购物车、提交订单等操作。

[商城运营人员]可以在『后台管理系统』中管理商品、订单、会员等信息。

[商城客服人员]可以在『后台管理系统』中处理用户的询问以及投诉等操作。

5.2 功能架构

技术分享

5.3 系统架构(重点)

5.3.1 传统架构

依照传统架构实现的话只需要创建一个工程即可

技术分享

思考:传统架构在互联网应用中存在什么问题

1、 系统耦合性高,一个模块出现问题,其他模块都无法正常使用。

2、 系统扩展性差,添加新功能时,会对现有系统产生破坏。

5.3.2 分布式系统架构

依据分布式系统架构实现的话需要创建多个工程不同的工程完成不同的功能

技术分享

分布式架构:把系统按照系统模块拆分成多个独立的子系统。

优点:

1、系统之间弱耦合,把模块拆分,使用接口通信,降低模块之间的耦合度。

2、系统之间扩展性好有新功能时添加子模块即可不会对原有系统产生破坏大大增强系统可扩展性

3、部署灵活方便,互联网应用需要进行分布式部署,使用这种架构,可以灵活的进行分布式部署。

缺点:

系统之间交互需要使用远程通信,接口开发增加工作量。

5.3.3 宜立方商城系统架构(SOA

宜立方商城的架构就是采用的分布式架构,只不过在此架构基础之上我们又实现了面向服务的思想,所以宜立方商城的架构就是分布式服务架构

宜立方商城架构体系两部分信息

1、 分布式(表现层分布式、服务层分布式)

2、 面向服务(表现层和服务层拆分)

a) 需要使用RPC框架webservicesoap协议很大)

b) 使用restful请求(比如移动端app调用后台服务,调用http请求)

c) Dubbo(阿里出品,只能在公司内部使用)

具体架构如下:

技术分享

宜立方商城的架构

1、 先是按照工程的三层结构进行拆分。

2、 其次再根据功能模块进行拆分

5.4 技术选项

l Maven(管理依赖及工程构建)

l SVN(版本控制工具)

l SSM框架(spring+springmvc+mybatis

l Mysql(数据库)

l JSPjQueryjQuery EasyUIKindEditor(富文本编辑器)

l Linux

l Redis(缓存服务器)

l RedisCluster(集群)

l Solr(搜索服务器)

l solrcloud集群

l Dubbo+zookeeper(调用&发布服务)

l Nginxhttp&反向代理服务器)

l FastDFS图片服务器

l Freemarker(页面静态化)

l Activemq消息中间件

6 搭建后台管理系统

整个电商系统中的工程都是由maven来创建

Maven是一个项目管理工具也是一个项目构建工具类似的产品有ant

Maven的核心功能:依赖管理(使用POM文件进行jar包的管理)、项目构建(使用插件使用项目的编译、打包、部署等操作)

Maven有三大生命周期cleanDefaultsite

主要是使用Default生命周期,该周期包含几个阶段phase):compiletestpackage\isntall\deploy

每个生命周期包含几个有固定顺序的阶段每个阶段由插件plugin)实现。

Maven的核心概念坐标GAV)、依赖传递、继承、聚合

继承和聚合都是POM工程。

项目一创建的父工程,即体现继承也体现聚合。

在继承的父工程中,项目管理依赖版本。继承简单点将就是继承了POM文件。

在聚合工程中实际上就是将聚合工程的子模块最终合成一个war

Maven有仓库的概念使用仓库可以对依赖进行管理

仓库分为本地仓库和远程仓库(中央仓库、私服)。

使用maven很重要的认识就是需要知道本地仓库建议一个项目单独指定本地仓库地址

我们为什么使用maven来创建工程呢

首先,maven是一个优秀的项目构建工具使用maven可以很方便的对项目进行分模块构建这样在开发和测试打包部署时效率会提高很多

其次,maven可以进行依赖的管理使用maven,可以将不同系统的依赖进行统一管理并且可以进行依赖之间的传递和继承

6.1 设置宜立方商城Maven本地仓库

使用eclipse mars2自带的maven插件,但是maven版本是3.3.9,指定宜立方商城专用本地仓库地址

技术分享

如果不能联网,可以将以下仓库压缩包解压,然后拷贝repository目录中的内容到自己的本地仓库位置,比如我的本地仓库:E:\08-repo\02-e3\repository

6.2 Maven工程结构

|--e3-parent(父工程,主要管理依赖版本,不真实添加依赖,打包类型POM

|--e3-common(通用工具类工程,jar

|--e3-manager(后台管理系统,聚合工程POM

|--e3-manager-pojo(实体类工程,jar

|--e3-manager-dao(持久层工程,jar

|--e3-manager-interface(服务层工程,jar

|--e3-manager-service(服务实现类工程,jar

|--e3-manager-web(表现层工程,war

6.3 搭建e3-parent

作用使用dependencyManagement标签统一管理依赖版本号

6.3.1 POM文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>cn.e3mall</groupId>

<artifactId>e3-parent</artifactId>

<version>0.0.1-SNAPSHOT</version>

<packaging>pom</packaging>

<!-- 集中管理版本号 -->

<properties>

<!-- 数据库相关 -->

<mysql.version>5.1.32</mysql.version>

<druid.version>1.0.9</druid.version>

<mybatis.version>3.2.8</mybatis.version>

<pagehelper.version>3.4.2-fix</pagehelper.version>

<!-- mybatisspring整合包 -->

<mybatis.spring.version>1.2.2</mybatis.spring.version>

<!-- spring相关 -->

<spring.version>4.1.3.RELEASE</spring.version>

<!-- 页面相关 -->

<jstl.version>1.2</jstl.version>

<freemarker.version>2.3.23</freemarker.version>

<jackson.version>2.4.2</jackson.version>

<!-- 日志相关 -->

<slf4j.version>1.6.4</slf4j.version>

<!-- 日期库 -->

<joda-time.version>2.5</joda-time.version>

<!-- commons工具包 -->

<commons-lang3.version>3.3.2</commons-lang3.version>

<commons-io.version>1.3.2</commons-io.version>

<commons-fileupload.version>1.3.1</commons-fileupload.version>

<commons-net.version>3.3</commons-net.version>

<!-- redis客户端 -->

<jedis.version>2.7.2</jedis.version>

<!-- solr客户端 -->

<solrj.version>4.10.3</solrj.version>

<!-- quartz时间任务 -->

<quartz.version>2.2.2</quartz.version>

<!-- servlet相关 -->

<servlet-api.version>2.5</servlet-api.version>

<jsp-api.version>2.0</jsp-api.version>

<!-- 单元测试 -->

<junit.version>4.12</junit.version>

<!-- dubbo -->

<dubbo.version>2.5.3</dubbo.version>

<zookeeper.version>3.4.7</zookeeper.version>

<zkclient.version>0.1</zkclient.version>

<!-- fastdfs依赖 -->

<fastdfs_client.version>1.25</fastdfs_client.version>

<!-- activemq依赖 -->

<activemq.verion>5.11.2</activemq.verion>

</properties>

<!-- 统一管理依赖版本号 -->

<dependencyManagement>

<dependencies>

<!-- 时间操作组件 -->

<dependency>

<groupId>joda-time</groupId>

<artifactId>joda-time</artifactId>

<version>${joda-time.version}</version>

</dependency>

<!-- Apache工具组件 -->

<dependency>

<groupId>org.apache.commons</groupId>

<artifactId>commons-lang3</artifactId>

<version>${commons-lang3.version}</version>

</dependency>

<dependency>

<groupId>org.apache.commons</groupId>

<artifactId>commons-io</artifactId>

<version>${commons-io.version}</version>

</dependency>

<!-- 文件上传组件 -->

<dependency>

<groupId>commons-fileupload</groupId>

<artifactId>commons-fileupload</artifactId>

<version>${commons-fileupload.version}</version>

</dependency>

<dependency>

<groupId>commons-net</groupId>

<artifactId>commons-net</artifactId>

<version>${commons-net.version}</version>

</dependency>

<!-- Jackson Json处理工具包 -->

<dependency>

<groupId>com.fasterxml.jackson.core</groupId>

<artifactId>jackson-databind</artifactId>

<version>${jackson.version}</version>

</dependency>

<!-- 单元测试 -->

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>${junit.version}</version>

</dependency>

<!-- 日志处理 -->

<dependency>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-log4j12</artifactId>

<version>${slf4j.version}</version>

</dependency>

<!-- mysql驱动 -->

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>${mysql.version}</version>

</dependency>

<!-- 数据库连接池包 德鲁伊(druid-->

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>druid</artifactId>

<version>${druid.version}</version>

</dependency>

<!-- mybatis -->

<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis</artifactId>

<version>${mybatis.version}</version>

</dependency>

<!-- mybatis的分页插件 -->

<dependency>

<groupId>com.github.pagehelper</groupId>

<artifactId>pagehelper</artifactId>

<version>${pagehelper.version}</version>

</dependency>

<!-- mybatisspring的整合包 -->

<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis-spring</artifactId>

<version>${mybatis.spring.version}</version>

</dependency>

<!-- spring的包 -->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-beans</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-jdbc</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-webmvc</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-aspects</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context-support</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-jms</artifactId>

<version>${spring.version}</version>

</dependency>

<!-- jsp相关 -->

<dependency>

<groupId>jstl</groupId>

<artifactId>jstl</artifactId>

<version>${jstl.version}</version>

</dependency>

<!-- freemarker相关 -->

<dependency>

<groupId>org.freemarker</groupId>

<artifactId>freemarker</artifactId>

<version>${freemarker.version}</version>

</dependency>

<!-- servlet-apijsp-api -->

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>servlet-api</artifactId>

<version>${servlet-api.version}</version>

<scope>provided</scope>

</dependency>

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>jsp-api</artifactId>

<version>${jsp-api.version}</version>

<scope>provided</scope>

</dependency>

<!-- Redis客户端 -->

<dependency>

<groupId>redis.clients</groupId>

<artifactId>jedis</artifactId>

<version>${jedis.version}</version>

</dependency>

<!-- solr客户端 -->

<dependency>

<groupId>org.apache.solr</groupId>

<artifactId>solr-solrj</artifactId>

<version>${solrj.version}</version>

</dependency>

<!-- 定时任务 -->

<dependency>

<groupId>org.quartz-scheduler</groupId>

<artifactId>quartz</artifactId>

<version>${quartz.version}</version>

</dependency>

<!-- dubbo相关 -->

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>dubbo</artifactId>

<version>${dubbo.version}</version>

</dependency>

<dependency>

<groupId>org.apache.zookeeper</groupId>

<artifactId>zookeeper</artifactId>

<version>${zookeeper.version}</version>

</dependency>

<dependency>

<groupId>com.github.sgroschupf</groupId>

<artifactId>zkclient</artifactId>

<version>${zkclient.version}</version>

</dependency>

<dependency>

<groupId>fastdfs_client</groupId>

<artifactId>fastdfs_client</artifactId>

<version>${fastdfs_client.version}</version>

</dependency>

<dependency>

<groupId>org.apache.activemq</groupId>

<artifactId>activemq-all</artifactId>

<version>${activemq.verion}</version>

</dependency>

</dependencies>

</dependencyManagement>

<build>

<!-- 定制打包的包名 -->

<finalName>${project.artifactId}</finalName>

<plugins>

<!-- 资源文件拷贝插件 -->

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-resources-plugin</artifactId>

<version>2.7</version>

<configuration>

<encoding>UTF-8</encoding>

</configuration>

</plugin>

<!-- java编译插件 -->

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-compiler-plugin</artifactId>

<version>3.2</version>

<configuration>

<source>1.7</source>

<target>1.7</target>

<encoding>UTF-8</encoding>

</configuration>

</plugin>

</plugins>

<pluginManagement>

<plugins>

<!-- 配置Tomcat插件,只管理,不真实添加tomcat插件 -->

<plugin>

<groupId>org.apache.tomcat.maven</groupId>

<artifactId>tomcat7-maven-plugin</artifactId>

<version>2.2</version>

</plugin>

</plugins>

</pluginManagement>

</build>

</project>

6.4 搭建e3-common

6.4.1 POM文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<parent>

<groupId>cn.e3mall</groupId>

<artifactId>e3-parent</artifactId>

<version>0.0.1-SNAPSHOT</version>

</parent>

<artifactId>e3-common</artifactId>

<!-- 添加依赖 -->

<dependencies>

<!-- 时间操作组件 -->

<dependency>

<groupId>joda-time</groupId>

<artifactId>joda-time</artifactId>

</dependency>

<!-- Apache工具组件 -->

<dependency>

<groupId>org.apache.commons</groupId>

<artifactId>commons-lang3</artifactId>

</dependency>

<dependency>

<groupId>org.apache.commons</groupId>

<artifactId>commons-io</artifactId>

</dependency>

<dependency>

<groupId>commons-net</groupId>

<artifactId>commons-net</artifactId>

</dependency>

<!-- Jackson Json处理工具包 -->

<dependency>

<groupId>com.fasterxml.jackson.core</groupId>

<artifactId>jackson-databind</artifactId>

</dependency>

<!-- 文件上传组件 -->

<dependency>

<groupId>commons-fileupload</groupId>

<artifactId>commons-fileupload</artifactId>

</dependency>

<!-- 日志处理 -->

<dependency>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-log4j12</artifactId>

</dependency>

</dependencies>

</project>

6.5 搭建e3-manager

e3-manager工程是一个聚合工程,也就是POM工程。

6.5.1 创建聚合工程

6.5.2 修改POM文件

要运行聚合工程需要配置tomcat7的插件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<parent>

<groupId>cn.e3mall</groupId>

<artifactId>e3-parent</artifactId>

<version>0.0.1-SNAPSHOT</version>

</parent>

<artifactId>e3-manager</artifactId>

<packaging>pom</packaging>

<!-- 添加依赖 -->

<dependencies>

<dependency>

<groupId>cn.e3mall</groupId>

<artifactId>e3-common</artifactId>

                 <version>0.0.1-SNAPSHOT</version>

</dependency>

</dependencies>

<!-- 添加tomcat插件,此处不用写版本号 -->

<build>

<plugins>

<plugin>

<groupId>org.apache.tomcat.maven</groupId>

<artifactId>tomcat7-maven-plugin</artifactId>

                          <!-—不配置Tomcat7插件也能运行不过默认的端口是8080path就是工程的名称 -->

<configuration>

<port>8080</port>

<path>/</path>

</configuration>

</plugin>

</plugins>

</build>

</project>

6.5.3 创建e3-manager-pojo

创建聚合工程的子模块e3-manager-pojo工程

第一步:右键点击e3-manager工程new—>project

技术分享

第二步:next

第三步点击Finish创建工程

6.5.4 创建e3-manager-dao

e3-manager-pojo的创建

6.5.4.1 POM文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<parent>

<groupId>cn.e3mall</groupId>

<artifactId>e3-manager</artifactId>

<version>0.0.1-SNAPSHOT</version>

</parent>

<artifactId>e3-manager-dao</artifactId>

<!-- 添加依赖 -->

<dependencies>

<dependency>

<groupId>${project.groupId}</groupId>

<artifactId>e3-manager-pojo</artifactId>

                 <version>0.0.1-SNAPSHOT</version>

</dependency>

<!-- Mybatis -->

<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis</artifactId>

</dependency>

<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis-spring</artifactId>

</dependency>

<dependency>

<groupId>com.github.pagehelper</groupId>

<artifactId>pagehelper</artifactId>

</dependency>

<!-- MySql -->

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

</dependency>

<!-- 连接池 -->

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>druid</artifactId>

</dependency>

<!-- spring -->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context</artifactId>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-beans</artifactId>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-jdbc</artifactId>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-aspects</artifactId>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context-support</artifactId>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-webmvc</artifactId>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-jms</artifactId>

</dependency>

</dependencies>

</project>

6.5.5 创建e3-manager-interface

e3-manager-pojo的创建

6.5.5.1 POM文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<parent>

<groupId>cn.e3mall</groupId>

<artifactId>e3-manager</artifactId>

<version>0.0.1-SNAPSHOT</version>

</parent>

<artifactId>e3-manager-interface</artifactId>

<dependencies>

<dependency>

<groupId>cn.e3mall</groupId>

<artifactId>e3-manager-pojo</artifactId>

                 <version>0.0.1-SNAPSHOT</version>

</dependency>

</dependencies>

</project>

6.5.6 创建e3-manager-service

e3-manager-pojo的创建

6.5.6.1 POM文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<parent>

<groupId>cn.e3mall</groupId>

<artifactId>e3-manager</artifactId>

<version>0.0.1-SNAPSHOT</version>

</parent>

<artifactId>e3-manager-service</artifactId>

<!-- 添加依赖 -->

<dependencies>

<dependency>

<groupId>${project.groupId}</groupId>

<artifactId>e3-manager-dao</artifactId>

<version>${project.version}</version>

</dependency>

           <!-- 服务接口依赖 -->

<dependency>

<groupId>${project.groupId}</groupId>

<artifactId>e3-manager-interface</artifactId>

<version>${project.version}</version>

</dependency>

</dependencies>

</project>

6.5.7 搭建e3-manager-web

6.5.7.1 POM文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<parent>

<groupId>cn.e3mall</groupId>

<artifactId>e3-manager</artifactId>

<version>0.0.1-SNAPSHOT</version>

</parent>

<artifactId>e3-manager-web</artifactId>

<packaging>war</packaging>

<!-- 添加依赖 -->

<dependencies>

           <dependency>

<groupId>${project.groupId}</groupId>

<artifactId>e3-manager-service</artifactId>

<version>${project.version}</version>

</dependency>

<!-- JSP相关 -->

<dependency>

<groupId>jstl</groupId>

<artifactId>jstl</artifactId>

</dependency>

<!-- servlet相关 -->

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>servlet-api</artifactId>

<scope>provided</scope>

</dependency>

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>jsp-api</artifactId>

<scope>provided</scope>

</dependency>

</dependencies>

</project>

6.5.7.2 Web.xml

注意使用maven创建的web工程需要手动创建WEB-INF目录和web.xml文件

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

id="e3" version="2.5">

</web-app>

7 SSM框架整合及测试

7.1 整合思路

整体思路是用spring来整合所有的javabean同时整合配置文件

1、 dao层(mybatisspring整合)

a) spring管理数据源

b) spring管理SqlSessionFactory

c) spring生成mapper接口的代理对象

2、 service层(spring

a) spring管理servicebean

b) spring管理事务

3、 Controller层(springmvc

a) springmvc本身是spring的一个模块无需整合

7.2 整合dao

e3-manager-dao工程中整合持久层。

1.1.1 applicationContext-dao.xml

src/main/resources目录下,创建spring目录,然后创建applicationContext-dao.xml,内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"

xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd

http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd

http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">

<!-- 加载java的配置文件 -->

<context:property-placeholder location="classpath*:properties/*.properties" />

<!-- 创建数据源 -->

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"

destroy-method="close">

<property name="driverClassName" value="${db.driver}" />

<property name="url" value="${db.url}" />

<property name="username" value="${db.username}" />

<property name="password" value="${db.password}" />

<property name="maxActive" value="${db.maxActive}" />

<property name="minIdle" value="${db.minIdle}" />

</bean>

<!-- SqlSessionFactory -->

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

<!-- 指定mybatis的全局配置文件的路径 -->

<property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml"></property>

<!-- 别名定义 -->

<property name="typeAliasesPackage" value="cn.e3mall.manager.po"></property>

<!-- 数据源 -->

<property name="dataSource" ref="dataSource"></property>

</bean>

<!-- 批量配置mapper代理类 -->

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">

<!-- 配置扫描的包 -->

<property name="basePackage" value="cn.e3mall.manager.mapper"></property>

</bean>

</beans>

备注:

Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCPC3P0BoneCPProxoolJBoss DataSource

Druid已经在阿里巴巴部署了超过600个应用,经过多年多生产环境大规模部署的严苛考验。

7.2.1 SqlMapConfig.xml

src/main/resources目录下,创建mybatis目录,然后创建SqlMapConfig.xml,内容如下

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE configuration

PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

</configuration>

7.2.2 db.properties

src/main/resources目录下创建properties目录然后创建db.properties文件

db.driver=com.mysql.jdbc.Driver

db.url=jdbc:mysql://localhost:3306/e3mall?useUnicode=true&characterEncoding=utf8

db.username=root

db.password=root

db.maxActive=10

db.minIdle=5

7.2.3 log4j.properties(非必须)

src/main/resources目录下创建log4j.properties文件

# Global logging configuration

log4j.rootLogger=DEBUG, stdout

# Console output...

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

7.3 整合service

7.3.1 applicationContext-service.xml

src/main/resources目录下,创建spring目录,然后创建applicationContext-service.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"

xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd

http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd

http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">

<!-- 包扫描器,扫描带@Service注解的类 -->

<context:component-scan base-package="cn.e3mall.manager.service"></context:component-scan>

<!-- 事务管理器 -->

<bean id="transactionManager"

class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<!-- 数据源 -->

<property name="dataSource" ref="dataSource" />

</bean>

<!-- 通知 -->

<tx:advice id="txAdvice" transaction-manager="transactionManager">

<tx:attributes>

<!-- 传播行为 -->

<tx:method name="save*" propagation="REQUIRED" />

<tx:method name="insert*" propagation="REQUIRED" />

<tx:method name="add*" propagation="REQUIRED" />

<tx:method name="create*" propagation="REQUIRED" />

<tx:method name="delete*" propagation="REQUIRED" />

<tx:method name="del*" propagation="REQUIRED" />

<tx:method name="remove*" propagation="REQUIRED" />

<tx:method name="update*" propagation="REQUIRED" />

<tx:method name="modify*" propagation="REQUIRED" />

<tx:method name="edit*" propagation="REQUIRED" />

<tx:method name="find*" propagation="SUPPORTS" read-only="true" />

<tx:method name="select*" propagation="SUPPORTS" read-only="true" />

<tx:method name="get*" propagation="SUPPORTS" read-only="true" />

</tx:attributes>

</tx:advice>

<!-- 切面 -->

<aop:config>

<aop:advisor advice-ref="txAdvice"

pointcut="execution(* cn.e3mall.manager.service.*.*(..))" />

</aop:config>

</beans>

7.4 整合Controller

7.4.1 web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

id="e3" version="2.5">

<display-name>e3-manager-web</display-name>

<!-- springmvc的前端控制器 -->

<servlet>

<servlet-name>springmvc</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<init-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:spring/springmvc.xml</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>springmvc</servlet-name>

<url-pattern>/</url-pattern>

</servlet-mapping>

<!-- 初始化spring容器 -->

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>

classpath*:spring/applicationContext-*.xml

</param-value>

</context-param>

<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

<!-- 解决post乱码 -->

<filter>

<filter-name>CharacterEncodingFilter</filter-name>

<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

<init-param>

<param-name>encoding</param-name>

<param-value>utf-8</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>CharacterEncodingFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

</web-app>

7.4.2 springmvc.xml

src/main/resources目录下,创建spring目录,然后创建springmvc.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:mvc="http://www.springframework.org/schema/mvc"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd

        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

<!-- 配置包扫描器 -->

<context:component-scan base-package="cn.e3mall.manager.controller"></context:component-scan>

<!-- 配置注解驱动 -->

<mvc:annotation-driven />

<!-- 视图解析器 -->

<bean

class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<property name=