首页 > 代码库 > 电商01
电商01
1 电商核心业务主线
2 项目介绍
传统项目:使用人群是企业内部员工,类似项目(OA、ERP等)
互联网项目:使用人群是互联网用户,类似项目(京东、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控件(ztree、dtree))
2、 创建商品之分析商品图片上传
3、 图片展示之Nginx讲解
第四天:
1、 图片服务器fastdfs讲解(不需要课堂安装,直接提供安装好的虚拟机)
2、 实现图片上传功能
3、 商品描述之富文本编辑器(KindEditor【fckeditor】)
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框架(webservice,soap协议很大)
b) 使用restful请求(比如移动端app调用后台服务,调用http请求)
c) Dubbo(阿里出品,只能在公司内部使用)
具体架构如下:
宜立方商城的架构:
1、 先是按照工程的三层结构进行拆分。
2、 其次再根据功能模块进行拆分。
5.4 技术选项
l Maven(管理依赖及工程构建)
l SVN(版本控制工具)
l SSM框架(spring+springmvc+mybatis)
l Mysql(数据库)
l JSP、jQuery、jQuery EasyUI、KindEditor(富文本编辑器)
l Linux
l Redis(缓存服务器)
l RedisCluster(集群)
l Solr(搜索服务器)
l solrcloud集群
l Dubbo+zookeeper(调用&发布服务)
l Nginx(http&反向代理服务器)
l FastDFS(图片服务器)
l Freemarker(页面静态化)
l Activemq消息中间件
6 搭建后台管理系统
整个电商系统中的工程都是由maven来创建。
Maven是一个项目管理工具,也是一个项目构建工具,类似的产品有ant。 Maven的核心功能:依赖管理(使用POM文件进行jar包的管理)、项目构建(使用插件使用项目的编译、打包、部署等操作) Maven有三大生命周期:clean、Default、site 主要是使用Default生命周期,该周期包含几个阶段(phase):compile、test、package\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> <!-- mybatis与spring整合包 --> <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> <!-- mybatis与spring的整合包 --> <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-api和jsp-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插件,也能运行。不过默认的端口是8080,path就是工程的名称 --> <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层(mybatis和spring整合)
a) spring管理数据源
b) spring管理SqlSessionFactory
c) spring生成mapper接口的代理对象
2、 service层(spring)
a) spring管理service的bean
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是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss 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=
|