1. 程式人生 > >淘淘商城系列(五)—— 首頁輪播圖展示(一)

淘淘商城系列(五)—— 首頁輪播圖展示(一)

首頁輪播圖展示

taotao-portal-web工程中,動態展示內容資訊。

前端團隊:負責JS,html等開發。

後端團隊:負責後臺的開發並提供資料給前端。

1、功能分析

只需要動態生成一個json資料,輪播圖就可以動態展示:

taotao-portal-web工程下的index.jsp中:

Json資料格式:

[

    {

        "srcB": "http://image.taotao.com/images/2015/03/03/2015030304360302109345.jpg",

        "height": 240,

        "alt": "",

        "width": 670,

        "src": "http://image.taotao.com/images/2015/03/03/2015030304360302109345.jpg",

        "widthB": 550,

        "href": "http://sale.jd.com/act/e0FMkuDhJz35CNt.html?cpdad=1DLSUE",

        "heightB": 240

}

]

分析:

       portal-web  需要   自己自定義的POJO 的型別資料的列表

       content

服務層    公用的,可以被其他的系統(表現的系統)來呼叫

為了通用性:content 服務層中 獲取 tbcontent的內容列表 即:list<TbContent>

portal-web 表現層 需要拿到tbcontent 的列表,然後進行轉換成自定義的型別的資料列表即可。

從tb_content表中取資料,根據(葉子節點)內容分類id查詢列表(內容列表)。

內容分類id固定需要配置在屬性檔案中

List<TbContent>

圖片的width、height配置在屬性檔案中

Alt屬性從sub_title中取。

alt-->sub_title

Src->pic

srcB->pic2

Href->url

分析:

URL:/index 

引數:無。

返回值:首頁頁面   (資料是JSON 設定model中)

業務邏輯:

   1.根據分類的id 查詢 內容列表(List<TbContent>)

   2.釋出服務

   3.表現層引入服務

   4.呼叫服務 ,轉換成自定義的資料型別(Ad1Node) 的列表

   5.將資料列表設定到Model 中,返回給頁面。

需要建立一個pojo轉換成頁面需要的json資料格式。放入com.taotao.portal.pojo中。

public class Ad1Node {

     private String srcB;

     private String height;

     private String alt;

     private String width;

     private String src;

     private String widthB;

     private String href;

     private String heightB;

   //getter/setter

}

2、Dao層

從tb_content表中取資料,根據內容分類id查詢列表。

可以使用逆向工程

3、Service層

引數:long categoryId

返回值:List<TbContent>

在ContentServiceImpl中,部分程式碼如下:

@Override

     public List<TbContent> getContentList(long cid) {

          //根據cid查詢內容列表

          TbContentExample example = new TbContentExample();

          //設定查詢條件

          Criteria criteria = example.createCriteria();

          criteria.andCategoryIdEqualTo(cid);

          //執行查詢

          List<TbContent> list = contentMapper.selectByExample(example);

          return list;

     }

3.1、釋出服務

4、表現層

在taotao-portal-web中實現,查詢首頁輪播圖的內容。

4.1、引用服務

在taotao-protal-web專案中引入依賴包,如圖:

4.2、Controller

在首頁展示之前,對資料進行處理,然後展示首頁,需要在PageController中實現。以大廣告位為例子。

@Controller

public class PageController {

     @Autowired

     private ContentService contentService;

     @Value("${AD1_CATEGORY_ID}")

     private Long AD1_CATEGORY_ID;

     @Value("${AD1_HEIGHT}")

     private String AD1_HEIGHT;

     @Value("${AD1_HEIGHT_B}")

     private String AD1_HEIGHT_B;

     @Value("${AD1_WIDTH}")

     private String AD1_WIDTH;

     @Value("${AD1_WIDTH_B}")

     private String AD1_WIDTH_B;

     /**

      * 展示首頁

      *

      * @return

      */

     @RequestMapping("/index")

     public String showIndex(Model model) {

          //1.引入服務

          //2.注入服務

          //3.呼叫方法 tbcontent的列表

          List<TbContent> list = contentService.queryConentListByCategoryId(AD1_CATEGORY_ID);

          //4.轉換成ad1node列表

          List<Ad1Node> nodes = new ArrayList<>();

          for (TbContent tbContent : list) {

               Ad1Node node = new Ad1Node();

               node.setAlt(tbContent.getSubTitle());

               node.setHref(tbContent.getUrl());

               node.setSrc(tbContent.getPic());

               node.setSrcB(tbContent.getPic2());

               node.setHeight(AD1_HEIGHT);

               node.setHeightB(AD1_HEIGHT_B);

               node.setWidth(AD1_WIDTH);

               node.setWidthB(AD1_WIDTH_B);

               nodes.add(node);

          }

          //5.轉換成JSON資料

          String json = JsonUtils.objectToJson(nodes);

          //6.JSON資料設定到request域(MOdel

          model.addAttribute("content_ad1", json);

          return "index";

     }

}

屬性檔案所在位置:

在taotao-portal-web中的springmvc.xml中還需要配置:

<!-- 載入屬性檔案 -->

<context:property-placeholder location="classpath:resource/*.properties" />

測試效果:

5、首頁大廣告的展示流程

首頁是系統的門戶,也就是系統的入口。所以首頁的訪問量是這個系統最大的。如果每次展示首頁都從資料庫中查詢首頁的內容資訊,那麼勢必會對資料庫造成很大的壓力,所以需要使用快取來減輕資料庫壓力。

實現快取的工具有很多,現在比較流行的是redis。

首頁大廣告展示流程:

展示流程: 先從快取取 ,如果不存在 ,從資料庫取出來,寫入快取,再返回頁面;如果存在key ,直接從快取中取出來,展示到頁面。

同步快取:當事務提交(更新,刪除,插入)後,需要同步快取,直接根據Key 刪除redis的key(清空快取) ,再展示時 由上邊的流程展示。

同步快取: