Hi Rob: Thank you very much for your detailed explanation.
getPathInfo() does seem more relevant here, and I am still stumped as to how the registration of an OSGi servlet should be so different from that within a web.xml file (that both seem, at face, to be quite similar in the two examples I posted) that getServletPath() has such strikingly different results. In any case, I am happy to report that one of the default Spring controllers: http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/web/servlet/mvc/UrlFilenameViewController.html Actually seems to have the correct behavior on both OSGi HTTPService and Jetty. Thus, it seems we will probably just use that one: http://tickets.openmrs.org/browse/TRUNK-1851 In any case, I appreciate your detailed reply. Thank you Yours Misha Now, on to find out why Rob Walker-2 wrote: > > Misha > > Not sure about behaviour on other implementations, we've only ever used > the Felix Jetty one. > > In one of our handlers we have the following code: > > diag.debug("** auth GET, context path = " + > request.getContextPath() > + ", servlet path : " + request.getServletPath() > + ", path info: " + request.getPathInfo() > + ", auth reason: " + reason > ); > > Which produces the following output: > > 10-11-05 08:09:31 DEBUG - ** auth GET, context path = , servlet path > : /VtWebUi/cafeauth, path info: /auth, auth reason: null > > So maybe getPathInfo can help? > > In our example, the full path requested being > http://localhost:8084/VtWebUi/cafeauth/auth, with the servlet being > mounted at http://localhost:8084/VtWebUi/cafeauth > > According to my reading of the normal Http spec I think this is correct: > > > getServletPath > > public java.lang.String*getServletPath*() > > Returns the part of this request's URL that calls the servlet. This > includes either the servlet name or a path to the servlet, but does > not include any extra path information or a query string. > > > getPathInfo > > public java.lang.String*getPathInfo*() > > Returns any extra path information associated with the URL the > client sent when it made this request. The extra path information > follows the servlet path but precedes the query string. > > > These calls are actually just redirected to the underlying Jetty > implementation, which I think is quite widely used - so I suspect there > coding is probably correct. So maybe it's more a difference in how > "servlet path" is interpreted for servlets registered using OSGi calls. > > -- Rob > > On 05/11/2010 4:04 AM, misha680 wrote: >> Dear All: >> >> Sorry for bothering. We use HttpServletRequest.getServletPath() in >> OpenMRS, >> and I have noticed a difference in behavior between HTTP Service (both >> Felix >> and Equinox) and Jetty, and was wondering if there was some explanation >> for >> this. >> >> My apologies if I am missing something simple. Here are two versions: >> >> 1) Jetty version: >> >> http://old.nabble.com/file/p30137615/my-webapp.zip my-webapp.zip >> >> Request: http://localhost:9999/my-webapp/index.htm >> Result of getServletPath: [/index.htm] >> >> 2) Felix version (exact same servlet): >> >> http://old.nabble.com/file/p30137615/test.zip test.zip >> >> Request: http://localhost:8080/hello/index.htm >> Result of getServletPath: [/hello] >> >> Here is the servlet: >> http://old.nabble.com/file/p30137615/HelloWorld.java HelloWorld.java >> >> and the web.xml: >> http://old.nabble.com/file/p30137615/web.xml web.xml >> >> for the Jetty version. >> >> Fyi, per Servlet 2.1 API spec: >> http://download.oracle.com/docs/cd/E17802_01/products/products/servlet/2.1/api/javax.servlet.http.HttpServletRequest.html#getServletPath() >> >> "public abstract String getServletPath() >> Gets the part of this request's URI that refers to the servlet being >> invoked. Analogous to the CGI variable SCRIPT_NAME." >> >> and, e.g., >> http://www.perlfect.com/articles/cgi_env.shtml >> >> "SCRIPT_NAME >> >> The virtual path from which the script is executed. >> This is very useful if your script will output html code that contains >> calls >> to itself. Having the script determin its virtual path, (and hence, along >> with DOCUMENT_ROOT, its full URL) is much more portable than hard coding >> it >> in a configuration variable. Also, if you like to keep a log of all >> script >> accesses in some file, and want to have each script report its name along >> with the calling parameters or time, it is very portable to use >> SCRIPT_NAME >> to print the path of the script." >> >> The Jetty behavior seems correct even for Servlet API 2.1. However, >> clearly >> both Felix and Equinox chose to implement this differently from the Jetty >> HTTP Server. >> >> Am I missing something? >> >> More importantly, where would I get the relevant string (i.e. /index.htm) >> from the Felix and/or Equinox implementations of HttpServletRequest? >> >> Thank you >> Yours >> Misha >> >> p.s. The relevant OpenMRS controller: >> >> http://source.openmrs.org/browse/~raw,r=16192/OpenMRS/trunk/web/src/main/java/org/openmrs/web/controller/patient/ShortPatientFormValidator.java > > -- > > > Ascert - Taking systems to the Edge > [email protected] > +44 (0)20 7488 3470 > www.ascert.com > > > -- View this message in context: http://old.nabble.com/HttpServletRequest.getServletPath%28%29-behavior-on-HTTP-Service-does-not-match-Jetty--tp30137615p30143191.html Sent from the Apache Felix - Users mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]

