繁体   English   中英

将数据从servlet发送到applet:如何实现此目的?

[英]Sending data from a servlet to applet : How can I implement this?

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

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

如果Servlet与小应用程序位于同一服务器中,则可以打开与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用作Web服务堆栈,或包含轻量级的REST库(如Jersey)。 但是这些解决方案迫使您使用其他服务器组件代替Servlet。

这篇文章将帮助您:

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

希望能有所帮助。

我将利用一些外部库来回答您的问题: 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);

就是这样。 这只是一个简单的示例,但我希望您能从中受益。

当然,您可以手动执行此操作,而不是使用外部库,但是这种方法要容易得多。

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

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

希望这对您有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM