JApplet與Web Server做溝通

Applet除非是內部或自己使用時,可以直接使用JDBC來連接資料庫,而一般對外開放的服務如果讓Applet直接連接到資料庫,需要開port讓Clinet 的Applet來使用,在安全性上相對的十分危險。

此時可以利用一個中繼的Sokcet Server或是Web Server來當與資料庫連接的proxy代理服務器,如此Apllet只要連接Web Server,對Server提出需求,而Server會依需求與資料庫做溝通,並回傳Applet要求之資料,如此可以做成多層式的架構來解決Applet資料取得之問題。

AppletWeb1.jpg

範例設計上有一個輸入框JTextField可以輸入要傳給Server的資料內容,而下方的JTextArea是承接從Server回傳的資料內容,按鈕則可進行動作Action。

AppletWeb2.jpg

輸入傳送的字串後,按下”按我”可進行資料的傳送POST。

AppletWeb3.jpg

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視窗可以看到傳送出去的資料內容:

AppletWeb4.jpg

而在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取得的資料:

AppletWeb5.jpg

回傳的資料就可以於Applet的元件裡看到了:

com.google.gson.JsonObject json = web.getJSON();
getJTextArea().setText(json.get("msg").getAsString());

AppletWeb6.jpg

程式碼下載:

Xuite WebHd下載

Applet With Web Server

發表迴響