2011/12/26 Jerry Malcolm <2ndgenfi...@gmail.com>:
> Konstantin,
>
> Thanks for the info.  I think I'm getting close.  As a test, I have created
> a valve that just forces a redirect.  It compiled fine.  I registered it
> under the 'host' tag next to the other valves in server.xml.  When I send a
> request in, my print statements write to System.out just as expected.
>
> The only problem is, the request forward goes nowhere.  Just white screen
> on the browser.  The requestDispatcher returns without any exceptions.  But
> I can't find anything in the logs saying anything was wrong.  The code is
> simple:
>
>  public void invoke(Request request, Response response) throws IOException,
> ServletException  {
>    System.out.println( "in Valve" );
>    try    {
>       RequestDispatcher requestDispatcher = request.getRequestDispatcher(
> "/cismanager/jsp/user/home.jsp" );

In short,
1) dispatcher is always relative to Context.
You must get Context first (from a Mapper?) and then get Dispatcher
from there. (Dropping the "cismanager" part from the URL).


If you were doing it from a Filter you would call
ServletContext.getContext(String) followed by
ServletContext.getRequestDispatcher().

Note that ServletContext.getContext(String) returns null for better
security, unless you explicitly set <Context crossContext="true"/> in
the target web application.

2) using a RequestDispatcher you will get the same result as with
using it from inside a Filter. That is it will be a usual "forward",
and auth constraints wouldn't apply.

Here are tips for debugging Tomcat:
https://wiki.apache.org/tomcat/FAQ/Developing


>       System.out.println( "should get here" );
>       requestDispatcher.forward( request, response );
>       System.out.println( "return from forward");
>    }
>    catch( Throwable e)    {
>       e.printStackTrace( System.out );
>    }
> //    getNext().invoke(request, response);
>  }
>
> I figure it's something to do with the URL.  I have never used a
> RequestDispatcher obtained from the Request object outside of a webapp
> context.  From what you said, the valve is 'above' the contexts at the
> 'host' level.  So I assume the parsing of the context out of the URL has
> yet to occur and therefore should happen in my 'forward'.  Hence, I used
> the entire URL (after the domain name) in the forward.  In the example
> above, I have the webapp mapped to "/cismanager".
>
> Am I close?  Or is this totally wrong?  Should I not use the
> RequestDispatcher?  Should I somehow wrapper the request object and set the
> new URL in that?
>
> Thanks again for all the help.
>
> Jerry

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to