2012-12-07 12 views
0

我正在使用Eclipse Indigo和Tomcat 7.0。我有一個Swing應用程序,包含「gui」包的項目「Controller」。有了這個應用程序,我正在創建一個用於「設置」機器信息的控制器工具。我有幾個hashps,其中存儲Swing元素的信息(20個類似的面板,但包含不同的信息,如名稱,狀態等)。Java Swing應用程序 - > servlet的JSON信息,該怎麼做? HTTP?插座?

我想用一個servlet來創建一個JSON文件,其中包含這些相關信息(我必須以某種方式獲取數據到我的Android應用程序,對我來說似乎JSON一個不錯的選擇)。我的servlet可以通過localhost連接:8080/CommunicationBase/JSONServlet這就是我遇到的問題:我不能在我的servlet的Dynamic-Web-Service項目中使用我的Swing應用程序。

我的servlet的一個小例子:

public class JSONServlet extends HttpServlet { 
    /*this is in my dynamic-web-service-project "CommunicationBase" */ 

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     JSONArray arrayObj = new JSONArray(); 
     arrayObj.add("Machine #1"); 
     arrayObj.add("Status: Down"); 

     PrintWriter out = response.getWriter(); 
     out.println(arrayObj); 

     arrayObj = new JSONArray(); 
     arrayObj.add("Machine #2"); 
     arrayObj.add("Status: Running");   
    } 
} 

我怎樣才能把我的HashMap的信息從Swing應用程序給Servlet?我可以在我的「Controller」項目中創建一個Java類,並添加一個web.xml?如果是,在哪裏?或者我該怎麼做?

可我也從我的Android應用程序改變的servlet的JSON信息然後以某種方式容易嗎?這樣我的Swing應用程序中的信息就會改變(Android和Swing應用程序將始終在同一個LAN中工作)。

+0

如果你有一個更好的解決方案(不使用JSON,別的東西),隨意去:) – Andrea

回答

1

Android客戶端:

  Socket socket = new Socket(serverIPAddress, SERVER_PORT); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8")); 
      String help = reader.readLine(); 
      JSONObject myJson = new JSONObject(help); 

Swing應用程序:

Thread thread = new Thread() { 
     @Override 
     public void run() { 
      try { 
      // while(socket.isConnected()){ 

       writer = new OutputStreamWriter(socket.getOutputStream(), "UTF-8"); 
       reader = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8")); 

       JSONObject myJson = new JSONObject(); 
       JSONArray list = new JSONArray(); 
       ... //do something useful for JsonTransformation 

writer.write(myJson.toString()); 

} 
}catch (IOException e) { 
       e.printStackTrace(); 
      } finally { 
       closeSocket(); 
      } 
} 

做的工作。 thx爲您的幫助!

2

Web應用程序(即servlet)應該從某個數據庫中獲取其信息。

Swing應用程序應直接獲得,而是存儲將其存儲在包含HashMap從/信息到同一個數據庫,或者它應該通信的Web應用獲取/存儲信息。

的Android應用程序也應與Web應用程序獲得和修改的信息溝通。

最後,每個人都將因此獲得並存儲在同一個數據庫中的信息。

+0

Isn't有另一種方式?一個完整的數據庫似乎對於這個小通訊事物(它只是包含字符串)而言太費勁了 或者如果不是,我應該選擇哪個數據庫? – Andrea

+0

任何事情都可以做。這裏有非常輕量級的數據庫,例如HSQLDB。 –

+0

套接字做到了(至少現在) thx無論如何! – Andrea