Java 将数据从servlet发送到applet:如何实现这一点?

Java 将数据从servlet发送到applet:如何实现这一点?,java,jakarta-ee,servlets,applet,Java,Jakarta Ee,Servlets,Applet,我想将sendHashMap对象发送给请求它的小程序。servlet具有HashMap对象。我有办法做到这一点吗 Applet ------requests HashMap object---->Servlet listens to this request | |

我想将send
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                                                                
Applet-----请求HashMap对象---->Servlet侦听此请求
|
|
Servlet搜索该HashMap对象
|
|
\ /

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

< P>可以简单地序列化对象并将其直接写入HTTPSServices响应,编写字节流。

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


希望这对您有所帮助。

如果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将数据写回客户机

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

这篇文章将帮助你:

  • 要编写servlet,请执行以下操作:
  • 要编写您的客户端:
它们都用于从JSON格式解析/序列化对象


希望有帮助。

我将利用一些外部库来回答您的问题:和

因此,您的Servlet中已经有HashMap,并希望将其发送到小程序:

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());
Map myMap=newhashmap();//或者别的什么
Gson Gson=new GsonBuilder().create();
字符串jsonString=gson.toJson(myMap);
IOUtils.write(jsonString,resp.getOutputStream());//其中'resp'是您的HttpServletResponse
IOUtils.closequiely(resp.getOutputStream());
要在小程序中接收,请执行以下操作:

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);
String jsonString=IOUtils.toString(conn.getInputStream());//其中“conn”是HttpURLConnection
IOUtils.closequilly(connection.getInputStream());
Gson Gson=new GsonBuilder().create();
//当涉及泛型时,需要TypeToken
Type typeOfHashMap=new-TypeToken(){}.getType();
Map myMap=gson.fromJson(jsonString,typeOfHashMap);
就这样。这只是一个简单的例子,但我希望你能从中有所收获


当然,您可以手工操作,而不是使用外部库,但这种方法要简单得多。

绝对不建议使用Java序列化。它将您的服务紧密地耦合到一个平台,并破坏了可移植性。我认为json或xml是一种使用元数据序列化数据的方式。是的,但您明确提到它是将其转换为json/xml的一种替代(“或”)方法。您能为这方面提供一些教程吗?到现在为止我还没能做到这一点。或者只需在SuhailGupta上详细说明你的答案。尝试使用GoogleGSON——HashMap是否包含一些特定的对象,或者类似于HashMap?我必须将数据从servlet发送到applet。不是从小程序到servlet@Suhail,该URLConnection是双向的。我不知道如何实现这段代码。还要解释什么是
resp.getOutputStream()
。它的回报是什么?对于
connection.getInputStream()
也一样。我现在所做的是。红色标记是对applet函数的调用,我将您的第二个代码片段放在这里。由于您的applet已经调用了Servlet,因此您有一个输入流和一个输出流可用于两者之间的通信。您需要做的是使用上述流来发送和接收数据。记住:您在Servlet中写入输出流的内容是通过小程序中的输入流接收的。我认为您不需要(或者可以)从Servlet调用Applet。在连接到servlet之后,您必须在Applet的代码中包含我答案的第二部分;并删除servlet中的
new PollForm().func()
它做什么?它保存HashMap的类型,以便您可以将其传递给Gson,Gson反过来使用它将JSON字符串转换为给定的类型。POJO(没有泛型)不需要它;您可以使用
gson.fromJson(jsonString,MyPojo.class)
。您所说的哈希映射类型是什么意思?它怎么知道我使用了HashMap?请解释一下。我一直在努力理解这一点