web-dev-qa-db-ja.com

Tomcat8ディレクトリリソースのシンボリックリンク

Tomcat8でJSPディレクトリをシンボリックリンクしたいと思います。
Tomcat7でも次のように機能しました。

    <Context allowLinking="true">


しかし、Tomcat 8はこの機能を削除したようで、リソースの使用を開始しました

http://Tomcat.Apache.org/migration-8.html#Web_application_resources )。

私の使用例:

ROOT/jspdirectory-> linksto->/var/tmp/realplaceofjspfiles /

悪い構成:

ROOT/META-INF/context.xml:

<Context>
   <Resources allowLinking="true">
         <PreResources className="org.Apache.catalina.webresources.DirResourceSet"   base="/var/tmp/realplaceofjspfiles" internalPath="jspdirectory"/>
    </Resources>
</Context>

それは私のためにこの例外を落としました:

    07-Mar-2014 04:09:12.113 WARNING [localhost-startStop-1] org.Apache.Tomcat.util.digester.SetPropertiesRule.begin [SetPropertiesRule]{Context/Resources/PreResources} Setting property 'internalPath' to 'jspdirectory' did not find a matching
     property.
    07-Mar-2014 04:09:12.114 SEVERE [localhost-startStop-1] org.Apache.catalina.core.ContainerBase.addChildInternal ContainerBase.addChild: start:
     org.Apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]]
            at org.Apache.catalina.util.LifecycleBase.start(LifecycleBase.Java:154)
            at org.Apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.Java:726)
            at org.Apache.catalina.core.ContainerBase.addChild(ContainerBase.Java:702)
            at org.Apache.catalina.core.StandardHost.addChild(StandardHost.Java:697)
            at org.Apache.catalina.startup.HostConfig.deployDirectory(HostConfig.Java:1134)
            at org.Apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.Java:1780)
            at Java.util.concurrent.Executors$RunnableAdapter.call(Executors.Java:511)
            at Java.util.concurrent.FutureTask.run(FutureTask.Java:266)
            at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1142)
            at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:617)
            at Java.lang.Thread.run(Thread.Java:744)
    Caused by: org.Apache.catalina.LifecycleException: Failed to start component [org.Apache.catalina.webresources.StandardRoot@4756d5a0]
            at org.Apache.catalina.util.LifecycleBase.start(LifecycleBase.Java:154)
            at org.Apache.catalina.core.StandardContext.resourcesStart(StandardContext.Java:4841)
            at org.Apache.catalina.core.StandardContext.startInternal(StandardContext.Java:4966)
            at org.Apache.catalina.util.LifecycleBase.start(LifecycleBase.Java:150)
            ... 10 more
    Caused by: Java.lang.NullPointerException
            at Java.lang.String.startsWith(String.Java:1392)
            at Java.lang.String.startsWith(String.Java:1421)
            at org.Apache.catalina.webresources.DirResourceSet.list(DirResourceSet.Java:115)
            at org.Apache.catalina.webresources.StandardRoot.list(StandardRoot.Java:129)
            at org.Apache.catalina.webresources.StandardRoot.listResources(StandardRoot.Java:313)
            at org.Apache.catalina.webresources.StandardRoot.processWebInfLib(StandardRoot.Java:523)
            at org.Apache.catalina.webresources.StandardRoot.startInternal(StandardRoot.Java:643)
            at org.Apache.catalina.util.LifecycleBase.start(LifecycleBase.Java:150)
            ... 13 more

    07-Mar-2014 04:09:12.115 SEVERE [localhost-startStop-1] org.Apache.catalina.startup.HostConfig.deployDirectory Error deploying web application directory /PATH/Apache-Tomcat-8.0.3/webapps/ROOT
     Java.lang.IllegalStateException: ContainerBase.addChild: start: org.Apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]]
            at org.Apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.Java:729)
            at org.Apache.catalina.core.ContainerBase.addChild(ContainerBase.Java:702)
            at org.Apache.catalina.core.StandardHost.addChild(StandardHost.Java:697)
            at org.Apache.catalina.startup.HostConfig.deployDirectory(HostConfig.Java:1134)
            at org.Apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.Java:1780)
            at Java.util.concurrent.Executors$RunnableAdapter.call(Executors.Java:511)
            at Java.util.concurrent.FutureTask.run(FutureTask.Java:266)
            at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1142)
            at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:617)
            at Java.lang.Thread.run(Thread.Java:744)



ここで「internalPath」を見ました:
http://Tomcat.Apache.org/Tomcat-8.0-doc/config/resources.html

14
user2948919

Tomcatがシンボリックリンクにアクセスできるようにするには、次の手順を実行します。

$CATALINA_HOME/conf/context.xml

Tomcat 7

<Context allowLinking="true">
...

Tomcat 8

<Context>
    <Resources allowLinking="true" />
...

WINDOWS(またはその他の大文字と小文字を区別しないファイルシステム)ではこれを行わないでください。大文字と小文字の区別のチェックが無効になり、JSPソースコードの開示が許可されます。

http://Tomcat.Apache.org/Tomcat-8.0-doc/config/resources.html

24
GlenPeterson

別の「webAppMount」プロパティが必要なようです。

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/">
    <Resources>
        <PreResources
            className="org.Apache.catalina.webresources.DirResourceSet"
            base="/FilePath/.../Resources"
            webAppMount="/resources"
            internalPath="/"/>
    </Resources>
 </Context>

これは私のために働いた。それは私のウェブアプリのMETA-INF/context.xmlにあります

1
somid3