Java之SSH项目:网络商城-项目+源代码 day02(服务中间件Dubbo连接方式,MyBatis,Mapper,分页插件,svn版本管理)
发布日期:2021-06-29 15:04:04 浏览次数:3 分类:技术文章

本文共 11742 字,大约阅读时间需要 39 分钟。

一、项目计划

1.Dubbo连接方式

a)Monitor(了解)

2.MyBatis回顾

3.通用Mapper

4.分页插件

5.集成通用Mapper和分页插件

6.svn版本管理

远程服务:
在本地服务的基础上,只需做简单配置,即可完成远程化:

将上面的local.xml配置拆分成两份,将服务定义部分放在服务提供方remote-provider.xml,将服务引用部分放在服务消费方remote-consumer.xml。

并在提供方增加暴露服务配置<dubbo:service>,在消费方增加引用服务配置<dubbo:reference>。
服务层发布服务:

表现层调用服务:

二、数据库的搭建

1、新建数据库

在这里插入图片描述
在这里插入图片描述
2、在工具当中运行sql文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
SQL文件

三、Dubbo

1、什么是Dubbo

(1)Dubbo的概念

Dubbo(读音[ˈdʌbəʊ])是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 [1] Spring框架无缝集成。

Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

(2)Dubbo的连接

使用Dubbo进行远程调用实现服务交互,它支持多种协议,如Hessian、HTTP、RMI、Memcached、Redis等等。

由于Dubbo将这些协议的实现进行了封装了,无论是服务端(开发服务)还是客户端(调用服务),都不需要关心协议的细节,只需要在配置中指定使用的协议即可,从而保证了服务提供方与服务消费方之间的透明。

Dubbo的客户端和服务端有三种连接方式,分别是:广播,直连和使用zookeeper注册中心。

(3)Dubbo的架构

在这里插入图片描述
2、Dubbo注册中心
Dubbo注册中心和广播配置类似,不过需要指定注册中心类型和注册中心地址,这个时候就不是把服务信息进行广播了,而是告诉给注册中心进行管理,这个时候我们就需要有一个注册中心。

官方推荐使用zookeeper作为注册中心。

(1)Zookeeper介绍
下图是zookeeper在dubbo所处的位置:
在这里插入图片描述
注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者在启动时与注册中心交互,消费者不断的发起请求获取服务信息,注册中心不转发请求,压力较小。使用dubbo-2.3.3以上版本,建议使用zookeeper注册中心。
Zookeeper是Apacahe Hadoop的子项目,是一个树型的目录服务,支持变更推送,适合作为Dubbo服务的注册中心,工业强度较高,可用于生产环境,并推荐使用

Zookeeper:

1、可以作为集群的管理工具使用,和注册中心。
2、可以集中管理配置文件。
(2)Zookeeper安装到linux当中
a、下载Zookeeper
b、在Linux当中安装Zookeeper
Zookeeper是java开发的,可以运行在windows、linux环境。
需要先安装jdk(课前资料的虚拟机,已经安装好JDK)
c.移动到/usr/local

[root@itcast-01 ~]# mv zookeeper-3.4.6.tar.gz  /usr/local/

d.解压

[root@itcast-01 local]# tar -zxvf zookeeper-3.4.6.tar.gz

e.进入解压目录,创建data

[root@itcast-01 local]# cd zookeeper-3.4.6[root@itcast-01 zookeeper-3.4.6]# mkdir data

f.进入conf目录,把zoo_sample.cfg复制一份叫zoo.cfg

[root@itcast-01 zookeeper-3.4.6]# cd conf/[root@itcast-01 conf]# cp zoo_sample.cfg zoo.cfg

g.修改修改zoo.cfg

[root@itcast-01 conf]# vim zoo.cfg

修改属性:

dataDir=/usr/local/zookeeper-3.4.6/data(新建的data目录所在的位置)

h.进入bin目录启动zookeeper

