`
gaohuier
  • 浏览: 38275 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

在你的应用中判断所在的应用服务器类型

阅读更多
         在不同的应用服务器中,所用的相对路径有所不同,只有区分开所用的应用服务器,才能正确地应用的你路径。ServerDetector.java很好的解决了这个问题。
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class ServerDetector {

	public static final String GERONIMO_CLASS =
		"/org/apache/geronimo/system/main/Daemon.class";

	public static final String JBOSS_CLASS = "/org/jboss/Main.class";

	public static final String JETTY_CLASS = "/org/mortbay/jetty/Server.class";

	public static final String JONAS_CLASS =
		"/org/objectweb/jonas/server/Server.class";

	public static final String OC4J_CLASS =
		"/oracle/jsp/oc4jutil/Oc4jUtil.class";

	public static final String ORION_CLASS =
		"/com/evermind/server/ApplicationServer.class";

	public static final String PRAMATI_CLASS = "/com/pramati/Server.class";

	public static final String RESIN_CLASS =
		"/com/caucho/server/resin/Resin.class";

	public static final String REXIP_CLASS = "/com/tcc/Main.class";

	public static final String SUN7_CLASS =
		"/com/iplanet/ias/tools/cli/IasAdminMain.class";

	public static final String SUN8_CLASS =
		"/com/sun/enterprise/cli/framework/CLIMain.class";

	public static final String TOMCAT_CLASS =
		"/org/apache/catalina/startup/Bootstrap.class";

	public static final String WEBLOGIC_CLASS = "/weblogic/Server.class";

	public static final String WEBSPHERE_CLASS =
		"/com/ibm/websphere/product/VersionInfo.class";

	public static String getServerId() {
		ServerDetector sd = _instance;

		if (sd._serverId == null) {
			if (ServerDetector.isGeronimo()) {
				sd._serverId = "geronimo";
			}
			else if (ServerDetector.isJBoss()) {
				sd._serverId = "jboss";
			}
			else if (ServerDetector.isJOnAS()) {
				sd._serverId = "jonas";
			}
			else if (ServerDetector.isOC4J()) {
				sd._serverId = "oc4j";
			}
			else if (ServerDetector.isOrion()) {
				sd._serverId = "orion";
			}
			else if (ServerDetector.isResin()) {
				sd._serverId = "resin";
			}
			else if (ServerDetector.isWebLogic()) {
				sd._serverId = "weblogic";
			}
			else if (ServerDetector.isWebSphere()) {
				sd._serverId = "websphere";
			}

			if (ServerDetector.isJetty()) {
				if (sd._serverId == null) {
					sd._serverId = "jetty";
				}
				else {
					sd._serverId += "-jetty";
				}
			}
			else if (ServerDetector.isTomcat()) {
				if (sd._serverId == null) {
					sd._serverId = "tomcat";
				}
				else {
					sd._serverId += "-tomcat";
				}
			}

			if (_log.isInfoEnabled()) {
				_log.info("Detected server " + sd._serverId);
			}

			if (sd._serverId == null) {
				throw new RuntimeException("Server is not supported");
			}
		}

		return sd._serverId;
	}

	public static boolean isGeronimo() {
		ServerDetector sd = _instance;

		if (sd._geronimo == null) {
			Class c = sd.getClass();

			if (c.getResource(GERONIMO_CLASS) != null) {
				sd._geronimo = Boolean.TRUE;
			}
			else {
				sd._geronimo = Boolean.FALSE;
			}
		}

		return sd._geronimo.booleanValue();
	}

	public static boolean isJBoss() {
		ServerDetector sd = _instance;

		if (sd._jBoss == null) {
			Class c = sd.getClass();

			if (c.getResource(JBOSS_CLASS) != null) {
				sd._jBoss = Boolean.TRUE;
			}
			else {
				sd._jBoss = Boolean.FALSE;
			}
		}

		return sd._jBoss.booleanValue();
	}

	public static boolean isJetty() {
		ServerDetector sd = _instance;

		if (sd._jetty == null) {
			Class c = sd.getClass();

			if (c.getResource(JETTY_CLASS) != null) {
				sd._jetty = Boolean.TRUE;
			}
			else {
				sd._jetty = Boolean.FALSE;
			}
		}

		return sd._jetty.booleanValue();
	}

	public static boolean isJOnAS() {
		ServerDetector sd = _instance;

		if (sd._jonas == null) {
			Class c = sd.getClass();

			if (c.getResource(JONAS_CLASS) != null) {
				sd._jonas = Boolean.TRUE;
			}
			else {
				sd._jonas = Boolean.FALSE;
			}
		}

		return sd._jonas.booleanValue();
	}

	public static boolean isOC4J() {
		ServerDetector sd = _instance;

		if (sd._oc4j == null) {
			Class c = sd.getClass();

			if (c.getResource(OC4J_CLASS) != null) {
				sd._oc4j = Boolean.TRUE;
			}
			else {
				sd._oc4j = Boolean.FALSE;
			}
		}

		return sd._oc4j.booleanValue();
	}

	public static boolean isOrion() {
		ServerDetector sd = _instance;

		if (sd._orion == null) {
			Class c = sd.getClass();

			if (c.getResource(ORION_CLASS) != null) {
				sd._orion = Boolean.TRUE;
			}
			else {
				sd._orion = Boolean.FALSE;
			}
		}

		return sd._orion.booleanValue();
	}

	public static boolean isPramati() {
		ServerDetector sd = _instance;

		if (sd._pramati == null) {
			Class c = sd.getClass();

			if (c.getResource(PRAMATI_CLASS) != null) {
				sd._pramati = Boolean.TRUE;
			}
			else {
				sd._pramati = Boolean.FALSE;
			}
		}

		return sd._pramati.booleanValue();
	}

	public static boolean isResin() {
		ServerDetector sd = _instance;

		if (sd._resin == null) {
			Class c = sd.getClass();

			if (c.getResource(RESIN_CLASS) != null) {
				sd._resin = Boolean.TRUE;
			}
			else {
				sd._resin = Boolean.FALSE;
			}
		}

		return sd._resin.booleanValue();
	}

	public static boolean isRexIP() {
		ServerDetector sd = _instance;

		if (sd._rexIP == null) {
			Class c = sd.getClass();

			if (c.getResource(REXIP_CLASS) != null) {
				sd._rexIP = Boolean.TRUE;
			}
			else {
				sd._rexIP = Boolean.FALSE;
			}
		}

		return sd._rexIP.booleanValue();
	}

	public static boolean isSun() {
		if (isSun7() || isSun8()) {
			return true;
		}
		else {
			return false;
		}
	}

	public static boolean isSun7() {
		ServerDetector sd = _instance;

		if (sd._sun7 == null) {
			Class c = sd.getClass();

			if (c.getResource(SUN7_CLASS) != null) {
				sd._sun7 = Boolean.TRUE;
			}
			else {
				sd._sun7 = Boolean.FALSE;
			}
		}

		return sd._sun7.booleanValue();
	}

	public static boolean isSun8() {
		ServerDetector sd = _instance;

		if (sd._sun8 == null) {
			Class c = sd.getClass();

			if (c.getResource(SUN8_CLASS) != null) {
				sd._sun8 = Boolean.TRUE;
			}
			else {
				sd._sun8 = Boolean.FALSE;
			}
		}

		return sd._sun8.booleanValue();
	}

	public static boolean isTomcat() {
		ServerDetector sd = _instance;

		if (sd._tomcat == null) {
			Class c = sd.getClass();

			if (c.getResource(TOMCAT_CLASS) != null) {
				sd._tomcat = Boolean.TRUE;
			}
			else {
				sd._tomcat = Boolean.FALSE;
			}
		}

		return sd._tomcat.booleanValue();
	}

	public static boolean isWebLogic() {
		ServerDetector sd = _instance;

		if (sd._webLogic == null) {
			Class c = sd.getClass();

			if (c.getResource(WEBLOGIC_CLASS) != null) {
				sd._webLogic = Boolean.TRUE;
			}
			else {
				sd._webLogic = Boolean.FALSE;
			}
		}

		return sd._webLogic.booleanValue();
	}

	public static boolean isWebSphere() {
		ServerDetector sd = _instance;

		if (sd._webSphere == null) {
			Class c = sd.getClass();

			if (c.getResource(WEBSPHERE_CLASS) != null) {
				sd._webSphere = Boolean.TRUE;
			}
			else {
				sd._webSphere = Boolean.FALSE;
			}
		}

		return sd._webSphere.booleanValue();
	}

	private ServerDetector() {
	}

	private static Log _log = LogFactory.getLog(ServerDetector.class);

	private static ServerDetector _instance = new ServerDetector();

	private String _serverId;
	private Boolean _geronimo;
	private Boolean _jBoss;
	private Boolean _jetty;
	private Boolean _jonas;
	private Boolean _oc4j;
	private Boolean _orion;
	private Boolean _pramati;
	private Boolean _resin;
	private Boolean _rexIP;
	private Boolean _sun7;
	private Boolean _sun8;
	private Boolean _tomcat;
	private Boolean _webLogic;
	private Boolean _webSphere;

}


比如tomcat与weblogic之下的区别:
if(ServerDetector.isTomcat()){//tomcat server
 path = this.getServletContext().getRealPath("/")+"data\\"+userId+".xls";
}else if(ServerDetector.isWebLogic()){//weblogic server
path = this.getServletContext().getRealPath("/")+"\\data\\"+userId+".xls";
			    }

分享到:
评论
1 楼 likeblood 2008-11-20  
我觉得应该有获得这类数据的meta,如同获得数据库类型的一样

相关推荐

    剖析PeopleSoft应用服务器

    在 PeopleSoft 应用服务器中,第一个被启动的进程是 BBL(Bulletin Board Liaison)进程,该进程读取系统配置文件 PSTUXCFG,并建立共享内存区段 BB(Bulletin Board),有些消息队列和两个信号指示。BB 用来保存...

    服务器常规维修与判断方法

    服务器的常规维修与判断方法是IT领域中必不可少的知识,它涉及到服务器故障的识别、排除以及恢复。服务器相较于普通PC,...在实践中,需要灵活应用理论知识,结合实际情况做出准确判断,以确保服务器系统的稳定运行。

    Android的移动应用与php服务器交互实例源码.rar

    在Android开发中,移动应用与服务器的交互是至关重要的,特别是在构建网络依赖性强的应用时,如社交、电商或在线服务类应用。本实例源码主要展示了Android应用如何使用PHP作为后端服务器进行数据交换。接下来,我们...

    可以直接通过请求判断你iP地址获取你所在城市天气

    标题中的“可以直接通过请求判断你iP地址获取你所在城市天气”指的是利用网络服务接口,通过用户的IP地址来确定用户所在的城市,进而提供该城市的实时天气信息。这种技术基于IP定位,结合天气API来实现。 描述中...

    仿8684 判断用户所在城市--根据IP判断(PHP版)

    8684是一个知名的提供IP地址查询服务的网站,而这个项目则尝试复现其功能,使得开发者可以在自己的应用中集成类似的服务。 首先,我们需要了解基础的IP地址工作原理。IP地址(Internet Protocol Address)是互联网...

    根据ip判断所在城市

    在IT行业中,根据IP地址判断用户所在城市是一项常见的任务,主要应用于地理位置服务、网络分析、个性化推荐等场景。这项技术的基础是IP地址与地理位置之间的映射关系,这通常通过IP库或者API服务来实现。 首先,...

    服务器环境测试包

    测试包能够检查这些组件是否正确安装并配置,确保服务器能为不同类型的应用提供稳定的支持。 2. **FTP上传**:FTP(File Transfer Protocol)是一种用于在网络上传输文件的标准协议。在本场景中,用户需要将压缩包...

    根据IP判断城市 省份 所在市

    在IT行业中,根据IP地址判断用户所在的城市、省份和市区是一项常见的需求,特别是在网站分析、个性化推荐和服务地域定向等方面。ASP.NET是微软公司推出的一种Web应用程序框架,它提供了丰富的功能来构建动态网站和...

    安卓启动退出网络判断相关-android启动页引导页到主界面含有检查应用更新。.rar

    在安卓应用开发中,"启动退出网络判断"是一个重要的环节,尤其在用户首次打开应用或者应用更新后。这个过程涉及到用户界面(UI)的展示、网络连接的状态检测以及应用更新的自动化处理。以下是对这个主题的详细阐述:...

    php编程中用到的服务器参数

    - **应用场景**:当需要在页面中引用自身时非常有用。 - **示例**: ```php echo "当前脚本的文件名为: " . $_SERVER['PHP_SELF']; ``` ##### 2. $_SERVER['SERVER_PROTOCOL'] - **作用**:获取请求页面时通信...

    Radius服务器

    Radius服务器是一种广泛应用于网络认证、授权和计费(AAA)的协议系统,它在IT行业中扮演着关键角色,尤其在大型企业、ISP(互联网服务提供商)和无线网络管理中。WinRadius是一款专为测试和诊断Radius服务器而设计...

    计算机应用基础第六章.doc

    在Windows服务器中,Web服务(IIS)、文件服务器、打印服务器等都是作为“角色”来定义的,这意味着可以根据需要为服务器分配特定的服务或功能,使其专注于执行特定的任务,以优化网络效率和资源管理。

    数据库技术在减速器CAD专家系统中的应用.pdf

    在实际应用中,专家系统结合了面向对象的编程语言、数据环境以及DAO接口技术,利用Microsoft Access创建并操作数据库,用于建立和调用系统知识库,以及保存设计结果。这样的做法实现了数据的读取、计算和存储功能,...

    服务器调试

    然而,在本例中,由于没有提供具体的上下文信息(例如自定义脚本的具体实现方式),很难直接判断配置是否有误。 2. **兼容性问题:** 不同版本的IIS可能对相同的配置有不同的响应。用户提到在本机上的配置是正确的...

    自动判断IP跳转到相应城市

    标题“自动判断IP跳转到相应城市”涉及的是网络服务器技术中的地理位置定位和动态路由功能。这个系统的主要目的是根据用户访问的IP地址自动将其重定向到与其所在城市相对应的特定网页或服务。这一功能在许多网站和...

    路由检测软件-检测本地到服务器的路由节点

    本文将深入探讨路由检测软件的功能、原理及其在检测本地到服务器的路由节点时的应用。 首先,路由检测软件的主要作用是探测数据包从本地设备到目标服务器的完整传输路径。通过发送特定的网络协议数据包(如ICMP的...

    判断系统及时间

    在IT领域,了解如何判断...综上所述,判断系统类型和获取系统时间是IT行业中常见的操作,它涉及到操作系统接口的使用、时间处理的原理以及跨平台编程的技巧。理解和掌握这些知识点对于开发高效、安全的应用至关重要。

    基于PHP的仿8684根据IP判断用户所在城市源码.zip

    【标题】"基于PHP的仿8684根据IP判断用户所在城市源码"是一个用于在Web应用中获取并显示用户地理位置信息的程序。8684是一个知名的在线地图及位置服务网站,此源码旨在模仿其功能,通过用户的IP地址来推测其所在的...

Global site tag (gtag.js) - Google Analytics