You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Dean Hiller <de...@xsoftware.biz> on 2006/06/26 23:31:39 UTC
intercept and redirect to war file of my choosing(based on URL)
I have a url of this format http://<machine>/<variable>/<warfilename>
Where no matter what <variable> is equal to, I would like to be able to
direct the to tomcat/webapps/<warfilename>.war servlet. I have been trying
to do this with a valve on the engine hoping I could modify the request URL
before the tomcat engine decided which war file would service the request.
Is this even possible? I tried this with a generic filter and a forward but
that failed and tomcat said http://machine/<warfilename> resource does not
exist when using the above url. If I use http://<machine>/<warfilename>, it
works fine and the resource exists when using a filter I deployed to
common/lib.
Below is the code I tried to use for that valve(since I could not get the
filter to work) in the engine to modify the request so that the url would be
http://<machine>/<warfilename> and I was planning on sticking <variable> in
as a request attribute or something so the war file could access it. Any
ideas?
thanks,
dean
public void invoke(Request req, Response resp) throws IOException,
ServletException {
log.info("testing testingzzzzzzzzzzzzzzzzzzzzzzzzzt");
System.out.println("req1="+req.getContextPath());
System.out.println("req2="+req.getDecodedRequestURI());
System.out.println("req3="+req.getPathInfo());
System.out.println("req4="+req.getPathTranslated());
System.out.println("req5="+req.getRequestURI());
System.out.println("req6="+req.getRequestURL());
System.out.println("req7="+req.getServletPath());
modifyRequest(req);
nextValve.invoke(req, resp);
}
private void modifyRequest(Request req) {
String uri = req.getRequestURI();
int first = uri.indexOf("/");
int second = uri.lastIndexOf("/");
if(second > 0) {
String company = uri.substring(first+1);
company = company.substring(0, second-1);
System.out.println("company="+company);
if("company".equals(company)) {
uri = uri.substring(second);
System.out.println("setting uri to="+uri);
log.info("modifying uri="+uri);
req.setRequestURI(uri);
req.setServletPath(uri);
}
}
}