我非常感谢任何有关如何在应用程序之间进行通信以帮助我解决问题的知识的人。我花了很多时间试图解决这个问题 我目前正在研究一种电子成绩簿,其中包括允许用户在Java桌面应用程序中存储学生和成绩。我希望能够通过流将这些信息(作业名称,学生成绩等)通过流发送到Ruby on Rails SQLite3数据库。目的是让学生可以从Ruby on Rails应用程序访问与其成绩相关的报告。我希望尽可能简单地建立连接。 Java和Rails应用程序大部分都是完整的(尽管Rails SQLite3数据库需要规范化)。
我正在考虑使用HTTP POST请求(例如下面我正在处理的请求)将信息从Java发送到Rails数据库。我的问题如下:
由于Web应用程序CURRENTLY未连接到服务器,而是在虚拟机上运行,因此可以生成一个http请求,出于演示/测试目的,可以从Java连接到启用的Rails应用程序同一台电脑?我的想法是希望我可以在我自己的计算机上运行Java和Ruby on Rails进行测试和演示,然后最终使用相同的http请求或修改它来连接到服务器(当我最终部署基于Web的应用程序时到服务器)。如果可以做到那么它将如何完成。并且,如果无法完成,那么存在哪种替代方案。
import java.io.*;
import java.net.*;
public class HTTPPostRequestWithSocket {
public void sendRequest() {
try {
String params = URLEncoder.encode("param1", "UTF-8") + "="
+ URLEncoder.encode("value1", "UTF-8");
params += "&" + URLEncoder.encode("param2", "UTF-8") + "="
+ URLEncoder.encode("value2", "UTF-8");
String hostname = "nameofthewebsite.com";
int port = 80;
InetAddress addr = InetAddress.getByName(hostname);
Socket socket = new Socket(addr, port);
String path = "/nameofapp";
// Send headers
BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(
socket.getOutputStream(), "UTF8"));
wr.write("POST " + path + " HTTP/1.0rn");
wr.write("Content-Length: " + params.length() + "rn");
wr.write("Content-Type: application/x-www-form-urlencodedrn");
wr.write("rn");
// Send parameters
wr.write(params);
wr.flush();
// Get response
BufferedReader rd = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
String line;
while ((line = rd.readLine()) != null) {
System.out.println(line);
}
wr.close();
rd.close();
socket.close(); // Should this be closed at this point?
} catch (Exception e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:0)
重新"在虚拟机上运行的Web应用程序是否可以发出一个http请求,出于演示/测试目的,可以从Java连接到同一台计算机上的Rails应用程序?"
在VM配置中正确配置网络后,guest虚拟机系统看起来像普通主机(具有自己唯一的MAC和IP地址)到网络上的任何其他主机。是的,这是可能的。