案例:

案例需求:
	1. 提供index.html页面,页面中有一个省份 下拉列表
	2. 当 页面加载完成后 发送ajax请求,加载所有省份

先做案例分析,创建一个index.html的页面来发送请求,index.html直接访问servlet,在servlet中进行获取数据,将字符串json化,然后响应到前端去,servlet从service里面获取数据(这个里面是内存级的数据库redis),service从Dao里面获取数据,Dao类是对数据库的操作,然后一级一级的返回数据,最后有前端处理。

下面是具体的文件分类

redis毕设项目 redis项目实例_List


redis毕设项目 redis项目实例_json_02

下面是根据目录的代码展示

这是一个接口,返回的是一个list集合,集合里面放的是Province的实体类对象
package cn.Province.dao;

import cn.Province.domain.Province;

import java.util.List;

public interface ProvinceDao {
    public List<Province> findAll();
}
下面是ProvinceDao接口的实现类,里面重写了findAll方法,对数据库进行查询,返回一个实体类的List集合
package cn.Province.dao.impl;

import cn.Province.dao.ProvinceDao;
        import cn.Province.domain.Province;
        import cn.Province.utils.JDBCUtils;
        import org.springframework.jdbc.core.BeanPropertyRowMapper;
        import org.springframework.jdbc.core.JdbcTemplate;


        import java.util.List;

public class ProvinceDaoImpl implements ProvinceDao {
    JdbcTemplate template=new JdbcTemplate(JDBCUtils.getDataSource());
    @Override
    public List<Province> findAll() {
        //定义sql
        String sql="select *from province";
        List<Province> list = template.query(sql, new BeanPropertyRowMapper<Province>(Province.class));
        return list;
    }
}
下面的代码是Service层面的接口,方法在实现类里面介绍
package cn.Province.service;

import cn.Province.domain.Province;

import java.util.List;

public interface ProvinceService {
    public List<Province> findAll();
    public String findAllJson();
}
下面就是service层面的实现类了。里面首先获取了一个ProvinceDao的对象,第一个方法是直接调用Dao的findAll方法,从而让其返回一个list集合,第二个方法是返回一个字符串,首先,从redis里面获取数据,具体步骤都在里面注释体现了,然后在这里就直接把字符串进行json的序列化了,如果有的话,就通过jedis获取,然后进行返回,如果没有的话,先利用dao调用findAll方法,从数据库里面获取数据,然后在存入redis里面(通过jedis的set方法)。
package cn.Province.service.impl;

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

import java.util.List;

public class ProvinceServiceImpl implements ProvinceService {
    //声明dao
    private  ProvinceDao dao=new ProvinceDaoImpl();//多态
    @Override
    public List<Province> findAll() {
        return dao.findAll();
    }
    /*使用redis缓存*/
    @Override
    public String findAllJson() {
        // 1 从radis里面获取数据
        //1.1获取radis客户端连接
        Jedis jedis = JedisPoolUtils.getJedis();
        String province_json = jedis.get("province");
        //2 判断province_json 是否为null
        if (province_json==null||province_json.length()==0){
            //redis中没有数据
            System.out.println("redis中没有数据,从数据库中查询");
            List<Province> ps = dao.findAll();
            //将字符串序列化为json
            ObjectMapper mapper=new ObjectMapper();
            try {
                province_json=mapper.writeValueAsString(ps);//变成一个json字符串
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
            //将json数据存到redis中
            jedis.set("province", province_json);
            jedis.close();
        }else {
            System.out.println("有数据,从redis缓存中获取");
        }
        return province_json;
    }
}
最后把数据返回到servlet里面进行处理,相应到前端页面去。下面是servlet的代码。获取一个service对象,直接调用其findAllJson方法,然后,设置响应格式,最后通过输出流相应到前端页面。
package cn.Province.Web.servlet;

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

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 {
       /* //1 调用service查询  内存层次上的数据库
        ProvinceService service=new ProvinceServiceImpl();
        List<Province> list = service.findAll();
        //2 序列化list为json
        ObjectMapper mapper=new ObjectMapper();
        String json = mapper.writeValueAsString(list);//把Java对象转化为json
        //3响应结果*/
        ProvinceService service=new ProvinceServiceImpl();//前面是个接口,后面是个实现类
        String json = service.findAllJson();
        System.out.println(json);//[{"id":1,"name":"北京"},{"id":2,"name":"上海"},{"id":3,"name":"广州"},{"id":4,"name":"陕西"}]
        response.setContentType("application/json;charset=utf-8");
        response.getWriter().write(json);//通过流把字符串回应出去

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}
下面是JDBC的工具类
package cn.Province.utils;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

/**
 * JDBC工具类 使用Durid连接池
 */
public class JDBCUtils {

    private static DataSource ds ;

    static {

        try {
            //1.加载配置文件
            Properties pro = new Properties();
            //使用ClassLoader加载配置文件,获取字节输入流
            InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
            pro.load(is);

            //2.初始化连接池对象
            ds = DruidDataSourceFactory.createDataSource(pro);

        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取连接池对象
     */
    public static DataSource getDataSource(){
        return ds;
    }


    /**
     * 获取连接Connection对象
     */
    public static Connection getConnection() throws SQLException {
        return  ds.getConnection();
    }
}
下面的Jedis的工具类
package cn.Province.utils;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

/**
 * JDBC工具类 使用Durid连接池
 */
public class JDBCUtils {

    private static DataSource ds ;

    static {

        try {
            //1.加载配置文件
            Properties pro = new Properties();
            //使用ClassLoader加载配置文件,获取字节输入流
            InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
            pro.load(is);

            //2.初始化连接池对象
            ds = DruidDataSourceFactory.createDataSource(pro);

        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取连接池对象
     */
    public static DataSource getDataSource(){
        return ds;
    }


    /**
     * 获取连接Connection对象
     */
    public static Connection getConnection() throws SQLException {
        return  ds.getConnection();
    }
}
最后是前端页面
<!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);
                });


            });

        });
       /* $(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= "<optin name='"+this.id+"'>"+this.name+"</optin>";
                    //4.调用select的append追加option
                    province.append(option);
                });

            });
        });*/

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