I was reviewing the source code and operation of the mod_webapp library
module and noticed a little operational quirk..

I've seen a couple of messages relevant to this but nothing that really
gives me the correct answer.

In the Sun Servlet specification v2.3 section 4.4 describes the parts that
make up a Request URI.

The problem is this:

lines 81-88 of jakarta-tomcat-connectors/webapp/lib/wa_config.c does some
normalizing of the deployment URL path:

81    strncpy(buf,p,1024);
82    l=strlen(buf)-1;
83    if (buf[l]=='/') buf[l]='\0';
84    if (buf[0]=='/' || l==0) {
85      appl->rpth=apr_pstrcat(wa_pool,buf,"/",NULL);
86    } else {
87      appl->rpth=apr_pstrcat(wa_pool,"/",buf,"/",NULL);
88    }

In the case that the buffer is loaded with the correct application path
starting with '/' or if the application name is empty (indicating that this
is the ROOT context of the app server) a '/' is appended.  Unfortunately
this causes a requests to /someapp to fail with a 404 and /someapp/ to work
correctly provided that there is a welcome file list associated with the
application.  Applications like Tomcat's manager application choke on this,
as it's attempting to list the applications associated under '/' instead of
listing all the applications that are in the servlet.  The manager think's
your asking for anything with the servlet path '/', as the breakdown of the
request URI is:

- Context Path = "/manager" (assuming we've deployed the manager as
'/manager')
- Servlet Path = "/"
- Path Info = ""

If the above code snippet was changed to the following:
    strncpy(buf,p,1024);
    l=strlen(buf)-1;
    if (buf[l]=='/') buf[l]='\0';
    if(l == 0) {
      appl->rpth=apr_pstrcat(wa_pool, buf, NULL);
    } else if (buf[0]=='/') {
      appl->rpth=apr_pstrcat(wa_pool,buf,NULL);
    } else {
      appl->rpth=apr_pstrcat(wa_pool,"/",buf,NULL);
    }

I think it may solve the issue of application failure.




--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to