ruta qué los integran dominio directorio contextos configurar archivo aplicativos configuration tomcat symlink

configuration - qué - Configurar enlaces simbólicos para un solo directorio en Tomcat



directorio de tomcat (6)

Tengo un directorio al que un proceso carga algunos archivos .pdf . Este proceso está fuera de mi control.

Necesito hacer esos archivos disponibles a través del sitio web usando Tomcat.

Tengo un directorio /var/lib/tomcat5/webapps/test1 disponible para la web y puedo ver los archivos en él con un navegador.

Entonces, creé un enlace simbólico apuntando al directorio con los archivos .pdf : /var/lib/tomcat5/webapps/test1/files/ , pero no puedo ver nada en ese directorio.

¿Cómo puedo habilitar los enlaces simbólicos solo en el directorio test1 ? No quiero habilitar enlaces simbólicos en todas partes, solo para que el directorio con archivos .pdf esté disponible para la web.




Hay 4 lugares donde el contexto puede vivir.

  1. tomcatdir / conf / server.xml
  2. tomcatdir / conf / context.xml
  3. tomcatdir / conf / Catalina / localhost / appname.xml
  4. tomcatdir / webapps / appname / META-INF / context.xml

En el caso de tomcat 8, el atributo allowlinking debe especificarse no en Contexto sino en la etiqueta Resources. Mi tomcatdir / conf / context.xml se parece a esto

<Context> <WatchedResource>WEB-INF/web.xml</WatchedResource> <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource> <Resources allowLinking="true" cachingAllowed="true" cacheMaxSize="100000" /> </Context>

Esta solución funciona bien para mí ahora. Pero quiero compartir también el error que había cometido antes de llegar a esta solución.

Definí Recursos en tomcatdir / conf / server.xml y en tomcatdir / conf / context.xml. Y allowLinking = "true" se configuró solo en tomcatdir / conf / server.xml.

Lo que encontré fue que si no especifica allowLinking, es igual a configurarlo en falso. Así que eliminé la etiqueta Resources de server.xml y la dejé solo tomcatdir / conf / context.xml con el atributo allowLinking = "true" en ella.


Hay algunos problemas con la solución de crear un META-INF/context.xml que contenga <Context path="/myapp" allowLinking="true">

El mayor problema es que si existe un conf/context.xml , el allowLinking en el <Context> prevalece sobre un <Context> en un META-INF/context.xml . Y si el en conf/context.xml no define explícitamente allowLinking , eso es lo mismo que decir allowLinking="false" . (ver mi respuesta a una pregunta de precedencia de contexto)

Para asegurarse de que su aplicación permita el enlace, debe decir <Context override="true" allowLinking="true" ...> .

Otro problema es que la path="/myapp" se ignora en un META-INF/context.xml . Para evitar confusiones, es mejor dejarlo fuera. La única path tiempo en un <Context> tiene algún efecto en el server.xml , y los documentos oficiales de Tomcat recomiendan no poner <Context> s en un server.xml .

Finalmente, en lugar de un myapp/META-INF/context.xml , recomiendo usar un archivo conf/Catalina/localhost/myapp.xml . Esta técnica significa que puede mantener limpio el contenido de su META-INF , que es el agallas de su aplicación web. No me gusta arriesgarme a perder el control en las entrañas de mi aplicación web. :-)


Lo hice de esta otra manera. Edito este otro archivo de configuración: apache-tomcat-7.0.33 / conf / server.xml En la etiqueta del Host agregué:

<Context path="/data" docBase="C:/datos" debug="0" reloadable="true" crossContext="false"/>

Entonces, puedes acceder a través de: http://localhost/data


Sí, sé que es una vieja pregunta, pero encontré una nueva solución, usando mount con la opción --bind en lugar de un enlace simbólico, y tomcat no necesita ninguna reconfiguración:

cd / var / lib / tomcat5 / webapps / test1 /

archivos mkdir

mount --bind / path / to / actual / upload / directory / archivos de archivos