一.课程计划
1 | 1、前台系统搭建 |
二.商城首页显示
系统架构:
2.1工程搭建
可以参考e3-manager-web工程搭建
这里注意,看我图片上显示的那个伪静态,就是说,现在大多数网站的搜索引擎它对静态页面的支持比较好,但是我们的jsp页面还是jsp页面啊,难道要改吗?这个时候我就可以使用这种方式
2.2那如何展示首页呢?
我们前面在web.xml中对springmvc的前端控制器是不是做了处理,它只拦截以.html结尾的请求对吧?那我们思考如何写呢?
一般我们展示页面是不是通过Controller来进行的,来我们看一下Controller和Handler是什么呢?
好,搞清楚这个之后,我们该如何写呢,我们是不是一般这样写的
一般:http://localhost:8082/
但是现在我们这样写可以吗?
当然不行,因为前端控制器只会拦截以.html结尾的请求,那我们该怎么做呢???
这个时候我们就用到了web.xml
三.首页显示动态分析:
内容信息要从数据库中获得
3.1动态展示分析
1 | 1、内容需要进行分类 |
四.内容服务系统创建
4.1工程搭建
可以参考e3-manager工程搭建。
4.2 e3_content
pom文件:
1 | <?xml version="1.0" encoding="UTF-8"?> |
搭建的过程是,先把e3_manage的pom文件复制过来,再改改删删,比如common的依赖就不用删,Tomcat插件的端口号改一下就完了
4.3 e3-content-interface
pom文件:
1 | <?xml version="1.0" encoding="UTF-8"?> |
依赖了pojo
4.4 e3_content_Service
pom文件:
1 | <?xml version="1.0" encoding="UTF-8"?> |
dao的依赖不需要改动,因为我们还要用到dao中的mapper接口,而interface需要改动一下,interface依赖我们自己的interface,也就是e3_content_interface
我们来看一下Service的配置文件需要改动什么,我们得先把e3_manager_Service的配置文件拷贝过来
五.Cms系统实现
5.1内容分类管理
5.1.1展示内容分类
功能分析:
请求的url:/content/category/list
请求的参数:id,当前节点的id。第一次请求是没有参数,需要给默认值“0”
Json数据:1
2
3[{id:1,text:节点名称,state:open(closed)},
{id:2,text:节点名称2,state:open(closed)},
{id:3,text:节点名称3,state:open(closed)}]
业务逻辑:1
2
3
41、取查询参数id,parentId
2、根据parentId查询tb_content_category,查询子节点列表。
3、得到List<TbContentCategory>
4、把列表转换成List<EasyUITreeNode>
Service层
接口:1
2
3
4
5
6
7
8
9
10public interface ContentCategoryService {
/**
* 查询内容树列表
* @param parentId
* @return
*/
List<EasyUITreeNode> getContentCatList(long parentId);
}
实现类:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34/**
* @author RickYinPeng
* @ClassName ContentCategoryServiceImpl
* @Description 内容分类管理
* @date 2018/10/10/17:39
*/
@Service
public class ContentCategoryServiceImpl implements ContentCategoryService {
@Autowired
private TbContentCategoryMapper tbContentCategoryMapper;
@Override
public List<EasyUITreeNode> getContentCatList(long parentId) {
//根据parentId查询子节点列表
TbContentCategoryExample tbContentCategoryExample = new TbContentCategoryExample();
TbContentCategoryExample.Criteria criteria = tbContentCategoryExample.createCriteria();
//设置查询条件
criteria.andParentIdEqualTo(parentId);
//执行查询
List<TbContentCategory> catList= tbContentCategoryMapper.selectByExample(tbContentCategoryExample);
List<EasyUITreeNode> EasyUITreeNode_List = new ArrayList<>();
for (int i = 0;i<catList.size();i++){
EasyUITreeNode node = new EasyUITreeNode();
node.setId(catList.get(i).getId());
node.setText(catList.get(i).getName());
node.setState(catList.get(i).getIsParent()==true?"closed":"open");
EasyUITreeNode_List.add(node);
}
return EasyUITreeNode_List;
}
}
发布服务:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.2.xsd ">
<!-- 配置Service扫描(可以扫描到子包) -->
<context:component-scan base-package="yp.e3mall.content.service"/>
<!-- 使用dubbo发布服务 -->
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="e3_content" />
<dubbo:registry protocol="zookeeper"
address="192.168.25.128:2181" />
<!-- 用dubbo协议在20881端口暴露服务 -->
<!--端口会冲突,所以改为20881,之前是20880-->
<dubbo:protocol name="dubbo" port="20881" />
<!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="yp.e3mall.content.service.ContentCategoryService" ref="contentCategoryServiceImpl"
timeout="600000"/>
</beans>
不然启动就会报错,如果不这样写的话ref=”contentCategoryServiceImpl”
Web层:
E3-manager-web
依赖e3-content-interface模块
Springmvc.xml中添加服务的引用:
Controller:
1 | /** |
启动测试,我们需要先将e3_content打包到maven仓库,再启动e3_content服务,再启动e3_manager服务,再启动e3_manager_web,这里e3_content和e3_manager都属于服务层
5.1.2新增节点
功能分析
1 | 请求的url:/content/category/create |
Dao层
可以使用逆向工程。
需要添加主键返回:
注意:修改完代码后,需要向本地仓库安装e3-manager-dao包
Service层
参数:parentId、name
返回值:返回E3Result,其中包装TbContentCategory对象
接口:
1 | public interface ContentCategoryService { |
实现类:
1 | /** |
表现层
1 | 请求的url:/content/category/create |
1 | /** |
注意:我复制的时候是和类全部复制的,防止大家看不懂。
5.2内容管理
5.2.1功能点分析
1 | 1、内容列表查询(作业) |
5.2.2内容列表查询(已做)
1 | 请求的url:/content/query/list |
5.2.3新增内容
功能分析1
2
3
4
5
6
7提交表单请求的url:/content/save
参数:表单的数据。使用pojo接收TbContent
返回值:E3Result(json数据)
业务逻辑:
1、把TbContent对象属性补全。
2、向tb_content表中插入数据。
3、返回E3Result
Dao
逆向工程
Service
1 | public interface ContentService { |
1 | package yp.e3mall.content.service.impl; |
发布服务
引用服务
Controller
1 | /** |
六.商城首页轮播图动态展示
分析:
Service:
1 | package yp.e3mall.content.service; |
只看最后一个方法
1 | /** |
只看最后一个方法
依赖添加
这次我们的web层应该写在e3_portal_web中了,所以我们得在这一层依赖interface接口,再引用dubbo服务
添加e3_content_interfac依赖:
Controller层
1 | /** |
注意:写在了我们之前写的那个方法当中,我们想一想这个89我们不能写死吧!所以我们可以写在配置文件中
你想啊,我们查询出来是不是要传送到页面去
1 | @RequestMapping("/index") |