Re: How to prevent Tomcat redirect my request

2008-11-21 Thread André Warnier

jim ma wrote:

On Thu, Nov 20, 2008 at 10:24 PM, André Warnier [EMAIL PROTECTED] wrote:


jim ma wrote:


On Thu, Nov 20, 2008 at 6:48 PM, André Warnier [EMAIL PROTECTED] wrote:

 Mikolaj Rydzewski wrote:

 jim ma wrote:

 I still want to know if it is possible to  stop Tomcat from

redirecting.
If
yes, that will be zero code effort for our current implementation.


 Why is it a problem for you to use http://localhost:8080/foo/ URL?

 I agree with the above, but in case it is not an option, you may want
to


look at something like this :

http://www.tuckey.org/urlrewrite/

It does many more things, but I guess it can rewrite /foo into /foo/
internally too.



 I  just debugged the code. It returns http status code 302 and redirected
location  http://localhost:8080/foo/ before reach the code related to url
rewrite configuration in web.xml .

 Yes, that's true of course. Stupid me.

Urlrewrite is a servlet filter, so it will not see the request before it
has been directed to the webapp, and thus the redirect will happen before.
Duh.
I guess you would need some kind of re-directing Valve for that.



I also try to add a rewrite Valve to StandardEngine. And it is also does not
work . Before reach that Valve, tomcat already replied that
redirect response.




Now, about what Mikolaj wrote before (using the /foo/ URL) I think you
misunderstand what he is saying.
What he meant is probably this :
You seem to be using a http client that is not a browser, but some kind of
program or module.  Can you not make sure that this program or module does
not send URLs like /foo, but itself transforms them into /foo/ at the
source ?



Yes , I can do that . If I get 302 response and write some code to resend
quest to the redirected location, then I can always get what I want . It is
not efficient , you know.  It needs to talk to tomcat server twice . Is
there shortcut way to do that ?


Yes : make it so that your *first* request contains the trailing /.
In many words :
currently your httpclient sends a first request with the URL /foo, 
and Tomcat then responds with a 302 to /foo/.
Can you not make it so that your httpclient sends the request for 
/foo/ right away, the first time ?
(then Tomcat would not need to send a 302, it would give you /foo/ 
right away).


Or, in another way again : why does your httpclient send a first request 
/foo without the trailing / ?



-
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: How to prevent Tomcat redirect my request

2008-11-21 Thread jim ma
On Fri, Nov 21, 2008 at 10:53 AM, Caldarale, Charles R 
[EMAIL PROTECTED] wrote:

  From: jim ma [mailto:[EMAIL PROTECTED]
  Subject: Re: How to prevent Tomcat redirect my request
 
  If I get 302 response and write some code to resend
  quest to the redirected location

 The point everyone's trying to make is that you should send the correct URL
 the *first* time, rather than sending one that doesn't comply with the HTTP
 spec and letting Tomcat correct it for you.


Thanks , Chunk.  The problem is that I can not simply correct that URL and
send it for the f
first  time.   The request url is generated by other  application or in some
condition sometimes provided by  user . The client side  can not  judge 
http://localhost:8080/foo;  is a request for foo   resource in root
context or a request url for the default page in foo context.   Server side
has that information and can judge it .  If there is a foo context , it will
reply the redirect response.
httpunit can help that.  Actually I want to know if there is second
option(configure tomcat to support that ) .


Re: How to prevent Tomcat redirect my request

2008-11-21 Thread Mikolaj Rydzewski

jim ma wrote:

The problem is that I can not simply correct that URL and
send it for the f
first  time.   The request url is generated by other  application or in some
condition sometimes provided by  user . The client side  can not  judge 
http://localhost:8080/foo;  is a request for foo   resource in root
context or a request url for the default page in foo context.   Server side
has that information and can judge it .  If there is a foo context , it will
reply the redirect response.
httpunit can help that.  Actually I want to know if there is second
option(configure tomcat to support that ) 

Tomcat behaves correctly. Your clients send incorrect URLs.

You really should not hack Tomcat to handle redirects in a different way.

Since  you use HttpClient (I mean 
org.apache.commons.httpclient.HttpClient) you can check response status 
code and perform second request if status code is one of 
HttpStatus.SC_MOVED_TEMPORARILY or HttpStatus.SC_MOVED_PERMANENTLY. E.g.:



client.executeMethod(method);
responseCode = method.getStatusCode();
responseBody = method.getResponseBodyAsString();
  
if (responseCode == HttpStatus.SC_MOVED_TEMPORARILY || responseCode == 
HttpStatus.SC_MOVED_PERMANENTLY) {

   String redirectLocation;
   Header locationHeader = method.getResponseHeader(Location);
   if (locationHeader != null) {
   redirectLocation = locationHeader.getValue();
   method = new GetMethod(redirectLocation);
   client.executeMethod(method);
   responseCode = method.getStatusCode();
   responseBody = method.getResponseBodyAsString();
   }
}


I really do not understand your problem ;-)

