You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Yaakov Chaikin <ya...@gmail.com> on 2005/04/15 13:59:56 UTC

Tomcat 5.5.x returns wrong value for request.getRequestURI()

Hi,

Using Tomcat 5.5.7 (tried Tomcat 5.5.9 with the same results) on Windows XP.

When forwarding to a JSP page that is located in
/WEB-INF/jsp/success.jsp and calling:
<%= request.getRequestURI() %> inside the success.jsp page, the result I get is:
/WEB-INF/jsp/success.jsp

I am pretty sure that according to the API, this is the wrong result.
It should have returned the URI of the **request**, not the path to
the resource.

Is this a known bug or there is some weird Tomcat setting that I need
to change. I ran this on Tomcat without changing any of the original
settings.

BTW, the same is true of request.getRequestURL(). It returns (peculiar enough):
http://localhost:8080/WEB-INF/jsp/success.jsp

Thanks,
Yaakov.

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org


Re: Tomcat 5.5.x returns wrong value for request.getRequestURI()

Posted by Yaakov Chaikin <ya...@gmail.com>.
Remy,

BTW, since which version of the spec has this change been instituted?

Thanks,
Yaakov.

On 4/15/05, Yaakov Chaikin <ya...@gmail.com> wrote:
> Oh, now I see what you are saying (in both cases.)
> 
> That clears it up for me. Thanks.
> 
> Yaakov.
> 
> On 4/15/05, Remy Maucherat <re...@gmail.com> wrote:
> > On 4/15/05, Yaakov Chaikin <ya...@gmail.com> wrote:
> > > > 1) Applies to the core request class behavior. Cool, it works. The RD
> > > > has to wrap it using a request wrapper, so it does not apply.
> > >
> > > So, what you are really saying is that the API should have pointed out
> > > that getRequestURL() does not work the same way every time. Then, I am
> > > not sure how anyone could have arrived at the conclusion that the
> > > words "... URL the **client** used to make the request..." really
> > > means "unless something else happens behind the scene" and the
> > > returned value is no longer what the **client** used. That doesn't
> > > seem strange to you, taking only into account what has been said?
> >
> > I'm just pointing out you're not actually using the same class. The
> > javadoc for the base class mentions the behavior of the non-wrapped
> > base request class. After going in the request dispatcher and
> > wrapping, this behavior is not the same.
> >
> > > > 2) How about trying things instead of making what-if theories ? (hint:
> > > > it works fine) ;)
> > >
> > > I haven't tried this particular part. True. I HAVE tried everything
> > > else I mentioned however. Are you saying that how things really work
> > > ONCE AGAIN is not the way the servlet spec describes they should?
> > > Quote 8.4.2:
> > > "If the forwarded servlet was obtained by using the getNamedDispatcher
> > > method, these attributes **must not be set.**"
> >
> > Well, the path values are simply set to the original ones, and,
> > indeed, there are no attributes.
> >
> > --
> > xxxxxxxxxxxxxxxxxxxxxxxxx
> > Rémy Maucherat
> > Developer & Consultant
> > JBoss Group (Europe) SàRL
> > xxxxxxxxxxxxxxxxxxxxxxxxx
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
> > For additional commands, e-mail: tomcat-user-help@jakarta.apache.org
> >
> >
>

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org


Re: Tomcat 5.5.x returns wrong value for request.getRequestURI()

Posted by Yaakov Chaikin <ya...@gmail.com>.
Oh, now I see what you are saying (in both cases.)

That clears it up for me. Thanks.

Yaakov.

