gpt4 book ai didi

java - Applet - Servlet 通信

转载 作者:搜寻专家 更新时间:2023-10-30 20:20:51 26 4
gpt4 key购买 nike

我已经放弃了我之前让小程序直接与数据库通信的探索,尽管用户和网页都说这是可能的。我现在正试图让我的小程序传递在文本字段中输入或由复选框指示的信息(字符串和 boolean 格式),并将其提供给 servlet,然后将其适本地存储在数据库中。我已经构建了 applet 前端 - GUI - 以及 servlet - 数据库连接。唯一的问题是两者之间的联系,applet 和 servlet。如何将字符串数据从 applet 传递到 servlet?

谢谢,约瑟夫·G.

最佳答案

首先,您必须承认您只能与下载您的小程序的服务器进行通信,包括端口号,除非您想在权限、小程序签名和所有这些问题上搞砸。这也不仅仅是 Applet 的限制,同样适用于 Flash 和 JavaScript(尽管对于 JavaScript,有一些技巧可以绕过它)。

在您的 Applet 上使用“getCodeBase()”或“getDocumentBase()”方法将为您提供一个 URL,您可以从中获取构建新 URL 所需的组件部分,让您调用一个 servlet。

因此,您的 Applet 必须由托管 servlet 的同一台服务器提供服务。

例如如果您的小程序在以下页面中:

http://www.example.com/myapplet.html

...这意味着您可以调用任何以

开头的 URL

http://www.example.com/

...相对容易。

以下是一个未经测试的粗略示例,展示了如何调用 Servlet。这假设这段代码是从 Applet 实例中调用的。

URL codeBase = getCodeBase();
URL servletURL = new URL(codeBase.getProtocol(), codeBase.getHost(), codeBase.getPort(), "/myServlet");

// assumes protocol is http, could be https
HttpURLConnection conn = (HttpURLConnection)servletURL.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");

PrintWriter out = new PrintWriter(conn.openOutputStream());
out.println("hello world");
out.close();

System.out.println(conn.getResponseCode());

然后在您的 servlet 中,您可以通过覆盖 doPost() 并从请求中读取输入流来获取发送的文本(未显示异常处理,仅读取第一行输入):

public void doPost(HttpServletRequest req, HttpServletResponse res) {

BufferedReader reader = req.getReader();
String line = reader.readLine();
System.out.println("servlet received text: " + line);

}

当然,这只是一种方法。您还可以获取输入并构建这样的查询字符串(未显示 URLEncoding):

String queryString = "inputa=" + view.getInputA() + "&inputb=" + view.getInputB();

并将其附加到您的网址:

URL servletURL = new URL(codeBase.getProtocol(), codeBase.getHost(), codeBase.getPort(), "/myServlet?" + queryString);

然而,如今构建某种字符串并将其流式传输到 servlet 似乎相当普遍。

推荐的格式是 JSON,因为它是半结构化的,同时易于阅读并且周围有很多(反)序列化器,应该可以在您的 Applet 和您的 servlet 中使用。这意味着您可以为您的数据创建一个很好的对象模型,您可以在 Applet 和 Servlet 之间共享该模型。构建复杂输入的查询字符串可能会让人费解。

同样,您实际上可以使用 Java 序列化和流二进制到您的 Servlet,然后 Servlet 使用 Java 序列化来创建适当的 Java 对象。但是,如果您坚持使用 JSON 之类的东西,这将意味着您的 servlet 更易于重用,因为 Java 序列化从未在 Java 之外实现(据我所知)。

关于java - Applet - Servlet 通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6769255/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com