Obtener el directorio de instalación de Tomcat usando Java

Quiero obtener el directorio de instalación de tomcat en mi computadora usando java. Intenté usar:

System.getProperty("catalina.base");

y

System.getProperty("catalina.home");

Pero ambos métodos regresan null como la respuesta lo probé con System.getProperty("java.home"); y devuelve correctamente la ruta de Java. ¿Alguna idea de cuál es el problema? Gracias

preguntado el 22 de mayo de 12 a las 19:05

¿Está ejecutando bajo un SecurityManager? -

@ChristopherSchultz: ah, sí. Configuré conf/tomcat-users.xml. ¿Es ese el problema? ¿Es que no permite llamadas a Sistema? -

catalina.base y catalina.home debe establecerse como una variable de entorno antes de poder acceder a ellos. -

@twall: entonces, si no están configurados, ¿no hay forma de obtener el directorio de instalación de Tomcat? -

@mkab Si está bajo un SecurityManager (no solo usa tomcat-users.xml, que es solo autenticación de usuario), entonces la JVM prohíbe el acceso a ciertas cosas. IIRC, obtendría una SecurityException al intentar acceder a una propiedad del sistema si eso no está permitido en lugar de NULL. -

3 Respuestas

Intente instalar este JSP y pase varios valores para el parámetro "propiedad":

<%
  String propertyName = request.getParameter("property");
  Object propertyValue;
  String typeString;
  if(null == propertyName)
    propertyValue = null;
  else
    propertyValue = System.getProperty(propertyName);

  if(null == propertyValue)
    typeString = "null";
  else
    typeString = propertyValue.getClass().getName();
%>
The system property <code><%= propertyName %></code> has the value:
<code><%= propertyValue %></code> (<%= typeString %>).

Tal vez pueda encontrar un patrón en el que los valores de propiedad devuelvan un valor nulo.

contestado el 25 de mayo de 12 a las 18:05

Gracias por el código. Sin embargo, no sé mucho sobre jsp. nunca lo he usado Sin embargo, traté de probar el código y da valores nulos en todas las propiedades del sistema que probé. Así que cambié un poco el código. Eliminé request.getParameter y todo lo que tiene conexión con él y usé System.getProperty directamente. Bueno, me envió valores correctos para ambos. catalina.home y catalina.base. Es curioso por qué devuelve valores nulos en java. Estoy usando eclipse por cierto. Podría ser la causa. - mkab

¡Oh! Si está utilizando Eclipse, entonces ese es probablemente el problema: Eclipse inicia Tomcat de una manera diferente a los scripts estándar que Tomcat incluye con sus distribuciones. Es posible que estas variables de entorno no estén configuradas en absoluto desde Eclipse. Si inicia Tomcat desde los scripts (proporcionados), ¿obtiene los valores que espera? - cristobal schultz

No, eso no es lo que quise decir. No estoy usando Eclipse para iniciar Tomcat. Estoy usando eclipse solo para programar en java. Leí que eclipse viene con su propio jdk incorporado y no usa el del sistema... así que pensé que ese podría ser el problema. De todos modos, lanzo Tomcat normalmente (startup.sh en la carpeta bin). Intenté compilar el archivo java usando la terminal javac luego java pero todavía obtengo valores nulos. - mkab

Lo único en lo que puedo pensar es que su código "java" no se está ejecutando dentro de Tomcat aunque crea que sí. No sé cuál es su configuración, pero es fácil confundirse con todas esas partes móviles. Tal vez puedas publicar tu código de servlet y yo pueda echar un vistazo. - cristobal schultz

¿Qué quiere decir con mi código de servlet? En realidad, estoy escribiendo un proyecto para mi escuela, una GUI en Java que cambiaría algunos archivos en el $CATALINA_HOME/webapps/mondrian/WEB-INF directamente. Hasta ahora todo bien, el usuario simplemente ingresa su directorio de instalación de Tomcat en un JTextField y continúo desde allí. Ahora lo que quiero hacer es hacer que detecte este $CATALINA_HOME directamente. - mkab

También encontré el mismo error que tú. pero luego me di cuenta de que el servidor tomcat no se estaba ejecutando. Después de iniciar el servidor, todavía no pude obtener la ruta de Tomcat.
Luego me di cuenta de que estaba tratando de obtener la ruta del método principal en un proyecto JSF mientras tomcat aún se estaba ejecutando.
Así que finalmente obtuve la ruta de Tomcat usando: System.out.println(System.getProperty("catalina.base")); en un parche de @PostConstruct método de uno de mis @ViewScoped frijoles en un JSF proyecto. Y se mostró con éxito C:\Documents and Settings\S!LENT W@RRIOR\Application Data\NetBeans\7.2.1\apache-tomcat-7.0.27.0_base en la consola en NetBeans.

Entonces, para obtener el directorio de instalación de Tomcat, se deben tener en cuenta los siguientes puntos:

  • El servidor Tomcat se está ejecutando
  • No estás tratando de obtener el camino de main Método

espero que esto ayude

Respondido 08 Feb 13, 04:02

estamos usando pepino para pruebas y en casos de pepino, estamos accediendo al método individual del proyecto. en el proyecto, estamos leyendo la configuración para xml y la ubicación está en la carpeta de configuración de Apache tomcat. Ahora, cuando ejecuto el proyecto, System.out.println (Sistema.getProperty("catalina.base")); proporciona la ruta adecuada, sin embargo, cuando llamo al método del proyecto desde pepino, entonces es devolviendo nulo

respondido 23 nov., 15:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.