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

时间:2012-07-25 11:22:05

标签: java java-ee servlets applet

我想将send 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,我想知道它是否可以发送!< / p>

4 个答案:

答案 0 :(得分:3)

如何对其进行序列化并将其作为回应发送?考虑将其转换为JSON或XML。

答案 1 :(得分:2)

如果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。

这篇文章将对您有所帮助:

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

希望得到这个帮助。

答案 2 :(得分:1)

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

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

Map<String, String> myMap = new HashMap<String, String>();// 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<Map<String, String>>() {}.getType();
Map<String, String> myMap = gson.fromJson(jsonString, typeOfHashMap);

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

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

答案 3 :(得分:0)

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

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

希望这对你有所帮助。