今天看啥  ›  专栏  ›  zheng_zq

Redis学习笔记(十一) 案例:省份列表(下)

zheng_zq  · 简书  ·  · 2020-02-14 13:34
  1. 在web包下面的servlet包里面写一个 ProvinceServlet
package com.zzq.web.servlet;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.zzq.domain.Province;
import com.zzq.service.ProvinceServiceImpl;
import com.zzq.service.impl.ProvinceService;

import java.io.IOException;
import java.util.List;

@javax.servlet.annotation.WebServlet("/provinceServlet")
public class ProvinceServlet extends javax.servlet.http.HttpServlet {
    @Override
    protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        //1.调用service查询
        ProvinceService service = new ProvinceServiceImpl();
        List<Province> list = service.findAll();
        //2.序列化list为json
        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(list);
        //3.响应结果
        response.setContentType("application/json;charset=utf-8");
        response.getWriter().write(json);
    }

    @Override
    protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        this.doPost(request, response);
    }
}

至此,服务器所以代码写完了

  1. 在web包下写一个 index.html 页面
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>Title</title>

   <script src="js/jquery-3.3.1.min.js"></script>

   <script>
       $(function () {
           //发送ajax请求,加载所有省份数据
           $.get("provinceServlet",{},function (data) {
               //[{"id":1,"name":"北京"},{"id":2,"name":"上海"},{"id":3,"name":"广州"},{"id":4,"name":"陕西"}]
               //1.获取select
               var province = $("#province");
               //2.遍历json数组
               $(data).each(function () {
                   //3.创建<option>
                   var option = "<option name='"+this.id+"'>"+this.name+"</option>";
                   //4.调用select的append追加option
                   province.append(option);
               });
           });
       });
   </script>

</head>
<body>

<select id="province">
   <option>--请选择省份--</option>
</select>
</body>
</html>

效果如下

改造:加入Redis

  1. 我们直接把 json数据 存入Redis,在接口类加入方法
public String findAllJson();
  1. 在实现类中 实现方法
package com.zzq.service;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zzq.dao.ProvinceDaoImpl;
import com.zzq.dao.impl.ProvinceDao;
import com.zzq.domain.Province;
import com.zzq.service.impl.ProvinceService;
import com.zzq.util.JedisPoolUtils;
import redis.clients.jedis.Jedis;

import java.util.List;

/**
 * ProvinceService的实现类
 */
public class ProvinceServiceImpl implements ProvinceService {
    //声明Dao
    private ProvinceDao provinceDao = new ProvinceDaoImpl();

    @Override
    public List<Province> findAll() {
        return provinceDao.findAll();
    }

    /*
        使用redis缓存
     */
    @Override
    public String findAllJson() {
        //1.获取redis客户端连接
        Jedis jedis = JedisPoolUtils.getJedis();
        //2.查询数据
        String province_json = jedis.get("province");
        //3.判断 province_json 数据是否为null
        if (province_json == null || province_json.length() == 0) {
            //redis中没有数据
            System.out.println("redis中没数据,查询数据库...");
            //从数据库中查询
            List<Province> list = provinceDao.findAll();
            //将list序列化为json
            ObjectMapper mapper = new ObjectMapper();
            try {
                province_json = mapper.writeValueAsString(list);
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
            //将json数据存入redis
            jedis.set("province", province_json);
            //归还连接
            jedis.close();
        } else {
            System.out.println("redis中有数据,查询缓存...");
        }
        return province_json;
    }
}
  1. 简化 一下servlet,因为servlet不用处理json了
package com.zzq.web.servlet;

import com.zzq.service.ProvinceServiceImpl;
import com.zzq.service.impl.ProvinceService;

import java.io.IOException;

@javax.servlet.annotation.WebServlet("/provinceServlet")
public class ProvinceServlet extends javax.servlet.http.HttpServlet {
    @Override
    protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        //1.调用service查询
        ProvinceService service = new ProvinceServiceImpl();
        String json = service.findAllJson();
        //2.响应结果
        response.setContentType("application/json;charset=utf-8");
        response.getWriter().write(json);
    }

    @Override
    protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        this.doPost(request, response);
    }
}

最终效果





原文地址:访问原文地址
快照地址: 访问文章快照