b) 内容表,存储每个分类下的明细信息内容。
初始化树形视图的url:/content/category/list
dao层:
service层:
功能:接收parentid。根据parentid查询节点列表,返回一个EasyUI异步Tree要求的节点列表。每个节点包含三个属性id,text,state三个属性。可以使用EUTreeNode。
参数:id
返回值:List<EUTreeNode>
@Service public class ContentCategoryServiceImpl implements ContentCategoryService{ @Autowired private TbContentCategoryMapper contentCategoryMapper; @Override public List<EUTreeNode> getCategoryList(long parentId) { //根据parentId查询节点列表 TbContentCategoryExample example = new TbContentCategoryExample(); Criteria criteria = example.createCriteria(); criteria.andParentIdEqualTo(parentId); List<TbContentCategory> list = contentCategoryMapper.selectByExample(example); List<EUTreeNode> treeNode = new ArrayList<>(); for (TbContentCategory tbContentCategory : list) { EUTreeNode eutNode = new EUTreeNode(); eutNode.setId(tbContentCategory.getId()); eutNode.setText(tbContentCategory.getName()); eutNode.setState(tbContentCategory.getIsParent()?"closed":"open"); treeNode.add(eutNode); } return treeNode; } Controller层: 接收页面传递过来的parentid,根据parentid查询 节点 列表。 返回List<EUTreeNode>。需要响应json数据。 @Controller @RequestMapping("/content/category") public class ContentCategoryController { @Autowired private ContentCategoryService contentCategoryService; @RequestMapping("/list") @ResponseBody public List<EUTreeNode> getContentCatList(@RequestParam(value="id", defaultValue="0") long parentId){ List<EUTreeNode> categoryList = contentCategoryService.getCategoryList(parentId); return categoryList; } } 内容分类添加 需求分析 请求的url:/content/category/create参数:
1.parentId父节点id 2.name:当前节点的名称
返回值:TaotaoResult。其中包含节点pojo对象。
Dao层:
使用逆向工程生成的代码
Service层:
功能:接收两个参数parentId父节点id,name:当前节点的名称。向tb_content_category表中添加一条记录。返回TaotaoResult包含记录的pojo对象。
@Override public TaotaoResult insertContentCategory(long parentId, String name) { //创建一个pojo TbContentCategory category = new TbContentCategory(); category.setName(name); category.setIsParent(false); category.setStatus(1); category.setParentId(parentId); category.setSortOrder(1); category.setCreated(new Date()); category.setUpdated(new Date()); //添加记录 contentCategoryMapper.insert(category); //查看父节点的isParent列是否为true,如果不是true改为true TbContentCategory parentCat = contentCategoryMapper.selectByPrimaryKey(parentId); if(!parentCat.getIsParent()){ parentCat.setIsParent(true); contentCategoryMapper.updateByPrimaryKey(parentCat); } return TaotaoResult.ok(category); } controller层:接收两个参数parentid,name。调用Service添加记录。返回TaotaoResult。应该返回json数据。
@RequestMapping("/create") @ResponseBody public TaotaoResult createContentCategory(Long parentId, String name){ TaotaoResult result = contentCategoryService.insertContentCategory(parentId, name); return result; } 内容分类删除 需求分析: 请求的url:/content/category/delete/参数:parentId ,id
返回值:TaotaoResult
业务逻辑:
接收parentid、id两个参数。删除id对应的记录。需要判断parentid对应的记录下是否有子节点。如果没有子节点。需要把parentid对应的记录的isparent改成false。
注意:删除直接是物理删除。
重命名节点请求的url:/content/category/update 参数:id、name 返回值:返回TaotaoResult。Json格式 业务逻辑:根据id更新记录的name列即可。
内容管理
内容管理表
内容添加
请求的url:/content/save
请求的方法:post
请求内容:表单中的内容。
返回的结果:TaotaoResult。
Dao层
向tb_content表中插入数据。可以使用逆向工程生成的代码。
Service层 接收表tb_content对应的pojo对象。把pojo对象插入到tb_content表中。 返回TaotaoResult。
@Service public class ContentServiceImpl implements ContentService{ @Autowired private TbContentMapper contentMapper; @Override public TaotaoResult insertContent(TbContent tbContent) { tbContent.setCreated(new Date()); tbContent.setUpdated(new Date()); contentMapper.insert(tbContent); return TaotaoResult.ok(); } controller层接收表单中的内容,使用pojo接收,要求pojo的属性要和表单中的name一致。调用service插入内容信息。返回TaotaoResult。应该是一个json格式的数据。
@Controller @RequestMapping("/content") public class ContentController { @Autowired private ContentService contentService; @RequestMapping("/save") @ResponseBody public TaotaoResult insertContent(TbContent content) { TaotaoResult result = contentService.insertContent(content); return result; } } 展示商城首页大广告位
优点:有利于seo优化。可以在taotao-portal中对数据进行加工。 缺点:系统直接需要调用服务查询内容信息。多了一次http请求。 系统直接服务的调用,需要使用httpclient来实现。taotao-protal和taotao-rest是在同一个局域网内。速度非常的快,调用时间可以忽略不计。
内容服务发布
根据内容的分类id查询内容列表,从tb_content表中查询。服务是一个restFul形式的服务。使用http协议传递json格式的数据。
从tb_content表中查询,根据内容分类id查询。是单表查询。可以使用逆向工程生成的代码。
接收内容分类id,根据分类id查询分类列表。返回一个内容pojo列表。
参数:分类id
返回值:pojo列表
@Service public class ContentServiceImpl implements ContentService{ @Autowired private TbContentMapper contentMapper; @Override public List<TbContent> getContentList(long contentCid) { TbContentExample example = new TbContentExample(); Criteria criteria = example.createCriteria(); criteria.andCategoryIdEqualTo(contentCid); List<TbContent> list = contentMapper.selectByExample(example); return list; } }Controller层
发布服务。接收查询参数。Restful风格内容分类id应该从url中取。
/rest/content/list/{contentCategoryId}
从url中取内容分类id,调用Service查询内容列表。返回内容列表。返回一个json格式的数据。可以使用TaotaoResult包装此列表。
@Controller @RequestMapping("/content") public class ContentController { @Autowired private ContentService contentService; @RequestMapping("/list/{contentCategoryId}") @ResponseBody public TaotaoResult getContentList(@PathVariable Long contentCategoryId){ try { List<TbContent> list = contentService.getContentList(contentCategoryId); return TaotaoResult.ok(list); } catch (Exception e) { e.printStackTrace(); return TaotaoResult.build(500, ExceptionUtil.getStackTrace(e)); } }什么是httpclient:
HttpClient是Apache Jakarta Common下的子项目,用来提供高效的,最新的,功能丰富的支持HTTP协议的客户端编程工具包,并且它支持http协议最新的版本和建议。
添加依赖:
添加httpclient的jar包,
执行get的方法:
@Test public void doGet() throws Exception{ //创建一个httpclient对象 CloseableHttpClient httpClient = HttpClients.createDefault(); //创建一个GET对象 HttpGet get = new HttpGet("http://www.sogou.com"); //执行请求 CloseableHttpResponse response = httpClient.execute(get); //取响应的结果 int statusCode = response.getStatusLine().getStatusCode(); System.out.println(statusCode); HttpEntity entity = response.getEntity(); String string = EntityUtils.toString(entity); System.out.println(string); //关闭httpclient response.close(); httpClient.close(); } 使用带参数的GET请求: @Test public void doGetParam() throws Exception{ CloseableHttpClient httpClient = HttpClients.createDefault(); URIBuilder uriBuild = new URIBuilder("https://www.sogou.com/web"); uriBuild.addParameter("query", "花千骨"); HttpGet get = new HttpGet(uriBuild.build()); //执行请求 CloseableHttpResponse response = httpClient.execute(get); //取响应的结果 int statusCode = response.getStatusLine().getStatusCode(); System.out.println(statusCode); HttpEntity entity = response.getEntity(); String string = EntityUtils.toString(entity); System.out.println(string); //关闭httpclient response.close(); httpClient.close(); 使用post方法: @Test public void doPost() throws Exception{ CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost post = new HttpPost("http://127.0.0.1:8082/httpclient/post.html"); //执行post请求 CloseableHttpResponse response = httpClient.execute(post); String string = EntityUtils.toString(response.getEntity()); System.out.println(string); response.close(); httpClient.close(); } 使用post方法带参数: @Test public void doPostWithParam() throws Exception{ CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost post = new HttpPost("http://127.0.0.1:8082/httpclient/post.html"); //设置请求的内容 List<NameValuePair> kvList = new ArrayList<>(); kvList.add(new BasicNameValuePair("username", "张三")); kvList.add(new BasicNameValuePair("password","223")); StringEntity entity = new UrlEncodedFormEntity(kvList); post.setEntity(entity); //执行post请求 CloseableHttpResponse response = httpClient.execute(post); String string = EntityUtils.toString(response.getEntity()); System.out.println(string); response.close(); httpClient.close(); } 大广告位展示Json字符串如何传递给jsp:使用modelAndView对象把json字符串传递给jsp。
如何获得json字符串:获得一个广告位对应的内容列表,需要调用taotao-rest的服务。把列表转换成json数据格式要求的pojo对象列表。
需要使用httpclient调用taotao-rest的服务。
Dao层:
没有Service层:
根据内容分类id查询分类的内容列表,需要使用httpclient调用taotao-rest的服务。得到一个json字符串。需要把字符串转换成对象taotaoResult对象。从taotaoResult对象中取data属性,得到内容列表。把内容列表转换成jsp页面要求的json格式。返回一个json字符串。
参数:没有
返回值:json字符串
@Service public class ContentServiceImpl implements ContentService { @Value("${REST_BASE_URL}") private String REST_BASE_URL; @Value("${REST_INDEX_AD_URL}") private String REST_INDEX_AD_URL; @Override public String getContentList() { String result = HttpClientUtil.doGet(REST_BASE_URL + REST_INDEX_AD_URL); try { TaotaoResult taotaoResult = TaotaoResult.formatToList(result,TbContent.class); List<TbContent> list = (List<TbContent>) taotaoResult.getData(); List<Map> resultList = new ArrayList<>(); for (TbContent tbContent : list) { Map map = new HashMap<>(); map.put("src", tbContent.getPic()); map.put("height", 240); map.put("width", 670); map.put("srcB", tbContent.getPic2()); map.put("widthB", 550); map.put("heightB", 240); map.put("href", tbContent.getUrl()); map.put("alt", tbContent.getSubTitle()); resultList.add(map); } return JsonUtils.objectToJson(resultList); } catch (Exception e) { e.printStackTrace(); } return null; } Controller @Controller public class IndexController { @Autowired private ContentService contentService; @RequestMapping("/index") public String showIndex(Model model){ String list = contentService.getContentList(); model.addAttribute("ad1", list); return "index"; } @RequestMapping(value="/httpclient/post",method=RequestMethod.POST) @ResponseBody public String testPost(String username,String password){ return "username:"+username + "\tpassword:" + password; } }