[root@itcast-01 bin]# pwd/usr/local/zookeeper-3.4.6/bin[root@itcast-01 bin]# ./zkServer.sh start
查看状态:[root@localhost bin]# ./zkServer.sh status注意:zookeeper使用2181端口号,为了能正常使用zookeeper,我们需要打开2181端口号,或者关闭防火墙关闭防火墙:[root@itcast-01 bin]# service iptables stop
/usr/local/apache-zookeeper-3.7.0/data

四、dao整合

1、添加dobbo的依赖

a、service层:加入dobbo相关的jar包。服务层、表现层都添加。
在这里插入图片描述

com.alibaba
dubbo
org.springframework
spring
org.jboss.netty
netty
org.apache.zookeeper
zookeeper
com.github.sgroschupf
zkclient

上面当中默认依赖旧版本的spring需要排除旧版的spring的jar

在这里插入图片描述
b、web层:加入dobbo相关的jar包
在这里插入图片描述
2、整合思路
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3、创建整合的xml文件
service当中
a、创建目录
在这里插入图片描述
b、mybatis当中创建SqlMapConfig.xml
在这里插入图片描述

c、applicationContext-dao.xml

在这里插入图片描述

d、dao当中定义包

在这里插入图片描述
e、dao当中定义资源文件bd.properties
在这里插入图片描述

jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/taotao?characterEncoding=utf-8jdbc.username=rootjdbc.password=root

五、service整合

1、创建配置文件

a、applicationContext-service.xml
在这里插入图片描述

创建包结构taotao-manager-interface当中创建com.taotao.service

在这里插入图片描述
b、applicationContext-transaction.xml
在这里插入图片描述

c、配置web.xml

在这里插入图片描述

taotao-manager-service
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
contextConfigLocation
classpath:spring/applicationContext-*.xml
org.springframework.web.context.ContextLoaderListener

六、表现层搭建

1、相关配置文件

在这里插入图片描述
springmvc.xml
在这里插入图片描述

创建对应的包结构

在这里插入图片描述
创建对应的jsp文件夹
在这里插入图片描述
在这里插入图片描述
在WEB-INF当中配置Servlet
2、dao层创建对应的接口对应的映射文件
a、创建对应的接口
在这里插入图片描述

package com.taotao.mapper;/* * 测试接口查询当前的时间 */public interface TestMapper {
public String queryNow();}

b、创建对应的接口的映射文件TestMapper.xml

在这里插入图片描述

3、interface层创建对应的接口对应的映射文件

在这里插入图片描述

package com.taotao.service;/* * 测试接口查询当前的时间 */public interface TestService {
public String queryNow();}

4、service层TestServiceImpl实现TestService接口

在这里插入图片描述

