在Web应用程序中获取客户端计算机名称

时间:2015-11-27 15:43:24

标签: javascript java firefox applet client

我有一个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解析的内容。

感谢。

5 个答案:

答案 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()