伺服器端用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);
}
}
實驗結果
相關推薦
伺服器端用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
WebApi用JilFormatter處理客戶端序列化的字符串加密,之後在服務端解析。
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位