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" />