Mark, Mark Thomas wrote On 11/29/05 12:46,: > Jan, > > Jan Luehe wrote: > >>Hi Mark, > > <snip> > >>I agree the current javadocs of ServletContext.getContext() are >>ambiguous, and I agree we need to present this case to the >>Servlet EG. Maybe there is a small chance to have this resolved >>in the Servlet 2.5 timeframe ... >> >>I think it would be more useful to have the "uripath" argument be >>interpreted as a full URI rather than a context root, and have >>ServletContext.getContext() determine the longest match of the given >>"uripath" with the context roots of any deployed contexts. > > <snip> > I agree the current behaviour, which "hides" any foreign contexts > >>whose context roots match a subdir of the current context, is broken >>(in part because of the spec ambiguity), because it returns different >>results depending on the context from which the getContext() call is >>made. >> >>I don't see why we need to restrict "uripath" to be a context root in >>order to fix the current behaviour, though. As I said, returning >>the context whose context root has the longest match with the given >>"uripath" may make more sense. >> >>Would you agree? >> >> >>Jan > > > I have just re-read the spec keeping score of number of times the > wording suggests an exact match or a longest match. The result was a > draw so I am happy to interpret it either way. Given that the longest > match makes the most sense to me and won't break any existing > functionality I will take this approach until the EG issues some > clarification. Hopefully they will clarify it the "right" way.
Makes sense. So it seems we could apply the patch proposed by Bill to achieve the new semantics of getContext(): MessageBytes uriMB = new MessageBytes(); uriMB.setString(uri); MappingData md = new MappingData(); MessageBytes serverName = request.getCoyoteRequest().serverName(); request.getConnector().getMapper().map(serverName, uriMB, md); if(md.context == null) { return null; } return ((Context)md.context).getServletContext(); I've rewritten the javadocs of getContext(), as follows: /** * Returns the <code>ServletContext</code> object to which the * specified URI has been mapped. * * <p>This method allows servlets to gain access to foreign servlet * contexts deployed on the same container, from which * [EMAIL PROTECTED] RequestDispatcher} objects may be obtained. * A servlet context is considered foreign to a servlet if it is * different from the servlet's own servlet context. * * <p>The given URI must be begin with "/". * * <p>A security conscious servlet container may return * <code>null</code> if the specified URI maps to a foreign context. * * @param uripath The URI to map * * @return The <code>ServletContext</code> to which the given URI * has been mapped, or null if the given URI does not map to any of * the servlet contexts deployed on the container, or if the URI * maps to a foreign context and access to foreign contexts has been * disabled by the container * * @see RequestDispatcher * */ public ServletContext getContext(String uripath); If we all agree, I will send this proposal to the Servlet EG. Thanks, Jan > > Mark > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]