2009-11-20 117 views
2

我的聽衆是填充緩存(陶土),如果出現錯誤,在應用程序啓動,的ExceptionInInitializerError異常。我想獲取服務器名稱(如HttpServletRequest - getServerName())以知道發生了什麼。獲取服務器名稱的ContextLoaderListener

我該如何獲得這些信息?

import javax.servlet.ServletContextEvent; 

import net.f.core.service.util.CacheUtil; 

import org.apache.log4j.Logger; 
import org.springframework.web.context.ContextLoaderListener; 

/** 
* Application Lifecycle Listener implementation class OnContextLoadListener 
* 
*/ 
public class OnContextLoadListener extends ContextLoaderListener { 

private static final Logger log = Logger 
     .getLogger(OnContextLoadListener.class); 

@Override 
public void contextDestroyed(
     @SuppressWarnings("unused") ServletContextEvent sce) { 
    // nothing here 
} 

@Override 
public void contextInitialized(
     @SuppressWarnings("unused") ServletContextEvent sce) { 

    try { 
     CacheUtil.getInstance(); 
    } catch (ExceptionInInitializerError e) { 
     log.error("Problem with application start!", e); 
     // notify me 
    } 
} 
+1

我很好奇,爲什麼你要擴展Spring的'ContextLoaderListener',然後超越其方法。你留下的只是一個沒有Spring行爲的簡單的'ServletContextListener'。 – skaffman 2009-11-20 10:22:11

回答

5

服務器主機名是請求的一部分,因爲它取決於使用什麼URL的客戶端將達到您的主機。

如果你有興趣在本地主機名,你可以嘗試:

String hostname = InetAddress.getLocalHost().getHostName(); 
1

HttpServletRequest.getServerName()

返回服務器來 主機名,其發送請求。

它不是服務器本身的屬性,它是請求的屬性。在ContextLoaderListener的背景之外沒有任何意義。

你實際上在找什麼信息?

0

簡單:

import javax.servlet.http.HttpServletRequest; 
import org.springframework.web.context.request.RequestContextHolder; 
import org.springframework.web.context.request.ServletRequestAttributes; 
.... 

ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); 
HttpServletRequest req = sra.getRequest(); 
String serverName = req.getServerName();