服务器端用Servlet响应客户端请求,Gson请求。可以返回多个数据库中的信息

Gson解析工具类GsonUtil,可以实现对象转换为Json字符串,也可以将json字符串转换为object

package gsonutil;


import java.util.ArrayList;
import java.util.List;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;

public class GsonUtil<T> {

    private static Gson gson = new Gson();
    public static <T>  String objectToJsonStr(T object)
    {
        String jsonStr;
        jsonStr = gson.toJson(object);
        return jsonStr;
    }
    public static <T> String objectsToJsonStr(List<T> objects)
    {
        String jsonStr;
        jsonStr = gson.toJson(objects);
        return jsonStr;

    }
    public static <T> T jsonStrToObject(String jsonStr,Class<T> cla)
    {
        T object = gson.fromJson(jsonStr,cla);
        return object;
    }
    public static <T> List<T> jsonStrToObjects(String jsonStr,Class<T> cla)
    {

        //json字符串不能为空  

        //json字符串必须为数组节点类型  

        List<T> listT = null;  
        try {  
            //创建泛型对象  
            T t =  cla.newInstance();  
            //利用类加载加载泛型的具体类型  
            Class<T> classT = (Class<T>) Class.forName(t.getClass().getName());  
            List<Object> listObj = new ArrayList<Object>();  
            //将数组节点中json字符串转换为object对象到Object的list集合  
            listObj = new GsonBuilder().create().fromJson(jsonStr, new TypeToken<List<Object>>(){}.getType());  
            //转换未成功  
            if(listObj == null || listObj.isEmpty()) return null;  
            listT = new ArrayList<T>();  
            //将Object的list中的的每一个元素中的json字符串转换为泛型代表的类型加入泛型代表的list集合返回  
            for (Object obj : listObj) {  
                T perT = new GsonBuilder().create().fromJson(obj.toString(), classT);  
                listT.add(perT);  
            }  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        return listT;  
    }


}

ProductInfo类,get,set方法实现获取产品id,name,path

package bean;

public class ProductInfo {
    private String img;
    private String name;

    private int id;

    public ProductInfo() {

    }

    public ProductInfo( int id,String img, String name) {
        this.img = img;
        this.name = name;

        this.id = id;
    }

    public String getImg() {
        return img;
    }

    public void setImg(String img) {
        this.img = img;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }



}

ProductInfoDao类返回类对象prds,包含了数据库中的产品id,name,path信息

package db;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import bean.ProductInfo;

public class ProductInfoDao {


        int id = -1;
        private DBConn db;

        public ProductInfoDao() {
            db = DBConn.getInstance();
        }

        public List<ProductInfo> getProductInfos() throws Exception {
            List<ProductInfo> prds = new ArrayList<ProductInfo>();
            try {
                /*这种结果集不支持,滚动的读去功能所以,如果获得这样一个结果集,只能使用它里面的next()方法,逐个的读去数据.
                 * 所以如果只是想要可以滚动的类型的Result只要把Statement如下赋值就行了.   
                 * Statement st=conn.createStatement(Result.TYPE_SCROLL_INSENITIVE,ResultSet.CONCUR_READ_ONLY);
                 * */
                Connection conn = db.getConnection();
                Statement stat = conn.createStatement();
                ResultSet rs = stat.executeQuery("SELECT * FROM product where prdId <=10");
                while (rs.next())
                {
                  ProductInfo prd = new ProductInfo();
                  prd.setId(rs.getInt(1));
                  prd.setImg(rs.getString(2));
                  prd.setName("haha"+rs.getInt(1));
                  prds.add(prd);
                  System.out.println(prd.getId());
                  System.out.println(prd.getImg());
                  System.out.println(prd.getName());

                }
                stat.close();
                conn.close();
                return prds;


            } catch (SQLException e) {

                System.out.println("查询失败!");

                e.printStackTrace();

            }
            return null;

        }       

        public static void main(String[] args) {
            ProductInfoDao pDao=new ProductInfoDao();
            try {
                pDao.getProductInfos();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

}

DBConn类实现数据库连接

package db;

import java.io.File;
import java.sql.*;

public class DBConn {
    private static DBConn db = null;

    public static DBConn getInstance(){
        if (db == null){
            db = new DBConn();
        }
        return db;
    }

    //初始化数据库
    private DBConn() {

        Connection conn = null;
        //System.out.println(new java.util.Date());

        try {
            conn = getConnection();
            conn.setAutoCommit(false);
            conn.commit();
            conn.close();
        } catch (SQLException e) {
            System.out.println("数据库创建失败!");
            e.printStackTrace();
        }


    }

    //创建数据库连接
    public Connection getConnection()
    {
        try
        {
              String driver = "com.mysql.jdbc.Driver";
            // URL指向要访问的数据库名         
            String url = "jdbc:mysql://127.0.0.1:3306/mall";
            // MySQL配置时的用户名    
            String user = "root";              // MySQL配置时的密码   
            String password = "";
            String sql=null;
            File file=null;
                Class.forName(driver);
             // 连续数据库         
                Connection conn = DriverManager.getConnection(url, user, password);
                if(!conn.isClosed())            
                     System.out.println("数据库连接成功");
            return conn;
        }
        catch(Exception e)
        {
            System.out.println("数据库连接异常");
            e.printStackTrace();
            return null;
        }

    }

/*public static void main(String[] args) {
    DBConn dbConn =new DBConn();
}*/
}

ProductServlet类实现post方法向客户端响应请求

package servlet;

import gsonutil.GsonUtil;

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

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.gson.Gson;

import db.ProductInfoDao;
import bean.ProductInfo;

@SuppressWarnings("serial")
public class ProductServlet extends HttpServlet{

    String jsonStr;

    ProductInfo prdInfo = new ProductInfo();
    ProductInfoDao prdDao = new ProductInfoDao();
    Gson gson = new Gson();


    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        doPost(req, resp);
    }


    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;Charset=utf-8");
        List<ProductInfo> prds = null;
        try {
            prds = new ProductInfoDao().getProductInfos();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        jsonStr =GsonUtil.objectToJsonStr(prds);
        System.out.println(prds.size());
        for(int i=0;i<prds.size();i++)
        {
            System.out.println(prds.get(i).getId()+"  "+prds.get(i).getImg()+"  "+prds.get(i).getName());
        }
        System.out.println("---------");
        System.out.println(jsonStr);
        resp.getWriter().print(jsonStr);


    }
}

实验结果
服务器端的实现结果
部署tomcat后的运行结果

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值