4

我想将发送HashMap对象发送到请求它的小程序。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对象,但我不知道如何将它发送到小程序,我想知道它是否可以发送!

4

4 回答 4

3

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

于 2012-07-25T11:25:29.553 回答
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 将数据写回客户端。

如果你需要更“复杂”的东西,你可以在你的小程序中使用轴作为 web 服务堆栈,或者包含一个轻量级的 REST 库,比如 Jersey。但是这些解决方案迫使您使用其他服务器组件而不是 Servlet。

这篇文章将帮助您:

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

希望这有帮助。

于 2012-08-08T17:13:31.320 回答
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);

就是这样。这只是一个简单的例子,但我希望你能从中有所收获。

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

于 2012-08-14T22:40:58.423 回答
0

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

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

希望这对您有所帮助。

于 2012-08-08T07:25:06.973 回答