DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://issues.apache.org/bugzilla/show_bug.cgi?id=30075>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE.
http://issues.apache.org/bugzilla/show_bug.cgi?id=30075 Struts is using request.getContextPath() to try to generate correct URLs/URIs. This fails if the server is accesed through a proxy. Summary: Struts is using request.getContextPath() to try to generate correct URLs/URIs. This fails if the server is accesed through a proxy. Product: Struts Version: 1.1 Final Platform: Other OS/Version: Other Status: NEW Severity: Major Priority: Other Component: Custom Tags AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] The struts tags and some other classes are using the getContextPath() method on the HttpServletRequest object to try to generate URIs. This fails as the appserver is accessed through a proxy that uses an expanded context. For Example: My company uses proxy servers in front of our application servers. To access a web application running on an app server the URL looks like this: http://www.mycompany.com/jsp/webapp The /jsp/ part of the context is what the proxy is using to trigger when it should proxy to the app servers. The context path that the app server uses is just /webapp. So the URIs that all the struts code generates through the use of request.getContextPath() ends up being incorrect and looks like: /webapp/SomeAction.do Because the URI is prefaced with a / the browser interprets the URL as http://www.mycompany.com/webap/SomeAction.do which is ends up in a 404. Suggested Solution: Make struts configurable as to what the context path generation method should be. Possible options should be: as it is today, relative paths, user supplied path. Stop using the HttpServletRequest getContextPath() method to generate the context portion of a URI/URL and instead call a utility method to do this, passing in the HttpServletRequest object. Then check what the setting is and return the appropriate context path. I have altered the struts code to work in our environment by adding a method to the org.apache.struts.util.RequestUtils class public static String getContextPath(HttpServletRequest request) { String value = null; if (GENERATE_CONTEXT_PATH == HTTPSERVLETREQUEST) value = request.getContextPath(); else if (GENERATE_CONTEXT_PATH == RELATIVE) value = "."; else if (GENERATE_CONTEXT_PATH == USERDEFINED) value = userDefinedContextPath; return value; } Then I did replaced all instance of the HttpServletRequest getContextPath() method calls with RequestUtils.getContextPath(reqeust). We are currently using the relative method and this has been working fine so far in testing. This method allows us to either go through the proxies or hit the app servers directly. Following is a list of classes that are using the HttpServletRequest getContextPath() that I modified: org.apache.struts.action.RequestProcessor org.apache.struts.config.ConfigHelper org.apache.struts.taglib.bean.IncludeTag org.apache.struts.taglib.html.ImageTag org.apache.struts.taglib.html.ImgTag org.apache.struts.taglib.logic.ForwardTag org.apache.struts.tiles.ActionComponentServlet org.apache.struts.upload.MultipartRequestWrapper org.apache.struts.util.RequestUtils --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]