web-dev-qa-db-ja.com

Tomcatの単一ディレクトリのシンボリックリンクを構成する

プロセスがいくつかの.pdfファイルをアップロードするディレクトリがあります。このプロセスは私の制御の範囲外です。

これらのファイルをTomcatを使用してWebサイトから入手できるようにする必要があります。

Webで利用可能なディレクトリ/var/lib/Tomcat5/webapps/test1があり、ブラウザでその中のファイルを表示できます。

そのため、.pdfファイルがあるディレクトリを指すシンボリックリンクを作成しました:/var/lib/Tomcat5/webapps/test1/files/、しかしそのディレクトリには何も表示されません。

test1ディレクトリのみでシンボリックリンクを有効にするにはどうすればよいですか?どこでもシンボリックリンクを有効にしたくないので、.pdfファイルのあるディレクトリをWebで利用できます。

26
jeph perro

META-INF/context.xmlを含む<Context path="/myapp" allowLinking="true">の作成のソリューションにはいくつかの問題があります

最大の問題は、conf/context.xmlが存在する場合、<Context>内のallowLinking優先されることです。 <Context>内のMETA-INF/context.xml。そして、conf/context.xml内でallowLinkingが明示的に定義されていない場合、allowLinking="false"と同じです。 (コンテキスト優先質問の my answer を参照してください)

アプリでリンクを許可するには、<Context override="true" allowLinking="true" ...>と言う必要があります。

もう1つの問題は、path="/myapp"META-INF/context.xmlで無視されることです。混乱を防ぐため、省略しておくことをお勧めします。 <Context>内のpathが影響するのはserver.xml内のみであり、 Tomcatの公式ドキュメントでは推奨されていません<Context>sをserver.xml

最後に、myapp/META-INF/context.xmlファイルの代わりに、conf/Catalina/localhost/myapp.xmlファイルを使用することをお勧めします。この手法は、META-INFのコンテンツをクリーンに保つことができることを意味します。これは、Webアプリケーションの根本です-私のWebアプリケーションの根本をいじくるリスクを冒したくありません。 :-)

49
netjeff

次を含むWebアプリのMETA-INFディレクトリにcontext.xmlファイルを作成します。

<?xml version="1.0" encoding="UTF-8"?>

<Context path="/myapp" allowLinking="true">

</Context>

詳細: http://www.isocra.com/2008/01/following-symbolic-links-in-Tomcat/

16
Loki

これはTomcat 8以降では動作が異なります

http://Tomcat.Apache.org/migration-8.html

<Resources allowLinking="true" />
4
weberjn

コンテキストが存在できる場所は4つあります。

  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

Tomcat 8の場合、allowlinking属性はコンテキストではなくリソースタグで指定する必要があります。私の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>

この解決策は、今の私にはうまくいきます。しかし、私はこの解決策に来る前に私がした間違いも共有したいと思います。

Tomcatdir/conf/server.xmlとtomcatdir/conf/context.xmlの両方でリソースを定義しました。また、allowLinking = "true"はtomcatdir/conf/server.xmlでのみ設定されていました。

私が見つけたのは、allowLinkingを指定しない場合、falseに設定することと同じであるということです。そこで、server.xmlからResourcesタグを削除し、allowLinking = "true"属性が含まれているtomcatdir/conf/context.xmlのみを残しました。

3
Nare

私はこの別の方法でそれを作りました。私はこの他の構成ファイルを編集します:Apache-Tomcat-7.0.33/conf /server.xmlInHost追加したタグ:

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

したがって、次のようにアクセスできます: http:// localhost/data

1
Alberto Perez

Conf/context.xmlに次の行を追加すると、Apache Tomcat 8.5以降でソフトリンクが有効になります

<Resources allowLinking = "true" chingAllowed = "true" cacheMaxSize = "100000">

0
gajanan malvade