页面加载成功以后,异步获取省份信息
1. 搭建项目(使用上次案例环境)
2. 创建省份表
CREATE TABLE `province` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`NAME` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
insert into `province`(`id`,`NAME`) values (1,‘北京‘),(2,‘上海‘),(3,‘广州‘),(4,‘陕西‘),(5,‘台湾‘),(6,‘安徽‘);
1. 导入jar包(jedis...) 、配置文件、工具类 -- 暂时不管
2. 编写实体类 Province
3. 编写Dao
4. 编写Service
5. 编写Servlet
6. 编写页面
Province 实体类
package com.itheima.bean;
public class Province {
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
ProvinceMapper
package com.itheima.mapper;
import com.itheima.bean.Province;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface ProvinceMapper {
@Select("select * from province")
public List<Province> findAll();
}
ProvinceService
package com.itheima.service;
import com.itheima.bean.Province;
import java.util.List;
public interface ProvinceService {
public List<Province> findAll();
public String findAllJson() throws Exception;
}
ProvinceServiceImpl
package com.itheima.service.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.itheima.bean.Province;
import com.itheima.mapper.ProvinceMapper;
import com.itheima.service.ProvinceService;
import com.itheima.utils.DaoInstanceFactory;
import com.itheima.utils.JedisUtils;
import redis.clients.jedis.Jedis;
import java.util.List;
public class ProvinceServiceImpl implements ProvinceService {
@Override
public List<Province> findAll() {
ProvinceMapper mapper = DaoInstanceFactory.getMapper(ProvinceMapper.class);
return mapper.findAll();
}
// [{"id":1,"name":"北京"},{"id":2,"name":"上海"}]
public String findAllJson() throws Exception {
//1. 读取缓存
Jedis jedis = JedisUtils.getJedis();
String province_json = jedis.get("province_json");
//2. 判断是否有缓存
if (province_json == null) {
// 没有缓存
// 查询数据
ProvinceMapper mapper = DaoInstanceFactory.getMapper(ProvinceMapper.class);
List<Province> list = mapper.findAll();
// 转换
province_json = new ObjectMapper().writeValueAsString(list);
// 放入缓存
jedis.set("province_json", province_json);
System.out.println("查询数据库.....");
}
return province_json;
}
}
ProvinceServlet
package com.itheima.controller;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.itheima.bean.Province;
import com.itheima.service.ProvinceService;
import com.itheima.service.impl.ProvinceServiceImpl;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
@WebServlet("/provinceServlet")
public class ProvinceServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
//1. 设置响应响应编码和类型
response.setContentType("application/json;charset=utf-8");
//2. 调用service查询
ProvinceService service = new ProvinceServiceImpl();
/* List<Province> list = service.findAll();
//3. 将集合转换为JSON, 返回到浏览器
new ObjectMapper().writeValue(response.getWriter(),list);*/
String allJson = service.findAllJson();
response.getWriter().write(allJson);
} catch (Exception e) {
e.printStackTrace();
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
provice.html
<!DOCTYPE html>
<html lang="en">
<head>
<title>异步加载省份</title>
<script src="js/vue.js"></script>
<script src="js/axios-0.18.0.js"></script>
</head>
<body>
<div id="app">
省份
<select>
<!--[{"id":1,"name":"北京"},{"id":2,"name":"上海"}]-->
<option v-for="p in provices" v-bind:value="p.id">{{p.name}}</option>
</select>
</div>
<script>
// 使用vue加载异步加载数据
new Vue({
el: "#app",
data: {
provices: [],
},
methods: {
findProinceJson() {
// 异步请求
axios.get("provinceServlet").then(resp => {
// 给数据赋值 [{"id":1,"name":"北京"},{"id":2,"name":"上海"}]
this.provices = resp.data;
})
}
},
created() {
// vue对象创建以后, 调用方法发生异步请求
this.findProinceJson();
}
});
</script>
</body>
</html>
原文:https://www.cnblogs.com/60kmph/p/14046853.html