我已经放弃了我早先的尝试,即使用户和网页已经表明可以直接与数据库进行通信。我现在试图让我的applet传递在文本字段中输入的信息(字符串和布尔格式)或由复选框指示,并将其提供给servlet,然后servlet将其适当地存储在数据库中。我已经建立了applet前端 - GUI - 并且还构建了servlet - 数据库连接。唯一的问题是两者之间的联系,applet和servlet。如何将String数据从applet传递到servlet?
谢谢, 约瑟夫G。
答案 0 :(得分:2)
首先,您必须承认,您只能与下载applet的服务器进行通信,包括端口号,除非您想要处理权限,applet签名和所有malarky。这也不仅仅是一个Applet限制,同样适用于Flash和JavaScript(尽管在JavaScript的情况下有一些技巧可以解决它)。
在Applet上使用“getCodeBase()”或“getDocumentBase()”方法将获得一个URL,您可以从中获取构建新URL所需的组件部分,以便您调用servlet。
因此,必须从托管servlet的同一服务器提供Applet。
e.g。如果您的Applet位于以下页面中:
http://www.example.com/myapplet.html
...这意味着您可以调用任何以
开头的网址......相对容易。
以下是一个粗略的,未经测试的示例,展示了如何调用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 not shown):
String queryString = "inputa=" + view.getInputA() + "&inputb=" + view.getInputB();
并将其附加到您的网址:
URL servletURL = new URL(codeBase.getProtocol(), codeBase.getHost(), codeBase.getPort(), "/myServlet?" + queryString);
但是,现在建立某种字符串并将其流式传输到servlet似乎相当普遍。
推荐的格式是JSON,因为它是半结构化的,同时易于阅读,并且有很多(de)序列化器可以在你的Applet和servlet中运行。这意味着您可以拥有一个很好的数据对象模型,您可以在Applet和Servlet之间共享。构建复杂输入的查询字符串可能是一个令人费解的问题。
同样,您实际上可以使用Java序列化和流二进制文件到Servlet,然后使用Java序列化来创建适当的Java对象。但是,如果你坚持使用类似JSON的东西,那就意味着你的servlet更容易重复使用,因为Java序列化从未在Java之外实现(我知道)。
答案 1 :(得分:1)
嗯,我想applet和servlet在两个独立的Java进程中运行。在这种情况下,您将不得不使用一些远程技术,例如对localhost的http调用。事实上,这就是servlet主要用于和实现的目的:接受和处理http请求。