📄 container.java
字号:
/* * Title: Container * Description: * * This software is published under the terms of the OpenSymphony Software * License version 1.1, of which a copy has been included with this * distribution in the LICENSE.txt file. */package com.opensymphony.module.sitemesh.util;import java.util.HashMap;import java.util.Iterator;import java.util.Map;/** * Utility for determining the Servlet Container the application is running in. * Currently supported containers: Tomcat, Resin, Orion, OC4J, WebLogic, HPAS, JRun, * Websphere. * * <h3>Usage:</h3> * * <code>if (Container.get() == Container.TOMCAT) { .... }</code> * * @author <a href="mailto:joe@truemesh.com">Joe Walnes</a> * @version $Revision: 1.2 $ */public final class Container { public static final int UNKNOWN = 0; public static final int TOMCAT = 1; public static final int RESIN = 2; public static final int ORION = 3; // Orion or OC4J public static final int WEBLOGIC = 4; public static final int HPAS = 5; public static final int JRUN = 6; public static final int WEBSPHERE = 7; private static int result = -1; /** * A map containing classes that can be searched for, * and which container they are typically found in. */ private static Map classMappings = null; static { // initialize the classes that can be searched for classMappings = new HashMap(6); classMappings.put("org.apache.jasper.runtime.JspFactoryImpl", new Integer(TOMCAT)); classMappings.put("com.caucho.jsp.JspServlet", new Integer(RESIN)); classMappings.put("com.evermind.server.http.JSPServlet", new Integer(ORION)); classMappings.put("weblogic.servlet.JSPServlet", new Integer(WEBLOGIC)); classMappings.put("com.hp.mwlabs.j2ee.containers.servlet.jsp.JspServlet", new Integer(HPAS)); classMappings.put("jrun.servlet.WebApplicationService", new Integer(JRUN)); classMappings.put("com.ibm.ws.webcontainer.jsp.servlet.JspServlet", new Integer(WEBSPHERE)); } /** Get the current container. */ public static int get() { if (result == -1) { final String classMatch = searchForClosestClass(classMappings); if (classMatch == null) { result = UNKNOWN; } else { result = ((Integer) classMappings.get(classMatch)).intValue(); } } return result; } /** * Walk up the classloader hierachy and attempt to find a class in the classMappings Map * that can be loaded. * * @return Name of the match class, or null if not found. */ private static String searchForClosestClass(Map classMappings) { // get closest classloader ClassLoader loader = Container.class.getClassLoader(); // iterate up through the classloader hierachy (through parents), until no more left. while (loader != null) { for (Iterator iterator = classMappings.keySet().iterator(); iterator.hasNext();) { String className = (String) iterator.next(); try { // attempt to load current classname with current classloader loader.loadClass(className); // if no exception has been thrown, we're in luck. return className; } catch (ClassNotFoundException e) { // no problem... we'll keep trying... } } loader = loader.getParent(); } // couldn't find anything return null; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -