Applet除非是內部或自己使用時,可以直接使用JDBC來連接資料庫,而一般對外開放的服務如果讓Applet直接連接到資料庫,需要開port讓Clinet 的Applet來使用,在安全性上相對的十分危險。
此時可以利用一個中繼的Sokcet Server或是Web Server來當與資料庫連接的proxy代理服務器,如此Apllet只要連接Web Server,對Server提出需求,而Server會依需求與資料庫做溝通,並回傳Applet要求之資料,如此可以做成多層式的架構來解決Applet資料取得之問題。
範例設計上有一個輸入框JTextField可以輸入要傳給Server的資料內容,而下方的JTextArea是承接從Server回傳的資料內容,按鈕則可進行動作Action。
輸入傳送的字串後,按下”按我”可進行資料的傳送POST。
try
{
com.yslifes.connect.WebModule web = new com.yslifes.connect.WebModule();
//使用post把資料傳送到web server端
web.doPost("http://localhost:8080/AppletGUIServer/Info.jsp", "data="+getJTextField().getText()+"&p=1", null, "utf-8");
//取回回傳的json資料
com.google.gson.JsonObject json = web.getJSON();
getJTextArea().setText(json.get("msg").getAsString());
}catch(Exception ex)
{
ex.printStackTrace();
logger.info(ex);
}
這裡使用到的WebModule可以參考HttpURLConnection來實作get及post動作。
在Console視窗可以看到傳送出去的資料內容:
而在WebServer方面,則可利用request來取得需要資料做處理,再回傳out.print給Applet。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %><%
request.setCharacterEncoding("utf-8");
//取得傳來的參數
System.out.println("data="+request.getParameter("data"));
System.out.println("p="+request.getParameter("p"));
//回傳json object
com.google.gson.JsonObject json = new com.google.gson.JsonObject();
json.addProperty("success",true);
json.addProperty("msg","回傳的訊息");
out.print(json.toString());
%>
WebServer的Console可以看到request取得的資料:
回傳的資料就可以於Applet的元件裡看到了:
com.google.gson.JsonObject json = web.getJSON();
getJTextArea().setText(json.get("msg").getAsString());
程式碼下載:
Xuite WebHd下載