"Mark E. Palandri" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > I've got a Tomcat 5.0.14, IIS 5.1, jk2 setup. > > My workers2.properties file has a [uri:/foo/*] set up to forward requests to > a worker. > > I've got the worker service set up to handle the requests with the following > server.xml context: > > <Context path="/foo" docBase="C:\foo" debug="0" reloadable="false"/> > > I've got a servlet implementing a WebDAV server with a WEB.XML file that > contains the following: > > <servlet-mapping> > <servlet-name>foo</servlet-name> > <url-pattern>/*</url-pattern> > </servlet-mapping> > > It all seems to work fine. All requests with a URI prefix of "/foo" get to > my servlet great except for one small hitch. If a request comes in with > specifying a resource URI of exactly "/foo", the request does not get to my > servlet. Instead, a 302 redirect response is generated specifying a location > of "http://bar/foo/" (note the trailing slash). If a request specifying a > resource URI of "/foo/" comes in, it gets forwarded to my servlet. > > My problem is that there are a great many WebDAV clients out there that > can't handle the 302 response and treat it as an error. The main culprits > are the Win2K and WinNT Web Folder clients. The WinXP client seems to handle > it fine, but it seems really inefficient for each request sent to "/foo" to > be redirected to "/foo/". > > I can get around this by specifying path="" in the <Context> tag, but then > the context path of the servlet request is empty, making it awkward for the > servlet to figure out what portion of the request URI is context and what is > the rest. > > I got the source code for the worker process and ran it in a debugger to see > if I could find the source of the problem. What it came down to was the > 'internalMapWrapper' method of the org.apache.tomcat.util.http.mapper.Mapper > class. This method has the following snippet of code: > > int length = context.name.length(); > if (length != (pathEnd - pathOffset)) { > servletPath = pathOffset + length; > } else { > // The path is empty, redirect to "/" > path.append('/'); > mappingData.redirectPath.setChars > (path.getBuffer(), path.getOffset(), path.getEnd()); > path.setEnd(path.getEnd() - 1); > return; > } > > When the context is "/foo" and the path is "/foo", the redirectPath of > mappingData is set to "/foo/" and the 'service' method of the > org.apache.coyote.tomcat5.CoyoteAdapter class then calls > response.sendRedirect instead of calling the servlet container. > > I was wondering if anyone knew of a way for me to keep my context path at > "/foo" and not have requests with a URI of "/foo" generate a response of 302 > and instead get passed through to my servlet. >
Well, you could always modify your copy of the Tomcat source. The other alternative is to drop a line to Bill Gates, and ask him to fix his broken client ;-). The reason that Tomcat does this is that HTML tags like <img src="images/bar.gif"> would get resolved to /images/bar.gif instead of /foo/images/bar.gif. > Thanks, > > Mark --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]