在java servlet的init中唯一标识服务器的好方法是什么

时间:2012-07-31 15:36:05

标签: java jsp servlets websphere

我有一个java Web应用程序,它运行在许多服务器上。此应用程序中的某些servlet在启动时加载以预加载某些数据。用于加载此数据的协议将根据部署应用程序的服务器而更改。 (要加载的文件的路径发生变化,安全性也有差异,因此获取某些文件比其他文件更复杂)。有没有办法可以在java servlet的init函数中唯一地标识我的应用程序所在的服务器/机器?我原来正在使用HttpServletRequest.getServerName(),这已经足够了,但它在init中不可用。我知道延迟初始化,所以不要告诉我这样做,我试图避免这种情况,因为这些文件的加载时间很重要。如果我能找到完美的机器名称,但我无法弄清楚如何从api中取出它。我只需要一种从init中唯一标识机器的方法。

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

我不是让我的应用程序依赖于(硬编码的)IP集合,而是使用绑定到JNDI的简单String属性来标识每个服务器。

硬编码IP /主机名通常不是一个好主意。基础架构的更改可能在您部署应用程序后立即发生:)

另一方面,JNDI是获取appserver资源的标准方法。将资源(字符串属性)绑定到JNDI可以在WAS管理控制台中完成,从JNDI获取属性值很容易。 IBM甚至还提到了published a tutorial

答案 1 :(得分:1)

也许一种方法是使用以下方法检查主机的名称:

java.util.InetAddress.getLocalHost().getHostName()

答案 2 :(得分:1)

我有一个与此类似的要求,我们使用了系统属性。基本上,您使用-D参数在服务器的启动命令中定义属性:

-DserverId=serverA

然后在您的servlet中,您可以使用以下命令访问它:

System.getProperty("serverId")

您只需为每个服务器启动提供不同的ID。

希望这有帮助。