下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、魔力商城第二天1 内容回顾1、聊聊电商行业2、魔力商城功能介绍3、魔力商城系统架构a) 传统的系统架构b) 分布式系统架构4、工程搭建a) 使用 maven 管理工程b) 搭建一个聚合工程i. Pojoii. Mapperiii. Serviceiv. Web(war )5、Ssm 框架整合a) Mybatis 的逆向工程b) Mybatis 整合 spring+springmvc2 课程计划1、把工程改造成基于 soa 系统架构a) 使用 dubbo2、商品列表查询功能实现a) Easyui 的 DataGrid 控件b) Mybatis 的分页插件3 改造工程3.1 魔力商城的系统架构服务
2、中间件 Dubbo商品服务内容服务单点登录服务订单服务搜索服务缓存redis服务层Solr服务MyCat数据库中间件索引库持久层Mysql 数据库Mysql数据库Mysql数据库Mysql数据库消息队列ActiveMQ表现层后台管理系统商城门户搜索系统订单系统会员系统表现层服务层dao 层例如:后台管理工程需要根据商品 id 查询商品信息。 前台系统也需要根据商品 id 查询商品信息。后台管理系统两个相同的业务逻辑可以可使用相同的服务。1、系统之间调用可以使用 Webservice2、可以使用 dubbo 管理服务。商品服务3.2 Dubbo3.2.1 Dubbo 介绍官方网站: http:/
3、dubbo.io/Home-zh.htmDubbo 就是 资源调度和治理中心的管理工具3.2.2 Dubbo 的架构节点角色说明:Provider: 暴露服务的服务提供方。Consumer: 调用远程服务的服务消费方。Registry: 服务注册与发现的注册中心。Monitor: 统计服务的调用次调和调用时间的监控中心。Container: 服务运行容器。Dubbo 的使用方法远程服务: 在本地服务的基础上,只需做简单配置,即可完成远程化: 将上面的 local.xml 配置拆分成两份,将服务定义部分放在服务提供方 remote-provider.xml , 将服务引用部分放在服务消费方 re
4、mote-consumer.xml 。并在提供方增加暴 露服 务配置<dubbo:service> , 在消费方增加引用服 务配置<dubbo:reference> 。 发布服务:<!- 和本地服务一样实现远程服务->/><!- 增加暴露远程服务配置 ->/>调用服务:<!- 增加引用远程服务配置 ->/> <!- 和本地服务一样使用远程服务-><property name="xxxService" ref="xxxService" /> </be
5、an>3.3 工程的改造方案 把工程拆分成两个独立运行的工程: 1、后台服务端工程 moli-manager : 包含: moli-manager-dao moli-manager-pojo moli-manager-service 模块,打成一个 war 包(目的是方便部署) 。 包含一个 spring 容器发布服务。2、web 展现工程: moli-manager-web 包含: web 程序的页面 一个 spring 容器,用于处理 http 请求 moli-manager-controller3、把接口文件单独打成一 jar 包,服务端工程依赖、表现层工程也依赖。3.4 后端服务
6、工程改造步骤第 1 步:从 moli-manager-web 工程中把 spring 、 properties 、 mybatis 配置文件拷贝到 moli-manager-service 工程中,并且删除 springmvc.xml第 2 步:在 moli-manager 下新建一个模块 moli-manager-interface 再从 moli-manager-service 工程中将接口包整体移动到 moli-manager-interface 第 3 步: moli-manager-service 工程的 pom 中添加对 moli-manager-interface 和 dubbo
7、 的依赖 添加 dubbo 依赖的 jar 包<dependency ><groupId >com.alibaba </ groupId ><artifactId >dubbo </ artifactId ></ dependency ><dependency ></ groupId ><artifactId >zookeeper </ artifactId ></ dependency ><dependency ></ groupId >
8、<artifactId >zkclient </ artifactId ></ dependency >第 4 步:在 applicationContext-service.xml 配置文件中发布服务 引入 dubbo 的 schema,配置服务<?xml version ="1.0" encoding ="UTF-8" ?><beans xmlns =""xmlns:context = ""xmlns:p =""xmlns:aop =&qu
9、ot;"xmlns:tx =""xmlns:xsi =""xmlns:dubbo =""xsi:schemaLocation =" " ><!- 配置包扫描器,扫描带 Service 注解的类 ->/><!- 发布服务 -><!- 提供方应用信息,用于计算依赖关系 -><dubbo:application name="moli-manager-service" /><!- 使用 multicast 广播注册中心暴露服务地
10、址 ->/><!- 用 dubbo 协议在 20880 端口暴露服务 -> <dubbo:protocol name="dubbo" port ="20880" /><!- 声明需要暴露的服务接口 -><dubbo:service interface =" " ref ="itemServiceImpl" /></ beans >第 5 步:在 moli-manager-service 工程中建个 package 写一个 service 后台服
11、务工程的启动类:public class ManagerSerivceBootStrap public static void main(String args) throws Exception ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-*.xml"); context.start();while(true)Thread.sleep(Long.MAX_VALUE);3.5 前端 web 展现
12、工程改造步骤改造 moli-manager-web 工程。第 1 步:删除 mybatis 、和 spring 的配置文件。只保留 springmvc.xml第 2 步:将 moli-manager-web 工程从 moli-manager 工程中移出到 moli-parent 下第 3步:在 moli-manager-web 工程的 pom文件中添加 dubbo 的依赖,删除 moli-manager-service 的依赖1、添加 dubbo 的依赖<!- dubbo 相关 -><dependency ><groupId >com.alibaba <
13、;/ groupId ><artifactId >dubbo </ artifactId ></ dependency ><dependency ></ groupId > <artifactId >zookeeper </ artifactId ></ dependency ><dependency ></ groupId ><artifactId >zkclient </ artifactId></ dependency >第 4
14、 步:在 moli-manager-web 工程中引用 dubbo 配置。1、在 springmvc.xml 中添加 dubbo 的 schema。<?xml version = "1.0" encoding ="UTF-8" ?><beans xmlns =""xmlns:xsi = "" xmlns:p = "" xmlns:context =""xmlns:dubbo ="" xmlns:mvc ="" xsi:
15、schemaLocation =" "<!- <context:property-placeholder location="classpath:resource/perties" /> -> /> <mvc:annotation-driven /><bean> <propertyname="prefix"value ="/WEB-INF/jsp/"/><propertyname="suffix"va
16、lue =".jsp" /></ bean ><!- 配置 dubbo服务 -><dubbo:applicationname ="moli-manager-web" /><dubbo:registryaddress ="multicast:/:1234" /><!- <dubbo:registry protocol="zookeeper"address="54:2181,54
17、:2182,54:2183"/> -><dubbo:referenceinterface ="com.moli.manager.service.ItemService"id ="itemServiceImpl"/></ beans >第五步:所以的逆向工程生成的 pojo 需要实现序列化接口。3.6 dubbo 注册中心3.6.1 Zookeeper 介绍 官方推荐使用 zookeeper 注册中心。 注册中心负责服务地址的注册与查找, 相当于目录服务, 服务提供者和消费者只在启动时与
18、 注册中心交互,注册中心不转发请求,压力较小。使用 以上版本,建议使用 zookeeper 注册中心。Zookeeper 是 Apacahe Hadoop 的子项目, 是一个树型的目录服务, 支持变更推送, 适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境,并推荐使用Zookeeper:1、可以作为集群的管理工具使用。2、可以集中管理配置文件。3.6.2 Zookeeper 的安装安装环境:Linux : cengos6.4Jdk:1.7 以上版本Zookeeper 是 java 开发的可以运行在 windows 、linux 环境。需要先安装 jdk 。 安装步骤: 第一步
19、:安装 jdk第二步:把 zookeeper 的压缩包上传到 linux 系统。 第三步:解压缩压缩包第四步:进入 目录,创建 data 文件夹。 第五步:把 zoo_sample.cfg 改名为 zoo.cfg rootlocalhost conf# mv zoo_sample.cfg zoo.cfg 第六步:修改 data 属性: 第七步:启动 zookeeperrootlocalhost bin# ./zkServer.sh start 关闭: rootlocalhost bin# ./zkServer.sh stop 查看状态: rootlocalhost bin# ./zkServe
20、r.sh status注意:需要关闭防火墙。注册中心的用法服务发布时需要连接注解中心。引用服务时需要连接注册中心:Dubbo 的 Monitor配置 monitor 的方法:第一步:把 dubbo-admin.war 上传到 linux 服务器 第二步:安装 tomcat ,把 war 包部署到 tomcat 中。第三步:修改 /dubbo-admin/WEB-INF/perties 属性文件。 为注册中的实际地址。第四步:启动 tomcat ,访问 用户名: root密码: root4 后台管理系统:商品列表查询功能4.0 项目开发流程1、前期调研立项,组件团队2、项目工程
21、整体架构设计3、项目工程骨架搭建4、需求沟通,功能分析5、页面原型设计,美工 UI 设计6、页面代码开发( HTML CSS JS )7、后台功能代码开发添加静态页面:添加到 moli-manager-web 工程中。 src/main/webapp/WEB-INF/.4.1 访问后台首页 通过访问 controller 跳转到首页。 请求的 url: ”/ ”由于 springmvc.xml 配置拦截请求的 url 是“ / ”,所以 css、 js 同样被拦截。 需要配置一个资源映射<!- 配置资源映射 -><mvc:resourceslocation ="/c
22、ss/"mapping = "/css/*" /><mvc:resourceslocation ="/js/"mapping ="/js/*" />pageController :Controllerpublic class PageController RequestMapping ( "/" )private String showIndex() return "index" ;RequestMapping ( "/page" )public
23、String showPage( PathVariable String page ) return page ;4.2 商品列表实现需求分析请求的 url: /item/list 请求的参数: page、 rows响应一个 json 数据,数据格式。Easyui 中 datagrid 控件要求的数据格式为: total:"2",rows:"id":"1","name":" 张三 ","id":"2","name":" 李四
24、"需要对应此数据结构创建一个 pojo 类 此类包含两个属性:1、 total2、 rows( 每页的数据 ) List 中的每个元素是 TbItem 对象。 应该把此 pojo 放到 moli-common 中。public class EasyUIDataGridResult implements Serializableprivatelongtotal ;privateList<?> rows ;publiclonggetTotal()returntotal ;publicvoidsetTotal( long total ) this . total = total
25、 ;public List<?> getRows() return rows ;public void setRows(List<?>rows ) this . rows = rows ;分页处理:可以使用 mybatis 的分页插件 PageHelper。4.2.2 PageHelper分页插件的原理SqlMapConfig.xml,Mapper.xml1、实现 Interceptor 接口2、把 实 现 类 配 置 到SqlMapConfig.xml 中3、从拦截器中取出要执行的 sqlSqlSessionFactory 工 厂 对 象 , 生 成 SqlSessi
26、onSqlSession。提供很多用户方法。Executor 对象,执行 sql 语句Sql 语句封装成 MappedStatement 使用方法数据库:把分页插件的 jar 包添加到工程中(哪个工程?)第一步第二步:在 SqlMapConfig.xml 中配置插件(什么位置?) 。<?xml version ="1.0" encoding ="UTF-8" ?><! DOCTYPEconfigurationPUBLIC "-//DTD Config 3.0/EN" "h
27、ttp://dtd/mybatis-3-config.dtd" ><configuration ><plugins >><!- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL 六种数据库 -><property name="dialect" value ="mysql" /></ plugin ></ plugins ></ configuration >第三步:在执行
28、查询之前设置分页。PageHelper.startPage(1, 10); 两个参数:第一个: page 第二个是 rows 第四步:从返回结果中得到分页信息 创建一个 PageInfo 对象,需要返回的结果集作为参数。 就可以从 PageInfo 对象取分页信息。/PageInfo 包含了非常全面的分页属性assertEquals(10, page . getPageSize();assertEquals(1, page . getStartRow();assertEquals(10, page . getEndRow();assertEquals(183, page . getTotal(
29、);assertEquals(19, page . getPages();assertEquals(1, page . getFirstPage();assertEquals(8, page . getLastPage();assertEquals(true , page . isFirstPage();assertEquals(false , page . isLastPage();assertEquals(false , page . isHasPreviousPage();assertEquals(true , page . isHasNextPage();测试分页插件public cl
30、assPageHelperTest Testpublicvoid testPageHelper()throws Exception /初始化 spring 容器ApplicationContextapplicationContextnewClassPathXmlApplicationContext("classpath:spring/applicationContext-*.xml");/ 从容器中获得 mapper 的代理对象TbItemMapper itemMapper = applicationContext.getBean(TbItemMapper. class )
31、;/ 分页设置PageHelper. startPage (1, 30);/ 执行查询TbItemExample example = new TbItemExample();List<TbItem> listitemMapper .selectByExample( example );/ 取分页信息PageInfo<TbItem>pageInfonew PageInfo<>( list );System. out .println(" 总记录数: " + pageInfo .getTotal();System. out .println(" 总页数: " + pageInfo .getPages();System. out .println(list .size();4.2.3 Dao 层可以使用逆向工程生成的代码4.2.4 Service 层业务逻辑:接收 page、 rows 两个参数,设置分页信息,执行查询得到查询结果。从查询结
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 手持式、移动式电动工具安全管理标准培训
- 氧化铝厂消防安全责任制度培训
- 作业长(副作业长)安全生产职责培训
- 2026安检仪容仪表面试题及答案
- 2026阿联酋工作面试题及答案
- 特种设备岗位安全责任制培训课件
- 手术麻醉科患者安全质控员职责培训
- 叉车工安全技术操作规定培训
- 汽车测评与选购(项目四任务一)
- 上海呼叫中心外包合同
- ECMO考试试题及答案
- 活动二 节电小贴士教学设计-2023-2024学年小学综合实践活动四年级下册沪科黔科版
- 大学生入党培训考试题及答案
- GJB9885-2020 雷达吸波材料表面波衰减率测试方法
- 二零二五年翡翠原石拍卖会委托代理合同
- 严重腹部创伤院内救治专家共识(2024)解读
- 动物病理考试题库及答案
- 浙江省宁波市慈溪市2024-2025学年三年级下学期期末数学试卷(含答案)
- 2025年河南省初中学业水平考试中考(会考)地理试卷(真题+答案)
- 农膜回收使用管理办法
- 公安宣传写作课件
评论
0/150
提交评论