将数据从servlet发送到applet:我该如何实现?

我想将发送HashMap对象发送到请求它的applet。 servlet具有该HashMap对象。 有没有办法可以做到这一点?

 Applet ------requests HashMap object---->Servlet listens to this request | | Servlet searches that HashMap Object | | \ / <--Finally Send this to applet------------ Servlet gets the HashMap object 

我已经建立了与servlet的连接,我的servlet也有HashMap对象,但是我不知道如何将它发送到applet,我想知道它是否可以发送!

我将使用一些外部库来回答您的问题: Google Gson和Apache IO Utils 。

因此,您已经在Servlet中拥有HashMap并希望将其发送到Applet:

 Map myMap = new HashMap();// or whatever Gson gson = new GsonBuilder().create(); String jsonString = gson.toJson(myMap); IOUtils.write(jsonString, resp.getOutputStream());// where 'resp' is your HttpServletResponse IOUtils.closeQuietly(resp.getOutputStream()); 

并在您的Applet中接收它:

 String jsonString = IOUtils.toString(conn.getInputStream()); // where 'conn' is an HttpURLConnection IOUtils.closeQuietly(connection.getInputStream()); Gson gson = new GsonBuilder().create(); // The TypeToken is needed when Generics are involved Type typeOfHashMap = new TypeToken>() {}.getType(); Map myMap = gson.fromJson(jsonString, typeOfHashMap); 

就是这样。 这只是一个简单的例子,但我希望你从中获得一些东西。

当然,您可以手动而不是使用外部库,但这种方式更容易。

如何序列化并发送响应? 考虑将其转换为JSON或XML。

如果servlet与下载applet的服务器位于同一服务器,则可以打开与servlet的URL连接。 你可以看看

 URL site = new URL("your site") URLConnection urlCon = site.openConnection(); BufferedReader in = new BufferedReader(new InputStreamReader( urlCon.getInputStream())); String inputLine; while ((inputLine = in.readLine()) != null) System.out.println(inputLine); in.close(); 

同时在servlet中使用HttpServletResponse将数据写回客户端。

如果您需要更“软化”的东西,可以在applet中使用axis作为webservice堆栈,或者包含像Jersey这样的轻量级REST库。 但是这些解决方案迫使您使用其他服务器组件而不是Servlet。

这篇文章将帮助您:

  • 编写servlet: 如何将json发送回客户端作为响应 。
  • 编写客户端: 如何从http响应中读取JSON 。

它们都使用json-lib来解析/序列化JSON格式的对象。

希望这有帮助。

您可以简单地序列化对象并将其直接写入HttpServletResponse,写入字节流。

在Applet端,您必须使用流读取字节流和反序列化。 请注意,Applet发送POST请求,否则如果使用GET请求,则可能具有1024byte限制。

希望这对你有所帮助。