Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Http 在servlet初始化期间获取服务器名称_Http_Servlets - Fatal编程技术网

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

Http 在servlet初始化期间获取服务器名称,http,servlets,Http,Servlets,我知道请求对象有一个获取服务器名称的函数。(即HttpServletRequest.getServerName()) 如果我在servlet的初始化中需要相同的功能呢?我该怎么做?我认为这是不可能的。主机可以有多个名称。哪一个应该退回?主机甚至可能不知道DNS中配置的所有名称。此信息基于请求,而不是严格基于应用程序。它可以根据请求进行更改。在servlet初始化过程中,您手头只有实例,而实例又提供了如下方法。您可以利用它访问应用程序范围的设置 因此,最好是在web.xml <context

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


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

我认为这是不可能的。主机可以有多个名称。哪一个应该退回?主机甚至可能不知道DNS中配置的所有名称。

此信息基于请求,而不是严格基于应用程序。它可以根据请求进行更改。在servlet初始化过程中,您手头只有实例,而实例又提供了如下方法。您可以利用它访问应用程序范围的设置

因此,最好是在
web.xml

<context-param>
    <param-name>serverName</param-name>
    <param-value>foo</param-value>
<context-param>
<display-name>foo</display-name>
另一个(不推荐)选择是在
web.xml

<context-param>
    <param-name>serverName</param-name>
    <param-value>foo</param-value>
<context-param>
<display-name>foo</display-name>

如果出于某种原因,您不想使用BalusC的答案,并且您不需要立即使用该名称,那么您可以懒散地使用它。前几天,我以这种方式实现了一个类似的场景:

private volatile boolean initialized;

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

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

InetAddress.getLocalHost().getHostName()

如果调用java.net.InetAddress.getLocalHost().getCanonicalHostName()获取服务器名,是否存在任何问题/问题?是的,当您有主机别名时。例如,您的应用程序可能在
http://www.google.com/
使用
getCanonicalHostName()
时可能会给您
http://nuq05s02-in-f18.1e100.net/
我认为询问者希望从HttpServletRequest.getServerName()中获得与一般HttpServlet相同的值。有返回名称的标准行为。HttpServletRequest不包含服务器名称,因为web浏览器会发送一个服务器名称。在servlet初始化时,没有从中读取服务器名称的请求。