title: symlinking tomcat 8 directory resources
body: <p>I would like to symlink JSP directories under Tomcat 8. <br>
  It worked as well in Tomcat 7 on this way:</p>
  
  <pre><code>    &lt;Context allowLinking="true"&gt;
  </code></pre>
  
  <p><br>but seems the Tomcat 8 dropped this feature, and it started to use the Resources</p>
  
  <p>( <a href="http://tomcat.apache.org/migration-8.html#Web_application_resources" rel="noreferrer">http://tomcat.apache.org/migration-8.html#Web_application_resources</a> ).</p>
  
  <p>My example usage:</p>
  
  <blockquote>
    <p>ROOT/jspdirectory -->linksto--> /var/tmp/realplaceofjspfiles/</p>
  </blockquote>
  
  <p>A bad configuration:</p>
  
  <p>ROOT/META-INF/context.xml:<br></p>
  
  <pre><code>&lt;Context&gt;
     &lt;Resources allowLinking="true"&gt;
           &lt;PreResources className="org.apache.catalina.webresources.DirResourceSet"   base="/var/tmp/realplaceofjspfiles" internalPath="jspdirectory"/&gt;
      &lt;/Resources&gt;
  &lt;/Context&gt;
  </code></pre>
  
  <p>It dropped for me this exception:</p>
  
  <pre><code>    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)
  </code></pre>
  
  <p><br><br>
  I seen the "internalPath" here:<br>
  <a href="http://tomcat.apache.org/tomcat-8.0-doc/config/resources.html" rel="noreferrer">http://tomcat.apache.org/tomcat-8.0-doc/config/resources.html</a></p>