淘淘商城第六天笔记.docx
- 文档编号:24909610
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:21
- 大小:910.53KB
淘淘商城第六天笔记.docx
《淘淘商城第六天笔记.docx》由会员分享,可在线阅读,更多相关《淘淘商城第六天笔记.docx(21页珍藏版)》请在冰豆网上搜索。
淘淘商城第六天笔记
淘淘商城第六天
1内容复习
1、前台系统的搭建
a)服务层
b)表现层
2、首页的展示
3、商品类目展示
a)使用ajax跨域调用服务。
b)使用jsonp实现
2课程计划
1、首页的内容展示:
轮播图展示。
2、Cms系统的实现。
3、Taotao-rest发布服务。
4、表现层调用服务,展示轮播图。
3首页轮播图展示
3.1首页内容管理思路
首页展示的内容都应该可以通过后台来管理。
1、内容的分组
2、分组下还可以有小组
3、广告项目中有图片
4、标题
5、价格
6、链接
7、内容
第一块:
内容的分组管理,应该是一个树形结构。
第二块:
内容管理。
图片、链接、标题、价格、内容。
使用两个表来保存内容数据:
1、内容分类表:
2、内容表:
Cms系统:
内容管理系统。
4内容分类管理
4.1展示分类列表
4.1.1分析
初始化easyUI的tree控件url:
/content/category/list
请求的参数:
id,父节点id
返回结果:
json数据(EasyUITreeNode列表)
是一个列表,列表中每个元素包含三个属性:
1、Id
2、Text
3、state
4.1.2Dao层
从tb_content_category表中取数据,根据parentid查询分类列表。
可以使用逆向工程生成的代码。
4.1.3Service层
接收一个parentId,根据parentID查询节点列表。
创建一个EasyUITreeNode列表。
返回。
参数:
LongparentId
返回值:
List
@Service
publicclassContentCatgoryServiceImplimplementsContentCatgoryService{
@Autowired
privateTbContentCategoryMappercontentCategoryMapper;
@Override
publicList
//根据parentId查询子节点列表
TbContentCategoryExampleexample=newTbContentCategoryExample();
Criteriacriteria=example.createCriteria();
criteria.andParentIdEqualTo(parentId);
//执行查询
List
//转换成EasyUITreeNode列表
List
for(TbContentCategorytbContentCategory:
list){
//创建一EasyUITreeNode节点
EasyUITreeNodenode=newEasyUITreeNode();
node.setId(tbContentCategory.getId());
node.setText(tbContentCategory.getName());
node.setState(tbContentCategory.getIsParent()?
"closed":
"open");
//添加到列表
resultList.add(node);
}
returnresultList;
}
}
4.1.4Controller层
接收parentId调用Service查询节点列表,返回节点列表。
返回json数据,需要使用@ResponseBody
@Controller
@RequestMapping("/content/category")
publicclassContentCategoryController{
@Autowired
privateContentCatgoryServicecontentCatgoryService;
@RequestMapping("/list")
@ResponseBody
publicList
List
returnlist;
}
}
4.2新增节点
4.2.1分析
光标离开事件:
请求的url:
/content/category/create
请求的参数:
parentId、name
返回结果:
返回TaotaoResult,包含新添加记录的id。
4.2.2Dao层
插入数据可以使用逆向工程。
4.2.3Service层
1、接收两个参数:
parentId、name
2、创建一个对应tb_content_category表的pojo对象。
3、补全pojo对象的属性。
4、插入数据
5、需要mybatis返回主键。
6、使用TaotaoResult包装id,返回。
@Override
publicTaotaoResultinsertCatgory(LongparentId,Stringname){
//创建一个pojo对象
TbContentCategorycontentCategory=newTbContentCategory();
contentCategory.setName(name);
contentCategory.setParentId(parentId);
//1(正常),2(删除)
contentCategory.setStatus
(1);
contentCategory.setIsParent(false);
//'排列序号,表示同级类目的展现次序,如数值相等则按名称次序排列。
取值范围:
大于零的整数'
contentCategory.setSortOrder
(1);
contentCategory.setCreated(newDate());
contentCategory.setUpdated(newDate());
//插入数据
contentCategoryMapper.insert(contentCategory);
//取返回的主键
Longid=contentCategory.getId();
//判断父节点的isparent属性
//查询父节点
TbContentCategoryparentNode=contentCategoryMapper.selectByPrimaryKey(parentId);
if(!
parentNode.getIsParent()){
parentNode.setIsParent(true);
//更新父节点
contentCategoryMapper.updateByPrimaryKey(parentNode);
}
//返回主键
returnTaotaoResult.ok(id);
}
4.2.4Controller
接收两个参数,parentId、name。
调用Service插入数据,返回TaotaoResult。
返回json格式的数据。
@RequestMapping("/create")
@ResponseBody
publicTaotaoResultcreateNode(LongparentId,Stringname){
TaotaoResultresult=contentCatgoryService.insertCatgory(parentId,name);
returnresult;
}
4.3重命名节点、删除节点
作业!
!
!
5内容管理
5.1内容列表
作业!
!
!
5.2新增内容
5.2.1分析
请求url:
/content-add
初始化页面:
表单提交处理:
请求的url:
/content/save
提交的内容:
表单中的内容。
使用TbContent接收
返回值:
TaotaoResult
5.2.2Dao层
tb_content可以使用逆向工程。
5.2.3Service层
接收一个pojo对象,补全属性。
插入数据。
返回TaotaoResult。
参数:
TbContent
返回值:
TaotaoResult
@Service
publicclassContentServiceImplimplementsContentService{
@Autowired
privateTbContentMappercontentMapper;
@Override
publicTaotaoResultinsertContent(TbContentcontent){
content.setCreated(newDate());
content.setUpdated(newDate());
//插入数据
contentMapper.insert(content);
returnTaotaoResult.ok();
}
}
5.2.4Controller
接收表单中的内容,使用TbContent接收。
调用Service插入数据。
返回TaotaoResult(json数据)
@Controller
@RequestMapping("/content")
publicclassContentController{
@Autowired
privateContentServicecontentService;
@RequestMapping("/save")
@ResponseBody
publicTaotaoResultinsertContent(TbContentcontent){
TaotaoResultresult=contentService.insertContent(content);
returnresult;
}
}
6轮播图的展示
6.1分析
可以使用jsonp获得数据。
做网站不推荐大面积使用ajax。
不使用ajax如何获得数据?
只需要在portal的Service层调用taotao-rest的服务,获得数据,把数据传递给jsp即可。
要调用服务需要使用java代码模拟浏览器调用服务请求数据。
可以使用HttpClient。
6.2HttpClient
6.2.1使用步骤
第一步:
把HttpClient使用的jar包添加到工程中。
第二步:
创建一个HttpClient的测试类
第三步:
创建测试方法。
第四步:
创建一个HttpClient对象
第五步:
创建一个HttpGet对象,需要制定一个请求的url
第六步:
执行请求。
第七步:
接收返回结果。
HttpEntity对象。
第八步:
取响应的内容。
第九步:
关闭HttpGet、HttpClient。
6.2.2Get请求
@Test
publicvoidtestHttpGet()throwsException{
//第一步:
把HttpClient使用的jar包添加到工程中。
//第二步:
创建一个HttpClient的测试类
//第三步:
创建测试方法。
//第四步:
创建一个HttpClient对象
CloseableHttpClienthttpClient=HttpClients.createDefault();
//第五步:
创建一个HttpGet对象,需要制定一个请求的url
HttpGetget=newHttpGet("");
//第六步:
执行请求。
CloseableHttpResponseresponse=httpClient.execute(get);
//第七步:
接收返回结果。
HttpEntity对象。
HttpEntityentity=response.getEntity();
//第八步:
取响应的内容。
Stringhtml=EntityUtils.toString(entity);
System.out.println(html);
//第九步:
关闭response、HttpClient。
response.close();
httpClient.close();
}
6.2.3Post请求
实现步骤:
第一步:
创建一个httpClient对象
第二步:
创建一个HttpPost对象。
需要指定一个url
第三步:
创建一个list模拟表单,list中每个元素是一个NameValuePair对象
第四步:
需要把表单包装到Entity对象中。
StringEntity
第五步:
执行请求。
第六步:
接收返回结果
第七步:
关闭流。
@Test
publicvoidtestHttpPost()throwsException{
//第一步:
创建一个httpClient对象
CloseableHttpClienthttpClient=HttpClients.createDefault();
//第二步:
创建一个HttpPost对象。
需要指定一个url
HttpPostpost=newHttpPost("http:
//localhost:
8082/posttest.html");
//第三步:
创建一个list模拟表单,list中每个元素是一个NameValuePair对象
List
formList.add(newBasicNameValuePair("name","张三"));
formList.add(newBasicNameValuePair("pass","1243"));
//第四步:
需要把表单包装到Entity对象中。
StringEntity
StringEntityentity=newUrlEncodedFormEntity(formList,"utf-8");
post.setEntity(entity);
//第五步:
执行请求。
CloseableHttpResponseresponse=httpClient.execute(post);
//第六步:
接收返回结果
HttpEntityhttpEntity=response.getEntity();
Stringresult=EntityUtils.toString(httpEntity);
System.out.println(result);
//第七步:
关闭流。
response.close();
httpClient.close();
}
提交表单和提交json数据,content-Type不同
表单的content-type:
application/x-www-form-urlencoded
Json的content-type:
application/json
实际使用时需要把HttpClient封装成一个工具类。
可以把工具类放到taotao-common中。
1、taotao-rest中发布服务
2、Taotao-portal中使用HttpClient调用服务获得数据
3、展示轮播图
6.3发布内容查询服务
6.3.1分析
根据内容分类id查询tb_content表,得到此分类下的内容列表,返回。
请求的url:
/rest/content/{cid}
返回的数据:
json数据
1、包含查询内容列表
2、包含状态
3、包含错误消息
使用TaotaoResult包装一个内容列表即可。
6.3.2Dao层
可以使用逆向工程。
6.3.3Service层
接收内容分类id作为参数,使用mapper根据分类id查询内容列表,返回内容列表。
参数:
Longcid
返回结果:
List
@Service
publicclassContentServiceImplimplementsContentService{
@Autowired
privateTbContentMappercontentMapper;
@Override
publicList
//根据cid查询内容列表
TbContentExampleexample=newTbContentExample();
Criteriacriteria=example.createCriteria();
criteria.andCategoryIdEqualTo(cid);
//执行查询
List
returnlist;
}
}
6.3.4Controller
接收参数cid,从url中取参数。
调用Service查询内容列表,返回json数据,返回TaotaoResult包装内容列表。
@Controller
publicclassContentController{
@Autowired
privateContentServicecontentService;
@RequestMapping("/content/{cid}")
@ResponseBody
publicTaotaoResultgetContentList(@PathVariableLongcid){
try{
List
returnTaotaoResult.ok(list);
}catch(Exceptione){
e.printStackTrace();
returnTaotaoResult.build(500,ExceptionUtil.getStackTrace(e));
}
}
}
6.4展示轮播图
6.4.1分析
需要在taotao-portal中实现。
需要使用HttpClient调用rest发布的服务。
把结果传递给jsp。
Jsp中需要的json数据格式:
需要创建一个pojo描述此格式。
publicclassAdNode{
privateintheight;
privateintwidth;
privateStringsrc;
privateintheightB;
privateintwidthB;
privateStringsrcB;
privateStringalt;
privateStringhref;
//Getset。
。
。
。
}
6.4.2Service
使用HttpClient调用taotao-rest发布的服务。
得到一个json字符串。
把json转换成java对象,取data属性,把list转换成AdNode的list。
最后需要把AdNode的list转换成json返回。
参数:
cid(从配置文件中获得)
返回结果:
String
@Service
publicclassContentServiceImplimplementsContentService{
@Value("${REST_BASE_URL}")
privateStringREST_BASE_URL;
@Value("${REST_CONTENT_URL}")
privateStringREST_CONTENT_URL;
@Value("${REST_CONTENT_AD1_CID}")
privateStringREST_CONTENT_AD1_CID;
/**
*获得大广告位的内容
*
Title:
getAd1List
*
Description:
*@return
*@seecom.taotao.portal.service.ContentService#getAd1List()
*/
@Override
publicStringgetAd1List(){
//调用服务获得数据
Stringjson=HttpClientUtil.doGet(REST_BASE_URL+REST_CONTENT_URL+REST_CONTENT_AD1_CID);
//把json转换成java对象
TaotaoResulttaotaoResult=TaotaoResult.formatToList(json,TbContent.class);
//取data属性,内容列表
List
//把内容列表转换成AdNode列表
List
for(TbContenttbContent:
contentList){
AdNodenode=newAdNode();
node.setHeight(240);
node.setWidth(670);
node.setSrc(tbContent.getPic());
node.setHeightB(240);
node.setWidthB(550);
node.setSrcB(tbContent.getP
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 淘淘 商城 第六 笔记