首页大广告展示——淘淘商城(十六)

大广告展示方案

方案一

  • jsonp**跨域请求**,从首页ajax跨域调用服务层服务。
    6.indexadpro1.png
  • 优点:
    • 效率高。没有后台中转,减少内网的带宽消耗。
  • 缺点:
    • 不利于搜索引擎优化(seo优化)。网页中无广告内容,需要延时加载。

方案二

  • 通过门户工程的后台java代码调用服务层服务。
    6.indexadpro2.png
  • 优点:
    • 有利于搜索引擎优化。网页的广告内容是动态的。
    • 可以在门户工程的后台对数据进行加工
  • 缺点:
    • 效率较低。需要后台中转,但是由于门户工程和服务层通常在一个局域网,效率损失可以忽略。
  • 这里使用方案二。

内容服务发布

需求

  • 在taotao-rest中开发,需要根据内容分类的id查询内容列表。
  • 请求url:/rest/content/list/{categoryId}
  • 请求参数:内容分类id
  • 响应内容:TaotaoResult,包含对应分类id的内容列表

Service层

  • 创建ContentService接口和对应的实现类,根据内容分类id,查询内容列表。
@Service
public class ContentServiceImpl implements ContentService {

    @Autowired
    private TbContentMapper contentMapper;

    @Override
    public List<TbContent> getContentList(long catagroyId) {
        TbContentExample example = new TbContentExample();
        Criteria criteria = example.createCriteria();
        criteria.andCategoryIdEqualTo(catagroyId);

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

Controller层

  • 创建ContentController,接收内容分类id,调用服务层,响应TaoTaoResult的json。
@Controller
@RequestMapping("/content")
public class ContentController {

    @Autowired
    private ContentService contentService;

    @RequestMapping("/list/{categoryId}")
    @ResponseBody
    public TaotaoResult getContentList(@PathVariable Long categoryId) {
        try {
            List<TbContent> list = contentService.getContentList(categoryId);
            return TaotaoResult.ok(list);
        } catch (Exception e) {
            e.printStackTrace();
            return TaotaoResult.build(500, ExceptionUtil.getStackTrace(e));
        }
    }

}

大广告展示

需求

分析
  • 在首页接收名为 ad1 的参数,之后进行大广告位轮播图的初始化。
    6.addata.png
  • ad1的格式为json。
[
  {
    "srcB": "http://192.168.57.137/2018/04/02/1522635519043822.jpg",
    "height": 240,
    "alt": "",
    "width": 670,
    "src": "http://192.168.57.137/2018/04/02/1522635519043822.jpg",
    "widthB": 550,
    "href": "http://www.baidu.com",
    "heightB": 240
  },
  {
    "srcB": "http://192.168.57.137/2018/04/02/1522635645049041.jpg",
    "height": 240,
    "alt": "",
    "width": 670,
    "src": "http://192.168.57.137/2018/04/02/1522635645049041.jpg",
    "widthB": 550,
    "href": "http://www.baidu.com",
    "heightB": 240
  },
  {
    "srcB": "http://192.168.57.137/2018/04/02/1522635440598537.jpg",
    "height": 240,
    "alt": "",
    "width": 670,
    "src": "http://192.168.57.137/2018/04/02/1522635440598537.jpg",
    "widthB": 550,
    "href": "http://www.baidu.com",
    "heightB": 240
  }
]
总结
  • 在taotao-portal中开发,需要修改页面跳转控制器,视图模型中加入包含大广告位内容的属性,之后返回首页。
  • 请求url:/rest/index
  • 请求参数:无
  • 响应参数:包含ad1属性的首页视图,ad1属性为大广告位需求的json。

Service层

  • 创建IndexAd这一pojo,包括大广告位要求的8个属性。
  • 在resource的rest.properties中添加服务层参数。大广告位的分类id为89。
#服务层基础url
REST_BASE_URL=http://localhost:8081/rest
#首页大广告位url
INDEX_AD_URL=/content/list/89
  • 创建ContentService接口和对应实现类,使用httpclient调用rest层服务,获取大广告的内容列表,并重新组织封装在IndexAd列表中。
@Service
public class ContentServiceImpl implements ContentService {

    private static final Integer HEIGHT = 240;
    private static final Integer WIDTH = 670;
    private static final Integer WIDTH_B = 550;

    @Value("${REST_BASE_URL}")
    private String REST_BASE_URL;
    @Value("${INDEX_AD_URL}")
    private String INDEX_AD_URL;

    @Override
    public List<IndexAd> getIndexAdList() {
        List<IndexAd> indexAdList = new ArrayList<>();

        try {
            //调用服务层服务
            String restJson = HttpClientUtil.doGet(REST_BASE_URL + INDEX_AD_URL);

            //取出返回的TaoTaoResult数据
            TaotaoResult taotaoResult = TaotaoResult.formatToList(restJson, TbContent.class);
            List<TbContent> contentList = (List<TbContent>) taotaoResult.getData();
            //转化成需要的IndexAd列表
            for (TbContent content : contentList) {
                IndexAd indexAd = new IndexAd();
                indexAd.setSrc(content.getPic());
                indexAd.setHeight(HEIGHT);
                indexAd.setWidth(WIDTH);
                indexAd.setSrcB(content.getPic2());
                indexAd.setWidthB(WIDTH_B);
                indexAd.setHeightB(HEIGHT);
                indexAd.setHref(content.getUrl());
                indexAd.setAlt(content.getSubTitle());

                //注意将indexAd加入结果列表
                indexAdList.add(indexAd);
            }
            return indexAdList;
        } catch (Exception e) {
            e.printStackTrace();
        }

        return indexAdList;
    }
}

Controller层

  • 需要修改PageController,调用service层,将indexAd列表json化,赋值给首页视图的ad1属性。
    • ad1属性不能直接使用对象,因为没有序列化的对象只能包含引用,类似浅复制。
@Controller
public class PageController {

    @Autowired
    private ContentService contentService;

    @RequestMapping("/index")
    public String showIndex(Model model) {
        List<IndexAd> indexAdList = contentService.getIndexAdList();
        model.addAttribute("ad1", JsonUtils.objectToJson(indexAdList));
        return "index";
    }

}

运行项目

  • 需要同时运行portal,rest模块,以及图片服务器。
  • 访问localhost:8082。
    6.indexAd.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值