package com.taotao.service.impl;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.taotao.mapper.TestMapper;import com.taotao.service.TestService;@Servicepublic class TestServiceImpl implements TestService {
@Autowired private TestMapper mapper; @Override public String queryNow() {
// 1.注入mapper // 2、调用mapper方法返回 return mapper.queryNow(); }}

七、发布服务

1、配置dubbo

在这里插入图片描述

2、applicationContext-service.xml

在这里插入图片描述

3、创建控制层相关内容

a、springmvc.xml

b、创建TestController

在这里插入图片描述
在这里插入图片描述
启动服务的消费者
在这里插入图片描述
访问项目

http://localhost:8081/test/queryNow

在这里插入图片描述
运行报错
在这里插入图片描述
没有找到对应的类
在这里插入图片描述
在taotao-manager-dao\pom.xml当中配置一个插件
在这里插入图片描述

src/main/java
**/*.properties
**/*.xml
false

改好后需要选择taotao-manager-dao工程执行

run as maven install

在这里插入图片描述

八、商品列表查询

(一)显示后台页面

1、引入逆向工程

逆向工程下载地址和页面下载:
链接: 提取码: 3y73
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2、运行逆向工程
在这里插入图片描述
生成对应的文件
在这里插入图片描述
在这里插入图片描述
3、将生成的内容拷贝到当前自己的工程当中
在这里插入图片描述
在这里插入图片描述
4、引入页面
放置在WEB-INF当中
页面代码下载地址:
链接: 提取码: 18u4
在这里插入图片描述
5、资源映射的配置
由于在web.xml中定义的url拦截形式为“/”表示拦截所有的url请求,包括静态资源例如css、js等。
所以需要在springmvc.xml中添加资源映射标签:
在这里插入图片描述

6、创建控制层PageController

在这里插入图片描述

package com.taotao.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;/* * 显示页面 */@Controllerpublic class PageController {
@RequestMapping("/") public String showIndex() {
return "index"; }}

在这里插入图片描述

删除创建web的时候自动生成的index.jsp
在这里插入图片描述

7、运行项目

在这里插入图片描述
8、访问项目
http://localhost:8081/
在这里插入图片描述

(二)显示商品列表

1、在PageController当中添加showPage方法

在这里插入图片描述

//显示商品的查询的页面	//url:item-list	@RequestMapping("/{page}")	public String showPage(@PathVariable String page) {
//@PathVariable表示从URL拦截 return page; }

2、再次运行项目

http://localhost:8081/
在这里插入图片描述
在这里插入图片描述
3、使用PageHelper实现分页功能
下载地址链接: 提取码: pbme
引入插件源代码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
将导入的工程安装到本地,形式自己的maven工程
在这里插入图片描述
dao当中引入
在这里插入图片描述
4、使用PageHelper在Mybatis的全局文件中配置SqlMapConfig.xml中配置拦截器插件:
在这里插入图片描述

5、设置分页信息

编写测试代码
在这里插入图片描述
创建对应的类
在这里插入图片描述
在这里插入图片描述

package com.taotao.test.pagehelp;import java.util.List;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.github.pagehelper.PageHelper;import com.github.pagehelper.PageInfo;import com.taotao.mapper.TbItemMapper;import com.taotao.pojo.TbItem;import com.taotao.pojo.TbItemExample;public class TestPageHelper {
@Test public void testhelper() {
//2、初始化spring容器 ApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-dao.xml"); //3、获取mapper的代理对象 TbItemMapper itemMapper = context.getBean(TbItemMapper.class); //1、设置分页信息 PageHelper.startPage(1, 3);//3行 紧跟着的第一个查询才会被分页 //4、调用mapper符方法查询数据 TbItemExample example = new TbItemExample();//设置查询条件使用 List
list = itemMapper.selectByExample(example);//select * from tb_item; List
list2 = itemMapper.selectByExample(example);//select * from tb_item; //取分页信息 PageInfo
info = new PageInfo
(list); System.out.println("第一个分页的list的集合的长度:"+list.size()); //for (TbItem tbItem : list) {
// System.out.println(tbItem.getId()+"名称 " + tbItem.getTitle()); //} System.out.println("第二个分页的list的集合的长度:"+list2.size()); //5、遍历结果集 打印 System.out.println("查询的总记录数:"+info.getTotal()); //for (TbItem tbItem : list2) {
// System.out.println(tbItem.getId()+"名称 " + tbItem.getTitle()); //} }}

运行结果

在这里插入图片描述

(三)Service

1、参数:int page ,int rows,业务逻辑:查询所有商品列表,要进行分页处理。返回值:EasyUIDataGridResult

在这里插入图片描述
在这里插入图片描述

package com.taotao.common.pojo;import java.io.Serializable;import java.util.List;/* * datagrid展示数据的POJO,包括商品的POJO */public class EasyUIDataGridResult implements Serializable {
private Integer total; private List rows; public EasyUIDataGridResult() {
} public EasyUIDataGridResult(Integer total, List rows) {
super(); this.total = total; this.rows = rows; } public Integer getTotal() {
return total; } public void setTotal(Integer total) {
this.total = total; } public List getRows() {
return rows; } public void setRows(List rows) {
this.rows = rows; } @Override public String toString() {
return "EasyUIDataGridResult [total=" + total + ", rows=" + rows + "]"; }}

修改TbItem类实现序列化接口

在这里插入图片描述
在这里插入图片描述
2、service开发定义接口
a、创建接口ItemService接口
在这里插入图片描述

package com.taotao.service.impl;import com.taotao.common.pojo.EasyUIDataGridResult;/* * 商品相关的处理的Service */public interface ItemService {
/* * 根据当前的页码和每页的行数进行分页查询 */ public EasyUIDataGridResult getItemList(Integer page,Integer rows);}

b、创建实现类ItemServiceImpl

在这里插入图片描述

package com.taotao.service.impl;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.github.pagehelper.PageHelper;import com.github.pagehelper.PageInfo;import com.taotao.common.pojo.EasyUIDataGridResult;import com.taotao.mapper.TbItemMapper;import com.taotao.pojo.TbItem;import com.taotao.pojo.TbItemExample;import com.taotao.service.ItemService;@Servicepublic class ItemServiceImpl implements ItemService {
@Autowired private TbItemMapper mapper; @Override public EasyUIDataGridResult getItemList(Integer page, Integer rows) {
//1、设置分页的信息 使用pagehelper if(page == null) {
page = 1; } if(rows == null) {
rows = 30; } PageHelper.startPage(page, rows); //2、注入mapper //3、创建example对象 对象不需要设置查询条件 TbItemExample example = new TbItemExample(); //4、根据mapper调用查询所有的数据的方法 //List
list = mapper.selectByExample(example);会自动根据PageHelper.startPage(page, rows);你内容进行分页查询 List
list = mapper.selectByExample(example); //5、获取分页的信息 PageInfo
info = new PageInfo
(list); //6、封装到EasyUIDataGridResult EasyUIDataGridResult result = new EasyUIDataGridResult(); result.setTotal((int)info.getTotal());//获取总记录数 //7、返回 result.setRows(info.getList());//设置其数据内容 return result; }}

3、发布服务配置applicationContext-service.xml

在这里插入图片描述

4、配置springmvc

在这里插入图片描述

5、开发控制层创建ItemController

在这里插入图片描述

package com.taotao.controller;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.ResponseBody;import com.taotao.common.pojo.EasyUIDataGridResult;import com.taotao.service.ItemService;@Controllerpublic class ItemController {
@Autowired private ItemService itemservice; //url:/item/list //method:get //返回值是:JSON //参数是page,rows @RequestMapping(value = "/item/list",method = RequestMethod.GET) @ResponseBody public EasyUIDataGridResult getItemList(Integer page,Integer rows) {
//1、引入服务 //2、注入服务 //3、直接调用服务的方法 return itemservice.getItemList(page, rows); }}

运行启动项目

需要先启动zookeeper,再启动服务层,再启动表现层。
如果先启动表现层,后启动服务层,会报错,但是不影响使用。

为了更方便的进行测试

表现层工程和服务层工程属于不同的工程,要debug的时候需要设置源码,如下:

Debug设置源代码,涉及到工程都要添加,为了方便,可以添加所有的工程。

在这里插入图片描述
http://localhost:8081/
发现报错
在这里插入图片描述
在这里插入图片描述

修改taotao-manager-web\src\main\resources\log4j.properties

在这里插入图片描述

添加连接超时时间

在这里插入图片描述
添加依赖
在这里插入图片描述

com.github.pagehelper
pagehelper
3.4.2-fix

九、监控中心

将dubbo-admin-2.5.4-jdk1.8.war安装到Tomcat当中的weapps下

在这里插入图片描述
运行项目访问项目即可,是用来监控项目运行情况的。

转载地址:https://code100.blog.csdn.net/article/details/115759448 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Linux下搭建Git服务器详细步骤 + eclipse当中Git的使用,模拟过程,用户上传和同步代码并解决冲突
下一篇:Java之SSH项目:网络商城-项目+源代码 day01(工程搭建)

发表评论

最新留言

不错!
[***.144.177.141]2024年04月27日 12时50分27秒