Skip to main content
 首页 » 编程设计

resources之符号链接(symbolic link) tomcat 8 目录资源

2024年08月12日26落叶无声

我想在 Tomcat 8 下符号链接(symbolic link) JSP 目录。
它在 Tomcat 7 中也能以这种方式工作:

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

它为我放弃了这个异常(exception):

    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

请您参考如下方法:

要使 Tomcat 能够访问符号链接(symbolic link),请执行以下操作:

$CATALINA_HOME/conf/context.xml 

Tomcat 7:

<Context allowLinking="true"> 
... 

Tomcat 8:

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

DO NOT DO THIS ON WINDOWS (or any other case-insensitive filesystem), as it will disable case sensitivity checks, allowing JSP source code disclosure, among other security problems.

http://tomcat.apache.org/tomcat-8.0-doc/config/resources.html