If you don't have absolutely any control on URLs clients generate or 
http-client code your application uses you can try following:
Implement simle servlet that will accept any URL as parameter. Servlet 
will use http-client in way described before (e.g. will handle redirects).
Tell your clients to generate URLs like: 
http://host/your_servlet?url=url_to_fetch

In other words you should implemet proxy that will handle redirects itself.
Finally, your clients will not see any 302 redirects.

--
Mikolaj Rydzewski [EMAIL PROTECTED]


-
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: How to prevent Tomcat redirect my request

2008-11-21 Thread jim ma
 Tell your clients to generate URLs like:
 http://host/your_servlet?url=url_to_fetch
 In other words you should implemet proxy that will handle redirects itself.
 Finally, your clients will not see any 302 redirects.


I like this idea.  It is greatly helpful  , I think it works for my problem.




 --
 Mikolaj Rydzewski [EMAIL PROTECTED]


 -
 To start a new topic, e-mail: users@tomcat.apache.org
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]




Re: How to prevent Tomcat redirect my request

2008-11-21 Thread André Warnier

jim ma wrote:

Tell your clients to generate URLs like:
http://host/your_servlet?url=url_to_fetch
In other words you should implemet proxy that will handle redirects itself.
Finally, your clients will not see any 302 redirects.



I like this idea.  It is greatly helpful  , I think it works for my problem.


That is a cute idea.

Here is another one :

First, I am not telling you that you should put an Apache in front of 
your Tomcat just for this. (*)


But, if you are anyway planning to put an Apache in front of your Tomcat 
for any reason (load balancing, serving other types of content, cgi, 
..), then
in Apache you can easily catch a request before it gets directed to 
any directory (or to Tomcat), in time to rewrite the URL internally 
(thus without sending a 302 to the client).


In Apache, mod_rewrite can be set up to act at the Server level, very 
early in the request cycle (RewriteCond, RewriteRule directives).

You can also do all sorts of subtle things with mod_perl handlers.






(*) I was tempted to do just that, just to provoke a blasting reply from 
Chuck or Chris, but I won't.


-
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: How to prevent Tomcat redirect my request

2008-11-20 Thread Kees Jan Koster

Dear Jim,


I deployed a web application foo.war into tomcat 5.x .  When I used
httpclient to send post request to http://localhost:8080/foo;, I  
always
get the http 302 redirect response .  How can I prevent Tomcat to  
reply

redirect response and directly adding the slash  to my request
url http://localhost:8080/foo/; to get what I want . I see web  
browser can
automcatically resend the request to redirected location but  
httpclient
can not.  Is there  configurations for that ?   Could anyone shed   
some

lights ?


I usually use httpunit, not httpclient. The advantage is that it does  
all the cookies, 302 responses and lord knows what else in the HTTP  
protocol, allowing me to focus on the logic instead of the protocol.


Maybe that's an alternative route for you, if Tomcat cannot be stopped  
from redirecting your app.

--
Kees Jan

http://java-monitor.com/forum/
[EMAIL PROTECTED]
06-51838192

Rule 1 for being in a hole: stop digging.


-
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: How to prevent Tomcat redirect my request

2008-11-20 Thread jim ma
Great thanks , Kees.  I will try httpunit .

I still want to know if it is possible to  stop Tomcat from redirecting. If
yes, that will be zero code effort for our current implementation.

Thanks

Jim


