我有一个Java Web应用程序,需要知道连接到它的客户端的计算机名称。我的第一个想法是通过JavaScript获取它并用它填充隐藏的表单字段,但经过一些挖掘后,似乎JS无法访问该信息。
然后我尝试使用applet并通过JavaScript访问applet方法。这似乎适用于Firefox,但较新的Chrome版本不运行applet。
然后我考虑切换到Java Webstart应用程序,据我所知,该应用程序应该可以在Chrome下运行,但在这种情况下,由于Webstart应用程序在浏览器之外运行,因此JavaScript无法访问其方法。
然后我尝试将主机名保存在环境TEMP目录中,该目录在Firefox + Linux + Java7中有效,但在Firefox + Windows + Java8中没有:applet只是不运行,而且,我还没有'找到了一种方法来访问定义的TEMP目录并用JavaScript读取文件。
在这一点上,我没有想法,并希望得到你们的一些意见。有关如何实现这一目标的任何提示?我错过了任何明显的解决方案吗?
请注意我需要计算机定义的主机名,而不是计算机的IP通过DNS解析的内容。
感谢。
答案 0 :(得分:2)
您的Javawebstartet应用程序可以托管Websocket侦听器。所以你可以从javascript通过Websocket访问这个应用程序。仅适用于http,而不适用于https
在JavaSide上使用http://java-websocket.org/
的websocket实现在Javascript中我使用https://code.google.com/p/jquery-websocket/ 你也可以在那里找到例子。 websocket通信是异步的。使用响应的回调方法创建WS
var ws = $.websocket("ws://127.0.0.1:" + lport + "/", {
events: {
say: function (e) {
//showMsg(e.data);
}
}
});
并使用
调用服务器ws.send(0, jsonData)
答案 1 :(得分:1)
您无法使用javascript获取计算机名称。 Javascript无权访问计算机名称作为安全原因
答案 2 :(得分:0)
如果您有ip添加,您可以这样做:
InetAddress inetAddress =InetAddress.getByName("127.64.84.2");//get the host Inet using ip
System.out.println ("Host Name: "+ inetAddress.getHostName());//display the host
答案 3 :(得分:0)
尝试过servlet?
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
final String hostname = request.getRemoteHost(); // hostname
System.out.println("hostname"+hostname);
String remoteMachineName = null;
String remoteMachineAddress = request.getRemoteAddr();
System.out.println("remoteMachineAddress: " + remoteMachineAddress);
try {
InetAddress inetAddress = InetAddress.getByName(remoteMachineAddress);
remoteMachineName = inetAddress.getHostName();
System.out.println("remoteMachineName: " + remoteMachineName);
}
} catch (UnknownHostException e) {
}
System.out.println("remoteMachineName: " + remoteMachineName);
}
答案 4 :(得分:0)
根据文档
,您可以使用不解析DNS主机名的InetAddress.getLocalHost().getHostName()