1. 程式人生 > >伺服器端用Servlet響應客戶端請求,Gson請求。可以返回多個數據庫中的資訊

伺服器端用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後的執行結果

相關推薦

伺服器Servlet響應客戶請求Gson請求可以返回個數資訊

Gson解析工具類GsonUtil,可以實現物件轉換為Json字串,也可以將json字串轉換為object package gsonutil; import java.util.ArrayList; import java.util.List; impo

Binds 操作個數

用 Binds 操作多個數據庫 從 0.12 開始, Flask-SQLAlchemy 可以容易地連線到多個數據庫。為了實現 這個功能,預配置了 SQLAlchemy 來支援多個“binds”。 什麼是 binds ?在 SQLAlchemy 中,一個 bind 是可以執行 SQ

利用socket技術實現java實現客戶向服務傳送檔案伺服器接收檔案並給出一個響應

通訊是網路程式設計中重要的組成部分,而socket程式設計是網路程式設計的基礎。利用socket可以實現客戶端和伺服器端的通訊。下面我先把客戶端和伺服器端的程式碼粘上去再進行詳細的分析。 package test1; import java.io.File; import java.io

AJAX+Servlet實現客戶無重新整理請求伺服器實踐

   最近需要做一個在網頁中要不斷檢測伺服器端資料程式,當然最簡單的方法是在html頁面頭部加以下標籤 <META http-equiv=V="REFRESH" content="5;URL=本頁面url">  實現將網頁設成每隔5秒鐘將自身頁面重新整理一次

跟著大彬讀原始碼 - Redis 2 - 伺服器如何響應客戶請求?(上)

上次我們通過問題“啟動伺服器,程式都幹了什麼?”,跟著原始碼,深入瞭解了 Redis 伺服器的啟動過程。 既然啟動了 Redis 伺服器,那我們就要連上 Redis 服務幹些事情。這裡我們可以通過 redis-cli 測試。 現在客戶端和伺服器都準備好了,那麼Redis 客戶端和伺服器如何建立連線?伺服器又是

跟著大彬讀原始碼 - Redis 3 - 伺服器如何響應客戶請求?(下)

繼續我們上一節的討論。伺服器啟動了,客戶端也傳送命令了。接下來,就要到伺服器“表演”的時刻了。 1 伺服器處理 伺服器讀取到命令請求後,會進行一系列的處理。 1.1 讀取命令請求 當客戶端與伺服器之間的套接字因客戶端的寫入變得可讀時,伺服器將呼叫命令請求處理器執行以下操作: 讀取套接字中的命令請求,並將其儲

Servlet客戶請求

while nth oct 名稱 請求協議 pub 配置 servle value 以下內容引用自http://wiki.jikexueyuan.com/project/servlet/client-request.html: 當瀏覽器請求網頁時,它會向Web服務器發送大

Servlet 路徑 客戶路徑 伺服器路徑 ServletContext獲得資源路徑 Class獲得資源路徑 ClassLoader獲得資源路徑

(1)路徑分為三種1.絕對路徑2.相對路徑(分兩種)帶“/”的相對路徑不帶“/”的相對路徑(2)客戶端路徑1.超連結絕對路徑:<a href="http://Localhost:8080/javaEE-05/servlet/AServlet">點選</a&g

Servlet處理客戶HTTP請求

本篇部落格將在上一篇部落格《Servlet第一個示例》的基礎上繼續介紹,Servlet如何處理客戶端的請求,獲得客戶端的請求訊息。 首先我們新建一個靜態頁面index.html,用於向Servlet提交請求。 <!DOCTYPE html> &l

WebApiJilFormatter處理客戶序列化的字符串加密之後在服務解析

template images out log return es2017 reading option 序列 本文有改動,參考原文:https://www.cnblogs.com/liek/p/4888201.html

5款好的mysql客戶

-c 文檔 容易 專業 服務 刷新數據 結果 如何 操作mysql 1. EMS SQL Manager for MySQL是一款高性能MySQL數據庫服務器系統的管理和開發工具。它支持從MySQL 3.23到6.0的任一版本,並支持最新版本的MySQL的特點,包括:查

關於優化遊戲服務器響應客戶消息的一點思考

情況 滿足 可能 轉發 邏輯 存儲 oop ado 簡單 現在假設有如下構建的遊戲服務器,遊戲服務器有一組gate服務器,用來驗證客戶端,並且通過gate服務器來與一組主服務器,然後主服務器與關系服務器進行通信。 其中relation服務器用來處理各種關系,例如好友關系,

FastDFS伺服器叢集部署和整合客戶到SpringBoot

FastDFS是一個開源的輕量級分散式檔案系統,它對檔案進行管理,功能包括:檔案儲存、檔案同步、檔案訪問(檔案上傳、檔案下載)等,解決了大容量儲存和負載均衡的問題,同時也能做到在叢集環境下一臺機子上傳檔案,同時該組下的其他節點下也備份了上傳的檔案。做分散式系統開發時,其中要解決的一個問題就是圖片、音視訊

KepServer作為OPC UA伺服器以及建立OPC UA客戶

PS:KepServer如何連線PLC請看我其他部落格內容。 初次嘗試的時候一步步操作即可,可以不看附帶的官方介紹,詳細瞭解的可以看下 一、配置OPC UA伺服器 OPC UA 官方介紹: OPC統一體系結構(UA)是OPC基金會在幾十個成員組織的幫助下建立的一個開放標準。雖然U

Java Servlet獲取客戶IP

String ip = request.getHeader("x-forwarded-for");       if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

實現一個輕量級高可復的RabbitMQ客戶

情況下 如果 object stop str tel rri bind src 前言 ????本示例通過對服務訂閱的封裝、隱藏細節實現、統一配置、自動重連、異常處理等各個方面來打造一個簡單易用的 RabbitMQ 工廠;本文適合適合有一定 RabbitMQ 使用經驗的讀者閱

計算機網路_伺服器只能處理一個客戶_模型

一、 需要知道 1.1 套接字 套接字是通訊端點的抽象。套接字描述符類似於檔案描述符。 accept recv阻塞執行。 int listen(int sockfd, int size);  早期版本size含義是伺服器能維護的已完成的連線和正在連線的佇列的大小,有兩個

網路程式設計套接字、網路位元組序及udp寫客戶和服務聊天程式

認識IP地址 IP協議有兩個版本:IPV4和IPV6。 IPV4:IPV4版本的IP地址是4位元組無符號整數。那麼就存在IP地址資源匱乏的時候,這時可以採用兩種方法: DHCP:ip地址動態分配(應用層協議); NAT: 地址替換; 但是這兩種方法只是暫時的有I

細說後模板渲染、客戶渲染、node 中間層、伺服器渲染(ssr)

前端與後端渲染方式的發展大致經歷了這樣幾個階段:後端模板渲染、客戶端渲染、node 中間層、伺服器端渲染(ssr)。 1. 後端模板渲染 前端與後端最初的渲染方式是後端模板渲染,就是由後端使用模板引擎渲染好 html 後,返回給前端,前端再用 js 去操作 dom 或者渲染其他動態的部分。 這個過程大致分成以

Ubuntu 14.04下SVN伺服器server的搭建和客戶的簡單操作

參考:Ubuntu 14.04下搭建SVN伺服器(SVN Server) 一:搭建環境 檢視Ubuntu系統的版本資訊:可用cat /proc/version命令、uname -a命令與sb_release -a命令。 Ubuntu:14.04 64位