On 4/15/05, Remy Maucherat <re...@gmail.com> wrote:
> On 4/15/05, Yaakov Chaikin <ya...@gmail.com> wrote:
> > > 1) Applies to the core request class behavior. Cool, it works. The RD
> > > has to wrap it using a request wrapper, so it does not apply.
> >
> > So, what you are really saying is that the API should have pointed out
> > that getRequestURL() does not work the same way every time. Then, I am
> > not sure how anyone could have arrived at the conclusion that the
> > words "... URL the **client** used to make the request..." really
> > means "unless something else happens behind the scene" and the
> > returned value is no longer what the **client** used. That doesn't
> > seem strange to you, taking only into account what has been said?
> 
> I'm just pointing out you're not actually using the same class. The
> javadoc for the base class mentions the behavior of the non-wrapped
> base request class. After going in the request dispatcher and
> wrapping, this behavior is not the same.
> 
> > > 2) How about trying things instead of making what-if theories ? (hint:
> > > it works fine) ;)
> >
> > I haven't tried this particular part. True. I HAVE tried everything
> > else I mentioned however. Are you saying that how things really work
> > ONCE AGAIN is not the way the servlet spec describes they should?
> > Quote 8.4.2:
> > "If the forwarded servlet was obtained by using the getNamedDispatcher
> > method, these attributes **must not be set.**"
> 
> Well, the path values are simply set to the original ones, and,
> indeed, there are no attributes.
> 
> --
> xxxxxxxxxxxxxxxxxxxxxxxxx
> Rémy Maucherat
> Developer & Consultant
> JBoss Group (Europe) SàRL
> xxxxxxxxxxxxxxxxxxxxxxxxx
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: tomcat-user-help@jakarta.apache.org
> 
>

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org


Re: Tomcat 5.5.x returns wrong value for request.getRequestURI()

Posted by Remy Maucherat <re...@gmail.com>.
On 4/15/05, Yaakov Chaikin <ya...@gmail.com> wrote:
> > 1) Applies to the core request class behavior. Cool, it works. The RD
> > has to wrap it using a request wrapper, so it does not apply.
> 
> So, what you are really saying is that the API should have pointed out
> that getRequestURL() does not work the same way every time. Then, I am
> not sure how anyone could have arrived at the conclusion that the
> words "... URL the **client** used to make the request..." really
> means "unless something else happens behind the scene" and the
> returned value is no longer what the **client** used. That doesn't
> seem strange to you, taking only into account what has been said?

I'm just pointing out you're not actually using the same class. The
javadoc for the base class mentions the behavior of the non-wrapped
base request class. After going in the request dispatcher and
wrapping, this behavior is not the same.

> > 2) How about trying things instead of making what-if theories ? (hint:
> > it works fine) ;)
> 
> I haven't tried this particular part. True. I HAVE tried everything
> else I mentioned however. Are you saying that how things really work
> ONCE AGAIN is not the way the servlet spec describes they should?
> Quote 8.4.2:
> "If the forwarded servlet was obtained by using the getNamedDispatcher
> method, these attributes **must not be set.**"

Well, the path values are simply set to the original ones, and,
indeed, there are no attributes.

-- 
xxxxxxxxxxxxxxxxxxxxxxxxx
Rémy Maucherat
Developer & Consultant
JBoss Group (Europe) SàRL
xxxxxxxxxxxxxxxxxxxxxxxxx

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org


Re: Tomcat 5.5.x returns wrong value for request.getRequestURI()

Posted by Yaakov Chaikin <ya...@gmail.com>.
On 4/15/05, Remy Maucherat <re...@gmail.com> wrote:
> On 4/15/05, Yaakov Chaikin <ya...@gmail.com> wrote:
> > I checked out the spec section 8.4.2 Forwarded Request Parameters.
> >
> > It does seem to me that it implies that the parameters is where one
> > would get the original URI from.
> >
> > However, there are still 2 problems that I can see:
> > 1) The API says: "URL the client used to make the request"
> > 2) 8.4.2 says that these parameters are NOT to be set if you obtain
> > the RequestDispatcher object using getNamedDispatcher() method. How
> > would you get at the original URI/URL then (without custom coding)?
> 
> This is not constructive argumentation.

I am not arguing with you. Tried it on WebLogic and it works exactly
as Tomcat does. So, obviously, you are right. I am just trying to
understand why you are right.

> 1) Applies to the core request class behavior. Cool, it works. The RD
> has to wrap it using a request wrapper, so it does not apply.

So, what you are really saying is that the API should have pointed out
that getRequestURL() does not work the same way every time. Then, I am
not sure how anyone could have arrived at the conclusion that the
words "... URL the **client** used to make the request..." really
means "unless something else happens behind the scene" and the
returned value is no longer what the **client** used. That doesn't
seem strange to you, taking only into account what has been said?

Seems pretty clear to me. Unless, I am overlooking some other part of
the spec that says something else. (Still bad since API didn't mention
it, but at least understandable.)

> 2) How about trying things instead of making what-if theories ? (hint:
> it works fine) ;)

