确定给定的操作系统名称是基于服务器还是基于桌面

时间:2018-02-23 07:34:41

标签: java server operating-system

我的基于java的应用程序安装在许多用户的计算机上。在第一次运行期间,它会自动将用户的操作系统名称发送到我的服务器并存储在数据库中。我使用System.getProperty("os.name");来获取该应用程序中用户的操作系统名称。是否可以确定这是基于服务器的计算机(Windows Server 2012 Standard)还是台式计算机(Ubuntu,Windows 7)?

有没有办法用Java确定服务器和台式计算机?

2 个答案:

答案 0 :(得分:3)

  

我在基于Java的Web应用程序中使用System.getProperty("os.name");来获取用户的操作系统名称。

它可以获取运行Web应用程序的服务器的操作系统名称,而不是用户的计算机。

您可以尝试从浏览器的User-Agent标头中提取操作系统信息,但这本质上是一个容易出错的过程。此外,Microsoft Windows是唯一一个具有明确服务器/桌面区别的操作系统; Linux和macOS没有任何区别。

答案 1 :(得分:0)

  

有没有办法用Java确定服务器和台式计算机?

(假设您可以获取相关机器的" os.name"属性的值。)

答案是没有可靠的方法。

首先,服务器和台式计算机之间没有硬性区别。我可以安装Linux的无头服务器,只需安装一些软件包即可将其转换为桌面Linux。操作系统不会改变,分发不会改变,而且#34; os.name"中的字符串也不会改变。财产不会改变。

你能做的最好的事情是找出" os.name"的常见模式。各种常见 Java + OS平台上的字符串。但充其量只会是脆弱的。