在servlet初始化期间获取服务器名称

时间:2010-11-04 21:54:35

标签: http servlets

我知道请求对象有一个获取服务器名称的函数。 (即HttpServletRequest.getServerName())

如果我在servlet的初始化中需要相同的功能怎么办?我该怎么做?

4 个答案:

答案 0 :(得分:4)

此信息是基于请求的,而不是严格基于应用程序的。它可以根据要求进行更改。在servlet初始化期间你掌握的就是ServletContext实例,它又提供了像getInitParameter()这样的方法。您可以使用它来访问应用程序范围的设置。

所以最好的办法是在web.xml

中手动设置服务器名称作为上下文参数
<context-param>
    <param-name>serverName</param-name>
    <param-value>foo</param-value>
<context-param>

这样你就可以在servlet的init()方法中获得如下:

String serverName = getServletContext().getInitParameter("serverName");

另一个(不推荐)替代方法是将其设置为web.xml

中的显示名称
<display-name>foo</display-name>

以便您可以按如下方式获取:

String serverName = getServletContext().getServletContextName();

答案 1 :(得分:3)

如果由于某种原因您不想使用BalusC的答案,并且您不需要立即使用该名称,则可以懒惰地进行。前几天我用这种方式实现了类似的场景:

private volatile boolean initialized;

public void doGet(..) {
    if (!initialized) {
       synchronized(this) {
          if (!initialized) {
              initialize(request.getServerName())
          }
       }
    }
}

(延迟初始化的双重检查锁定可以多种方式实现。See wikipedia

答案 2 :(得分:1)

InetAddress.getLocalHost()。的gethostname()

答案 3 :(得分:0)

我认为这是不可能的。主机可以有多个名称。应归还哪一个?并且主机可能甚至不知道在DNS中配置的所有名称。