Oops! Below I wrote ContextServer but I meant ContextHandler. Just confirming it's not ContextHandler doing this:
// context request must end with /
baseRequest.setHandled(true);
if (baseRequest.getQueryString() != null)
response.sendRedirect(URIUtil.addPaths(baseRequest.getRequestURI(),URIUtil.SLASH) + "?" + baseRequest.getQueryString());
else
response.sendRedirect(URIUtil.addPaths(baseRequest.getRequestURI(),URIUtil.SLASH));
return false;
(that is from jetty-server-9.2.2.v20140723, ContextHandler.checkContext(), lines 948-951)
A look at the URIUtil.addPaths() code suggests I would see a / after the .do, if this were happening, and I am not, but I would appreciate someone more familiar with the Jetty code to confirm.
Your pasted jetty configuration shows no jetty specific redirect implementation.
Perhaps its the library you are using in your webapp causing this redirect loop.
Based on the "action.do", I'd assume you have struts in use.
You should look into the struts library and its configuration to see how it does its redirect logic.