I'd like to see a Servlet 2.2 API version of Alex Chaffee's CookieDetector servlet.
Created May 4, 2012
Avi Kak To create a Servlet 2.2 API version of Alex Chaffee's CookieDetector
servlet, replace the statement
String self = req.getScheme() + "://" + req.getServerName() + (port == 80 ? "" : ":"+port) + req.getServletPath();by the following statements:
String webapp = null; String realPath = getServletContext().getRealPath( req.getServletPath() ); String fileSeparator = System.getProperty( "file.separator" ); StringTokenizer st = new StringTokenizer( realPath, fileSeparator ); while ( st.hasMoreTokens() ) { if ( st.nextToken().equals( "webapps" ) ) { webapp = st.nextToken(); break; } } String self = req.getScheme() + "://" + req.getServerName() + (port == 80 ? "" : ":"+port) + "/" + webapp + req.getServletPath();This change in the code is needed to reflect the directory structure for a typical webapp for Servlet 2.2 and the fact that the URL for accessing a servlet usually includes the name of the webapp. For illustration, I have a webapp named test-suite. The servlets for this webapp are in the directory
TOMCAT_HOME/webapps/test-suite/WEB-INF/classes/and the URL I'd use to access, say, a HelloServlet in this webapp would be
http://RVL2.ecn.purdue.edu:8080/test-suite/servlet/HelloServletAll that the replacement code does is to extract the name of the webapp from the pathname string returned by the getRealPath method.
[Thanks Avi! Now I guess I'll have to go integrate these changes... -Alex]