I haven't tried this particular part. True. I HAVE tried everything
else I mentioned however. Are you saying that how things really work
ONCE AGAIN is not the way the servlet spec describes they should?
Quote 8.4.2:
"If the forwarded servlet was obtained by using the getNamedDispatcher
method, these attributes **must not be set.**"

Thanks,
Yaakov.

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org


Re: Tomcat 5.5.x returns wrong value for request.getRequestURI()

Posted by Remy Maucherat <re...@gmail.com>.
On 4/15/05, Yaakov Chaikin <ya...@gmail.com> wrote:
> I checked out the spec section 8.4.2 Forwarded Request Parameters.
> 
> It does seem to me that it implies that the parameters is where one
> would get the original URI from.
> 
> However, there are still 2 problems that I can see:
> 1) The API says: "URL the client used to make the request"
> 2) 8.4.2 says that these parameters are NOT to be set if you obtain
> the RequestDispatcher object using getNamedDispatcher() method. How
> would you get at the original URI/URL then (without custom coding)?

This is not constructive argumentation.

1) Applies to the core request class behavior. Cool, it works. The RD
has to wrap it using a request wrapper, so it does not apply.

2) How about trying things instead of making what-if theories ? (hint:
it works fine) ;)

-- 
xxxxxxxxxxxxxxxxxxxxxxxxx
Rémy Maucherat
Developer & Consultant
JBoss Group (Europe) SàRL
xxxxxxxxxxxxxxxxxxxxxxxxx

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org


Re: Tomcat 5.5.x returns wrong value for request.getRequestURI()

Posted by Yaakov Chaikin <ya...@gmail.com>.
I checked out the spec section 8.4.2 Forwarded Request Parameters.

It does seem to me that it implies that the parameters is where one
would get the original URI from.

However, there are still 2 problems that I can see:
1) The API says: "URL the client used to make the request"
2) 8.4.2 says that these parameters are NOT to be set if you obtain
the RequestDispatcher object using getNamedDispatcher() method. How
would you get at the original URI/URL then (without custom coding)?

Yaakov.

On 4/15/05, Trond G. Ziarkowski <tr...@gep-as.com> wrote:
> Hi,
> 
> "pretty sure" isn't always good enough ;) To get the uri that forwarded
> to the jsp you need to use
> <%=request.getAttribute("javax.servlet.forward.request_uri")%>. Check
> out the servlet 2.4 spec section 8.4 for more info.
> 
> 
> Trond
> 
> Yaakov Chaikin wrote:
> 
> >Hi,
> >
> >Using Tomcat 5.5.7 (tried Tomcat 5.5.9 with the same results) on Windows XP.
> >
> >When forwarding to a JSP page that is located in
> >/WEB-INF/jsp/success.jsp and calling:
> ><%= request.getRequestURI() %> inside the success.jsp page, the result I get is:
> >/WEB-INF/jsp/success.jsp
> >
> >I am pretty sure that according to the API, this is the wrong result.
> >It should have returned the URI of the **request**, not the path to
> >the resource.
> >
> >Is this a known bug or there is some weird Tomcat setting that I need
> >to change. I ran this on Tomcat without changing any of the original
> >settings.
> >
> >BTW, the same is true of request.getRequestURL(). It returns (peculiar enough):
> >http://localhost:8080/WEB-INF/jsp/success.jsp
> >
> >Thanks,
> >Yaakov.
> >
> >---------------------------------------------------------------------
> >To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
> >For additional commands, e-mail: tomcat-user-help@jakarta.apache.org
> >
> >
> >
> >
> >
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: tomcat-user-help@jakarta.apache.org
> 
>

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org


Re: Tomcat 5.5.x returns wrong value for request.getRequestURI()

Posted by "Trond G. Ziarkowski" <tr...@gep-as.com>.
Hi,

"pretty sure" isn't always good enough ;) To get the uri that forwarded 
to the jsp you need to use 
<%=request.getAttribute("javax.servlet.forward.request_uri")%>. Check 
out the servlet 2.4 spec section 8.4 for more info.


Trond

Yaakov Chaikin wrote:

