概述
本博文将分析CMS内容管理系统的功能实现,同时借助广告位的展示来介绍解决ajax跨域请求问题的方案二:httpClient。
一、CMS内容管理系统
在后台管理内容及内容分类的系统就叫做cms系统。
1.表设计管理
思路:
1、 分析每个模块的共性:
a)链接 b) 图片 c) 标题 d) 子标题 e) 有链接的提示
2、 使用两张表来管理
a) 内容分类表,管理内容的大分类
b) 内容表,存储每个分类下的明细信息内容。
内容分类表:
内容表:
需要把内容进行分类,分类应该是一个树形结构。
2.内容分类管理
2.1初始化列表
2.1.1需求分析
初始化树形视图的url:/content/category/list
参数是id,当前节点id属性,应该根据此id查询子节点列表。
返回值:包含id、text、state三个属性的json数据列表
2.1.2Service层
功能:接收parentid。根据parentid查询节点列表,返回返回一个EasyUI异步Tree要求的节点列表。每个节点包含三个属性id、text、state三个属性。可以使用EUTreeNode。
参数:id 返回值:List< EUTreeNode >
1 |
|
2.1.3Controller层
1 |
|
2.2新增节点
2.2.1Dao层
需要返回主键信息:需要修改mapper文件,返回主键信息。
2.2.2Service层
接收两个参数parentId父节点id、name:当前节点的名称。向tb_content_category表中添加一条记录。返回TaoTaoResult包含记录的pojo对象。还需要判断添加的结点的父节点之前是否是父节点,如果不是,则需要改is_parent.
1 |
|
2.2.3Controller层
1 |
|
2.3删除节点
接收parentid、id两个参数。删除id对应的记录。需要判断parentid对应的记录下是否有子节点。如果没有子节点。需要把parentid对应的记录的isparent改成false。
注意:删除直接是物理删除。
service层:
1 |
|
2.4重命名结点
根据id更新记录的name列即可。不做过多介绍。
3.内容管理
3.1显示内容
用到之前分页pageHelper的知识
Service层:
1 |
|
Controller层:
1 |
|
3.2内容添加
这里图片上传的代码之前实现过,这里引用的是同一个
Service层:
1 |
|
Controller层:
1 |
|
二、商城首页大广告
1.首页大广告方案
前端系统获取后端系统提供的接口,如何获取?
1.1方案1——jsonp
上篇博文《企业WEB项目前台工程搭建,ajax跨域的解决》已经介绍过jsonp,这里只做分析
需要当首页加载完毕后,大广告位就应该显示。没有触发事件。不是太合适。
优点:不需要二次请求,页面直接加载内容数据。减少门户系统的压力。
缺点:需要延迟加载。不利于seo优化。
这里不利于seo优化的原因:jsonp跨域请求一般是要通过鼠标触发事件,而刚开始加载的时候是静态的,非动态会被搜索引擎认为是一成不变的死网页,不符合搜索引擎喜好,自然排名就降低了
1.2方案2——httpclient
优点:有利于seo优化。可以在taotao-portal中对数据进行加工。
缺点:系统直接需要调用服务查询内容信息。多了一次http请求。
系统直接服务的调用,需要使用httpclient来实现。Taotao-portal和taotao-rest是在同一个局域网内部。速度非常快,调用时间可以忽略不计。 展示首页内容功能,使用方案二实现。
2.展示流程
3.Httpclient的使用
3.1概念
HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。
下载地址:http://hc.apache.org/
3.2功能介绍
以下列出的是 HttpClient 提供的主要的功能,要知道更多详细的功能可以参见 HttpClient 的主页。
(1)实现了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)
(2)支持自动转向
(3)支持 HTTPS 协议
(4)支持代理服务器等
3.3添加依赖
需要把httpclient的jar包添加到工程中。只需要在工程中添加httpclient的依赖。
3.4使用方法
1 | public class HttpClientTest { |
3.5Httpclient封装成工具类
1 | public class HttpClientUtil { |
4.服务层发布服务
根据内容的分类id查询内容列表,从tb_content表中查询。服务是一个restFul形式的服务。使用http协议传递json格式的数据。
4.1Service层
1 |
|
4.2Controller层
发布服务。接收查询参数。Restful风格内容分类id应该从url中取:/rest/content/list/{contentCategoryId}
从url中取内容分类id,调用Service查询内容列表。返回内容列表。返回一个json格式的数据。可以使用TaotaoResult包装此列表。
1 |
|
5.实现大广告位展示
5.1需求分析
Json字符串如何传递给jsp:使用modelAndView对象把json字符串传递给jsp。
如何获得json字符串:获得一个广告位对应的内容列表,需要调用taotao-rest的服务。把列表转换成json数据格式要求的pojo对象列表。
需要使用httpclient调用taotao-rest的服务。
5.2resource.properties
把服务层属性定义到properties方便修改
1 | #服务层属性定义 |
5.3Service层
根据内容分类id查询分类的内容列表,需要使用httpclient调用taotao-rest的服务。得到一个json字符串。需要把字符串转换成java对象taotaoResult对象。从taotaoResult对象中取data属性,得到内容列表。把内容列表转换成jsp页面要求的json格式。返回一个json字符串。
1 | /** |
5.4Controller层
1 |
|
成品展示:
结语
仿生人会梦见电子羊吗?
那么人会梦见真的羊吗?
电子羊出自科幻大师菲利普•迪克的《仿生人会梦见电子羊吗》,在书中可知,移情能力是人类独有的能力,我们可以通过移情测试来区分人类和仿生人。可当人在光怪陆离的世界中麻木了自己的情感,仿生人在学习演算中衍生出感情,那么人和仿生人的界限又在哪里?
——摘自B站热评
电子羊是真的好听又上头呀🤸♂️