Configuration 在Tomcat中为单个目录配置符号链接
我有一个目录,进程可以将一些Configuration 在Tomcat中为单个目录配置符号链接,configuration,tomcat,symlink,Configuration,Tomcat,Symlink,我有一个目录,进程可以将一些.pdf文件上载到该目录。这个过程是我无法控制的 我需要使用Tomcat通过网站提供这些文件 我有一个目录/var/lib/tomcat5/webapps/test1可供网络使用,我可以通过浏览器查看其中的文件 因此,我用.pdf文件创建了一个指向目录的符号链接: /var/lib/tomcat5/webapps/test1/files/,但我在该目录中看不到任何内容 如何仅在test1目录中启用符号链接?我不想在任何地方都启用符号链接,只是为了web上可以使用带有.
.pdf
文件上载到该目录。这个过程是我无法控制的
我需要使用Tomcat通过网站提供这些文件
我有一个目录/var/lib/tomcat5/webapps/test1
可供网络使用,我可以通过浏览器查看其中的文件
因此,我用.pdf
文件创建了一个指向目录的符号链接:
/var/lib/tomcat5/webapps/test1/files/
,但我在该目录中看不到任何内容
如何仅在
test1
目录中启用符号链接?我不想在任何地方都启用符号链接,只是为了web上可以使用带有.pdf
文件的目录。在web应用程序的META-INF
目录中创建context.xml文件,其中包含:
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/myapp" allowLinking="true">
</Context>
更多信息:创建包含
最大的问题是,如果存在conf/context.xml
,则
中的allowLinking
优先于META-INF/context.xml中的a
。如果conf/context.xml
中的没有明确定义allowLinking
,这与说allowLinking=“false”
是一样的。(参见上下文优先问题)
为了确保你的应用程序允许链接,你必须说
另一个问题是path=“/myapp”
在META-INF/context.xml
中被忽略。为了避免混淆,最好把它删掉。
中的路径
唯一有效的时间是在server.xml
中,将
放入server.xml
中
最后,我建议使用conf/Catalina/localhost/myapp.xml
文件,而不是myapp/META-INF/context.xml
文件。这项技术意味着你可以保持你的META-INF
的内容干净,这是你的Web应用程序的核心——我不喜欢冒险在我的Web应用程序的核心里捣乱。:-) 我是用另一种方式做的。
我编辑了另一个配置文件:apache-tomcat-7.0.33/conf/server.xml
在主机标签中,我添加了:
<Context path="/data" docBase="C:\datos" debug="0" reloadable="true" crossContext="false"/>
因此,您可以通过以下方式访问:是的,我知道这是一个老问题,但我找到了一个新的解决方案,使用mount with--bind选项代替符号链接,tomcat不需要任何重新配置:
cd/var/lib/tomcat5/webapps/test1/
mkdir文件
mount--bind/path/to/actual/upload/directory/files文件有4个地方可以保存上下文
tomcatdir/conf/server.xml
tomcatdir/conf/context.xml
tomcatdir/conf/Catalina/localhost/appname.xml
tomcatdir/webapps/appname/META-INF/context.xml
对于tomcat 8,AllowLink属性不应在上下文中指定,而应在Resources标记中指定。我的tomcatdir/conf/context.xml如下所示
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
<Resources allowLinking="true" cachingAllowed="true" cacheMaxSize="100000" />
</Context>
WEB-INF/WEB.xml
${catalina.base}/conf/web.xml
这个解决方案现在对我很有效。但我也想分享一下我在提出这个解决方案之前犯下的错误
我在tomcatdir/conf/server.xml和tomcatdir/conf/context.xml中都定义了资源。并且allowLinking=“true”仅在tomcatdir/conf/server.xml中设置
我发现,如果不指定AllowLink,则等于将其设置为false。因此,我从server.xml中删除了Resources标记,只保留了tomcatdir/conf/context.xml,其中包含allowLinking=“true”属性。这在Tomcat 8中的工作方式不同+
在conf/context.xml中添加以下行可以在apache tomcat 8.5上为我启用软链接+
是的,我所要做的就是创建一个context.xml文件:/var/lib/tomcat5/webapps/test1/META-INF/context.xml这个链接非常有用。谢谢,谢谢你。知道如何将tomcat(6)配置为始终遵循符号链接吗?大保存。。谢谢你,伙计。我必须把它放到META-INF中并添加覆盖。(我认为它在WEB-INF中不起作用?@piotr czapla:感谢您编辑我的答案,将WEB-INF修改为META-INF!如何从Java访问此路径中的文件?例如,如果我想为/var/lib/tomcat5/webapps/test1/files/example.pdf创建一个File对象,那么给构造函数的路径字符串是什么?@beldaz:你应该创建一个新的问题(),而不是使用注释。@netjeff没关系,我问这个问题是为了让你的答案更完整,因为许多类似的问题都忽略了这个让我这样的疯子困惑的小问题。文件仅通过其完整的文件系统路径进行访问。
<Resources allowLinking="true" />