2010-11-04 21 views
6

İstek nesnesinin sunucu adını alması için bir işlevi olduğunu biliyorum. (yani, HttpServletRequest.getServerName())Sunucu adı başlatılırken sunucu adı alınması

Bir sunucu uygulamasının başlatılması içinde aynı işlevselliğe gereksinim duyarsam ne olur? Bunu nasıl yaparım?

+2

Sunucu adını almak için java.net.InetAddress.getLocalHost(). GetCanonicalHostName() yöntemini çağırırsam herhangi bir sorun/sorun var mı? –

+0

evet, barındırıcınız için takma adlarınız olduğunda. Örneğin, uygulamanız 'http: // www.google.com /' altındayken, 'getCanonicalHostName() 'yi kullanırken görülebilir. Http: // nuq05s02-in-f18.1e100.net /' –

cevap

4

Bu bilgi istek tabanlı olup, kesinlikle başvuru tabanlı değildir. Bu istek başına değişebilir. Servlet başlatması sırasında elinizde olan tüm getInitParameter() gibi yöntemleri sunan ServletContext örneğidir. Uygulama geniş ayarlarına erişmek için bunu kullanabilirsiniz.

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

Başka (:

Yani en iyi bahis servlet'in init() yönteminde aşağıdaki gibi bunu elde edebilirsiniz o elle böylece web.xml

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

bir bağlam parametre olarak sunucu adı ayarlamaktır önerilmez) alternatif, görüntü adı olarak görüntülemek için web.xml

<display-name>foo</display-name> 

böylece aşağıdaki gibi ulaşabilmesini sağlamaktadır: Herhangi bir nedenle BalusC cevabını kullanmak istemiyorum ve hemen adını gerekmiyorsa

String serverName = getServletContext().getServletContextName(); 
0

Bence bu mümkün değil. Bir ev sahibi birden çok ada sahip olabilir. Hangisi iade edilmeli? Ve ana bilgisayar, DNS'de yapılandırılmış tüm adlardan bile haberdar olmayabilir.

+0

asker HttpServletRequest.getServerName() ile aynı değeri almak istiyor ama genel bir HttpServlet. İade edilecek isim için standart davranış var. –

+0

Web tarayıcısı bir tane gönderdiği için HttpServletRequest bir sunucu adı içerir. Sunucu uygulamasının başlatılmasında sunucu adını okumak için herhangi bir istek yoktur. – MForster

3

, sen tembel yapabilirsiniz.) (

private volatile boolean initialized; 

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

(çift kontrol birden fazla yolla uygulanabilmektedir yavaş başlatılması için kilitleme See wikipedia.)

0

InetAddress.getLocalHost() GetHostName. Gün benzer bir senaryoyu bu şekilde uygulanan