-
在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);
}
}
至此,服务器所以代码写完了
-
在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
-
我们直接把
json数据
存入Redis,在接口类加入方法
public String findAllJson();
-
在实现类中
实现方法
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;
}
}
-
简化
一下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);
}
}
最终效果
: