Thanks very much for the comprehensive reply.  I tried as you suggested and
it worked fine, resolving symbolic links both inside and outside the tomcat
webapps directory.

You asked why  path="" instead of path="foo" in context at server.xml?

That was our attempt to mount this application at "/" instead of at "/foo"
which is a requirement here.  And that indeed worked, I was able to access
the jsp page at "/".  However, I will research that again and look at every
way of doing it - it's not germane to the real problem here which
is symlinks - which appears to be solved at least in initial
experimentation using your suggestion.

Thanks again.

On Wed, Jun 19, 2024 at 3:09 PM Christopher Schultz <
ch...@christopherschultz.net> wrote:

> Stephen,
>
> On 6/19/24 13:55, Stephen Tenberg wrote:
> > Hello I have scoured the web trying to get symlinks working for jsp pages
> > or folders in Tomcat 9 using Ubuntu 20.04. Here is how to repeat the
> issue,
> > and what I have tried.
> >
> > 1. Create a new folder in webapps, say "foo"
> >
> > 2. Put HelloWorld.jsp there
> >
> > 3. (I restarted Tomcat just in case) Verify it works at
> > localhost:8080/foo/HelloWorld.jsp
> >
> > 4. Put a soft symlink there: ln -s /opt/tomcat/webapps/foo/HelloWorld.jsp
> > /opt/tomcat/webapps/foo/Link.jsp
> >
> > 5. (restart) Verify that localhost:8080/foo/Link.jsp soft fails with
> > nothing in the log as if it does not exist.
> >
> > WHAT I TRIED:
> >
> > First I put this in the default host "localhost" in server.xml:
> >
> >   <Context path="" reloadable="true" docBase="foo">
> >            <Resources allowLinking="true" cacheMaxSize="51200">
> > </Resources>
> > </Context>
>
> Why path="" instead of path="foo"?
>
> In fact... why bother with a <Context> element at all? The presence of
> the "foo" directory will automatically deploy an application on /foo.
> Yes, in order to "allow linking" you will need a <Context> to set it on,
> but that should be under webapps/foo/META-INF/context.xml and not in
> conf/server.xml. Yes, you can put it in server.xml, but you should not
> do that for a few reasons.
>
> >        <Context path="/ROOT" docBase="ROOT"/>
>
> Yuck. Now you have an application deployed into "/ROOT" as well as ""
> (the default ROOT application, mounted on /)
>
> > This achieves the objective of making "foo" the default so now I can just
> > use localhost:8080/HelloWorld.jsp
>
> I think you must have copy/pasted incorrectly, but nothing of what you
> put above would allow /HelloWorld.jsp to run the JSP in "foo".
>
> > However "allow linking" is silently ignored.  I also tried editing
> > context.xml and adding to the context:
> >
> >   <Resources allowLinking="true" />
> >    <Resources cacheMaxSize="51200" />
>
> This ... is confusing at best because you have two elements in there.
> I'm not sure what will happen if you define it twice. Maybe the second
> one overwrites the first? If that's true, it might explain why it
> wouldn't work.
>
> > Both of these solutions were gleaned from reading the documentation and
> > Google searches, and I seem to be stuck here.
> >
> > For now I cannot install a later version of Tomcat (using Amazon Java 8
> > Coretto) or remove the symlinks as they are required by an existing
> > application.
> >
> > Any thoughts are greatly appreciated.
>
> First: simplify. Put everything into your application and give it the
> name AND context-path you want, for example webapps/foo and everything
> is in there.
>
> There is really only one place where symlinking can be configured at
> all, which is <Resources>. Put your <Context> in
> webapps/foo/META-INF/context.xml and use a single <Resources> element
> with an appropriate configuration.
>
> Remove everything else.
>
> Restart and see what happens when you request /foo/Link.jsp
>
> -chris
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: users-h...@tomcat.apache.org
>
>

Reply via email to