Please send your changes as a "cvs diff -u".

john mcnally

Glenn Golden wrote:
> 
> I'm working on Jetspeed, and am tracking down a problem with some of the
> Action code in Jetspeed, which was recently changed to start calling for a
> URL redirect.  With Internet Explorer, this doesn't work.
> 
> I'm proposing some chages to Turbine to better support the ability to call
> for a URL redirect in an Action class.
> 
> Bug: IE hangs when leaving the Jetspeed customizers... I don't know how
> widespread this problem is, is it just IE 6 on XP? Is it just Jetspeed
> running with jdk 1.4.0 in Tomcat 4.0.2?  Whatever - it's a problem, and we
> are doing something against the HTTP rules.
> 
> Problem: last month, many Jetspeed Actions were modified to use a redirect
> on cancel or done.  Code like this in MultiColumnControllerAction.java:
> 
>                 // bring logged on user to homepage with internal redirect
>                 DynamicURI duri = new DynamicURI(data);
>                 data.getResponse().sendRedirect(duri.toString());
> 
> Note the comment refers to "internal redirect", but this is a real HTTP
> redirect attempt.  After this is done in the action, the page goes on to
> execute the screen.  It known nothing about the redirect.  It goes on to
> write stuff to the response.
> 
> HTTP / servlet rules are that a) a redirect can be placed into the response
> only before anything has been written to the response, and b) once the
> redirect is placed, nothing may be written.  It seems that our violation of
> this rule is messing up IE.
> 
> Comment:  I *really* like the idea of being able to use a redirect in an
> action to end a customization to get the browser URL back to a good URL.
> 
> Solution:  Fix Turbine.  Turbine should not let us make this mistake.  Or
> better, Turbine should have a well defined and supported way to call for a
> redirect from an Action.  The Page code that is messing us up is in
> Turbine's DefaultPage.  And a final mess up is made in the Turbine servlet's
> doGet().
> 
> 1) Define a standard in Turbine for an action to make an HTTP redirect.
> RunData already has get/setRedirectURI(), and just setting this to a
> non-null non-blank value in an Action should be enough to tell Turbine that
> we want a redirect.
> 
> 2) Modify DefaultPage doBuild() to, after running the action, check for a
> redirect, and do whatever is needed.  If we standardize on
> "RunData.setRedirectURI()", then the following code inserted in doBuild()
> after the action call would work:
> 
> ActionLoader.getInstance().exec ( data, data.getAction() );
> if ((data.getRedirectURI() != null) && (data.getRedirectURI().length() > 0))
> {
>     // directly set the response object for a redirect
>     data.declareDirectResponse();
>     data.getResponse().sendRedirect(data.getRedirectURI());
>     return;
> }
> 
> 3) Turbine doGet() must make sure not to inadvertently create an output if
> one has not yet been created!  This is what it does now in the finally()
> block with "data.getOut().close();".  getOut() makes the PrintWriter, and
> even closing it right away causes IE to get messed up.  We need this code
> instead:
> 
> if (data.isOutSet()) data.getOut().close()
> 
> - Glenn
> 
> --------------------------------------------
> Glenn R. Golden, Systems Research Programmer
> University of Michigan School of Information
> [EMAIL PROTECTED]               734-615-1419
> http://www-personal.si.umich.edu/~ggolden/
> --------------------------------------------
> 
> --
> To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to