>Hi,
>
>Using Tomcat 5.5.7 (tried Tomcat 5.5.9 with the same results) on Windows XP.
>
>When forwarding to a JSP page that is located in
>/WEB-INF/jsp/success.jsp and calling:
><%= request.getRequestURI() %> inside the success.jsp page, the result I get is:
>/WEB-INF/jsp/success.jsp
>
>I am pretty sure that according to the API, this is the wrong result.
>It should have returned the URI of the **request**, not the path to
>the resource.
>
>Is this a known bug or there is some weird Tomcat setting that I need
>to change. I ran this on Tomcat without changing any of the original
>settings.
>
>BTW, the same is true of request.getRequestURL(). It returns (peculiar enough):
>http://localhost:8080/WEB-INF/jsp/success.jsp
>
>Thanks,
>Yaakov.
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
>For additional commands, e-mail: tomcat-user-help@jakarta.apache.org
>
>
>
>  
>


---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org


Re: Tomcat 5.5.x returns wrong value for request.getRequestURI()

Posted by Yaakov Chaikin <ya...@gmail.com>.
Hmm...

How many ways are there to read this part of the spec:
******
public java.lang.StringBuffer getRequestURL()
Reconstructs the ******URL the client used to make the request.******
The returned URL
contains a protocol, server name, port number, and server path, but it does not
include query string parameters.
Because this method returns a StringBuffer, not a string, you can modify
the URL easily, for example, to append query parameters.
This method is useful for creating redirect messages and for reporting errors.
*******

On 4/15/05, Remy Maucherat <re...@gmail.com> wrote:
> On 4/15/05, Yaakov Chaikin <ya...@gmail.com> wrote:
> > Hi,
> >
> > Using Tomcat 5.5.7 (tried Tomcat 5.5.9 with the same results) on Windows XP.
> >
> > When forwarding to a JSP page that is located in
> > /WEB-INF/jsp/success.jsp and calling:
> > <%= request.getRequestURI() %> inside the success.jsp page, the result I get is:
> > /WEB-INF/jsp/success.jsp
> >
> > I am pretty sure that according to the API, this is the wrong result.
> > It should have returned the URI of the **request**, not the path to
> > the resource.
> >
> > Is this a known bug or there is some weird Tomcat setting that I need
> > to change. I ran this on Tomcat without changing any of the original
> > settings.
> >
> > BTW, the same is true of request.getRequestURL(). It returns (peculiar enough):
> > http://localhost:8080/WEB-INF/jsp/success.jsp
> 
> This is not a bug, as it's intentional, and hasn't been shown to
> contrdict the spec. The spec seems to hint that this should use the
> path elements (but is very vague). I didn't quite agree with the
> change, but didn't actually care about the issue, so you can try
> asking for clarifications to Sun or on tomcat-dev.
> 
> If you want to change that, hack the request wrapper code a little,
> it's very easy.
> 
> --
> xxxxxxxxxxxxxxxxxxxxxxxxx
> Rémy Maucherat
> Developer & Consultant
> JBoss Group (Europe) SàRL
> xxxxxxxxxxxxxxxxxxxxxxxxx
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: tomcat-user-help@jakarta.apache.org
> 
>

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org


Re: Tomcat 5.5.x returns wrong value for request.getRequestURI()

Posted by Remy Maucherat <re...@gmail.com>.
On 4/15/05, Yaakov Chaikin <ya...@gmail.com> wrote:
> Hi,
> 
> Using Tomcat 5.5.7 (tried Tomcat 5.5.9 with the same results) on Windows XP.
> 
> When forwarding to a JSP page that is located in
> /WEB-INF/jsp/success.jsp and calling:
> <%= request.getRequestURI() %> inside the success.jsp page, the result I get is:
> /WEB-INF/jsp/success.jsp
> 
> I am pretty sure that according to the API, this is the wrong result.
> It should have returned the URI of the **request**, not the path to
> the resource.
> 
> Is this a known bug or there is some weird Tomcat setting that I need
> to change. I ran this on Tomcat without changing any of the original
> settings.
> 
> BTW, the same is true of request.getRequestURL(). It returns (peculiar enough):
> http://localhost:8080/WEB-INF/jsp/success.jsp

This is not a bug, as it's intentional, and hasn't been shown to
contrdict the spec. The spec seems to hint that this should use the
path elements (but is very vague). I didn't quite agree with the
change, but didn't actually care about the issue, so you can try
asking for clarifications to Sun or on tomcat-dev.

If you want to change that, hack the request wrapper code a little,
it's very easy.

-- 
xxxxxxxxxxxxxxxxxxxxxxxxx
Rémy Maucherat
Developer & Consultant
JBoss Group (Europe) SàRL
xxxxxxxxxxxxxxxxxxxxxxxxx

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org