On Thu, Nov 20, 2008 at 5:51 PM, Kees Jan Koster [EMAIL PROTECTED] wrote:

 Dear Jim,


  I deployed a web application foo.war into tomcat 5.x .  When I used
 httpclient to send post request to http://localhost:8080/foo;, I always
 get the http 302 redirect response .  How can I prevent Tomcat to reply
 redirect response and directly adding the slash  to my request
 url http://localhost:8080/foo/; to get what I want . I see web browser
 can
 automcatically resend the request to redirected location but httpclient
 can not.  Is there  configurations for that ?   Could anyone shed  some
 lights ?


 I usually use httpunit, not httpclient. The advantage is that it does all
 the cookies, 302 responses and lord knows what else in the HTTP protocol,
 allowing me to focus on the logic instead of the protocol.

 Maybe that's an alternative route for you, if Tomcat cannot be stopped from
 redirecting your app.
 --
 Kees Jan

 http://java-monitor.com/forum/
 [EMAIL PROTECTED]
 06-51838192

 Rule 1 for being in a hole: stop digging.


 -
 To start a new topic, e-mail: users@tomcat.apache.org
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]




Re: How to prevent Tomcat redirect my request

2008-11-20 Thread Mikolaj Rydzewski

jim ma wrote:

I still want to know if it is possible to  stop Tomcat from redirecting. If
yes, that will be zero code effort for our current implementation.
  

Why is it a problem for you to use http://localhost:8080/foo/ URL?

--
Mikolaj Rydzewski [EMAIL PROTECTED]


-
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: How to prevent Tomcat redirect my request

2008-11-20 Thread André Warnier

Mikolaj Rydzewski wrote:

jim ma wrote:
I still want to know if it is possible to  stop Tomcat from 
redirecting. If

yes, that will be zero code effort for our current implementation.
  

Why is it a problem for you to use http://localhost:8080/foo/ URL?

I agree with the above, but in case it is not an option, you may want to 
look at something like this :


http://www.tuckey.org/urlrewrite/

It does many more things, but I guess it can rewrite /foo into /foo/ 
internally too.



-
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: How to prevent Tomcat redirect my request

2008-11-20 Thread jim ma
On Thu, Nov 20, 2008 at 6:19 PM, Mikolaj Rydzewski [EMAIL PROTECTED] wrote:

 jim ma wrote:

 I still want to know if it is possible to  stop Tomcat from redirecting.
 If
 yes, that will be zero code effort for our current implementation.


 Why is it a problem for you to use http://localhost:8080/foo/ URL?


 Because I would like to let tomcat server http://localhost:8080/foo
successfully and do not reply a redirect response and resend that redirected
location .  It
is more efficient , right ?


 --
 Mikolaj Rydzewski [EMAIL PROTECTED]



 -
 To start a new topic, e-mail: users@tomcat.apache.org
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]




Re: How to prevent Tomcat redirect my request

2008-11-20 Thread jim ma
On Thu, Nov 20, 2008 at 6:48 PM, André Warnier [EMAIL PROTECTED] wrote:

 Mikolaj Rydzewski wrote:

 jim ma wrote:

 I still want to know if it is possible to  stop Tomcat from redirecting.
 If
 yes, that will be zero code effort for our current implementation.


 Why is it a problem for you to use http://localhost:8080/foo/ URL?

  I agree with the above, but in case it is not an option, you may want to
 look at something like this :

 http://www.tuckey.org/urlrewrite/

 It does many more things, but I guess it can rewrite /foo into /foo/
 internally too.



 -
 To start a new topic, e-mail: users@tomcat.apache.org
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]




Re: How to prevent Tomcat redirect my request

2008-11-20 Thread jim ma
On Thu, Nov 20, 2008 at 6:48 PM, André Warnier [EMAIL PROTECTED] wrote:

 Mikolaj Rydzewski wrote:

 jim ma wrote:

 I still want to know if it is possible to  stop Tomcat from redirecting.
 If
 yes, that will be zero code effort for our current implementation.


 Why is it a problem for you to use http://localhost:8080/foo/ URL?

  I agree with the above, but in case it is not an option, you may want to
 look at something like this :

 http://www.tuckey.org/urlrewrite/

 It does many more things, but I guess it can rewrite /foo into /foo/
 internally too.


 I  just debugged the code. It returns http status code 302 and redirected
location  http://localhost:8080/foo/ before reach the code related to url
rewrite configuration in web.xml .





 -
 To start a new topic, e-mail: users@tomcat.apache.org
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]




Re: How to prevent Tomcat redirect my request

2008-11-20 Thread André Warnier

jim ma wrote:

On Thu, Nov 20, 2008 at 6:48 PM, André Warnier [EMAIL PROTECTED] wrote:


Mikolaj Rydzewski wrote:


jim ma wrote:


I still want to know if it is possible to  stop Tomcat from redirecting.
If
yes, that will be zero code effort for our current implementation.



Why is it a problem for you to use http://localhost:8080/foo/ URL?

 I agree with the above, but in case it is not an option, you may want to

look at something like this :

http://www.tuckey.org/urlrewrite/

It does many more things, but I guess it can rewrite /foo into /foo/
internally too.



 I  just debugged the code. It returns http status code 302 and redirected
location  http://localhost:8080/foo/ before reach the code related to url
rewrite configuration in web.xml .


Yes, that's true of course. Stupid me.
Urlrewrite is a servlet filter, so it will not see the request before it 
has been directed to the webapp, and thus the redirect will happen before.

Duh.
I guess you would need some kind of re-directing Valve for that.

Now, about what Mikolaj wrote before (using the /foo/ URL) I think you 
misunderstand what he is saying.

What he meant is probably this :
You seem to be using a http client that is not a browser, but some kind 
of program or module.  Can you not make sure that this program or module 
does not send URLs like /foo, but itself transforms them into /foo/ 
at the source ?


-
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: How to prevent Tomcat redirect my request

2008-11-20 Thread jim ma
On Thu, Nov 20, 2008 at 10:24 PM, André Warnier [EMAIL PROTECTED] wrote:

 jim ma wrote:

 On Thu, Nov 20, 2008 at 6:48 PM, André Warnier [EMAIL PROTECTED] wrote:

  Mikolaj Rydzewski wrote:

  jim ma wrote:

  I still want to know if it is possible to  stop Tomcat from
 redirecting.
 If
 yes, that will be zero code effort for our current implementation.


  Why is it a problem for you to use http://localhost:8080/foo/ URL?

  I agree with the above, but in case it is not an option, you may want
 to

 look at something like this :

 http://www.tuckey.org/urlrewrite/

 It does many more things, but I guess it can rewrite /foo into /foo/
 internally too.


  I  just debugged the code. It returns http status code 302 and redirected
 location  http://localhost:8080/foo/ before reach the code related to url
 rewrite configuration in web.xml .

  Yes, that's true of course. Stupid me.
 Urlrewrite is a servlet filter, so it will not see the request before it
 has been directed to the webapp, and thus the redirect will happen before.
 Duh.
 I guess you would need some kind of re-directing Valve for that.


I also try to add a rewrite Valve to StandardEngine. And it is also does not
work . Before reach that Valve, tomcat already replied that
redirect response.



 Now, about what Mikolaj wrote before (using the /foo/ URL) I think you
 misunderstand what he is saying.
 What he meant is probably this :
 You seem to be using a http client that is not a browser, but some kind of
 program or module.  Can you not make sure that this program or module does
 not send URLs like /foo, but itself transforms them into /foo/ at the
 source ?


Yes , I can do that . If I get 302 response and write some code to resend
quest to the redirected location, then I can always get what I want . It is
not efficient , you know.  It needs to talk to tomcat server twice . Is
there shortcut way to do that ?


RE: How to prevent Tomcat redirect my request

2008-11-20 Thread Caldarale, Charles R
 From: jim ma [mailto:[EMAIL PROTECTED]
 Subject: Re: How to prevent Tomcat redirect my request

 If I get 302 response and write some code to resend
 quest to the redirected location

The point everyone's trying to make is that you should send the correct URL the 
*first* time, rather than sending one that doesn't comply with the HTTP spec 
and letting Tomcat correct it for you.

 - Chuck


THIS COMMUNICATION MAY CONTAIN CONFIDENTIAL AND/OR OTHERWISE PROPRIETARY 
MATERIAL and is thus for use only by the intended recipient. If you received 
this in error, please contact the sender and delete the e-mail and its 
attachments from all computers.

-
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]