Dne 26. listopadu 2009 13:14 Martin Kuba <[email protected]> napsal(a):
> Oto Buchta napsal(a):
>> Zdar vsichni,
>> jsem asi potrefen sneznou slepotou skloubenou se sklenenou nemoci -
>> muze mne nekdo prosim nakopnout, jak inteligentneji udelat:
>>
>> request.getRequestURL().substring(0,request.getRequestURL().indexOf(request.getRequestURI()))+request.getContextPath()
>> ?
>>
>> request.getProtocol()+"://"+request.getLocalName()+":"+request.getLocalPort()+request.getContextPath()
>> za inteligentni nepovazuji.
>
> To líp nejde.
>
> Tedy, má to být
>
> req.getScheme()+"://"+req.getServerName()+":"+req.getServerPort()+req.getContextPath()
> protože request.getServerName() vrací jméno HTTP serveru z HTTP hlavičky 
> Host:,
> kdežto getLocalName() vrací jméno IP rozhraní.
> U name-based virtual hosts je to zásadní rozdíl.

Jasne, dik za opravu, ja moc v ukazce neresil, co bude jak pouzito,
psal jsem to z placu...

> Důvod, proč to nejde, je nejspíš v tom, že v samotném HTTP protokolu
> to URL není. Přijde totiž něco jako
>
> GET /contextPath/neco HTTP/1.1
> Host: www.moje.cz
>
> takže i Servlet API to musí skládat ze znalosti jestli to bylo SSL nebo ne,
> z hlavičky Host:, ze znalosti na jakém to bylo portu (ne vždy to trefí 
> správně,
> u Tomcatu za Apachem a mod_proxy v režimu http proxy to bude blbě),
> a z URI mezi GET a identifikací verze HTTP.

Toto je stara znama pisnicka - moc dobre vim, co jde v HTTP. Ano,
neznam AJP, abych vedel, jak to vyhodnoti. To, ze za mod_proxy to bude
neco jineho, je opet jasne - ale to neni problem, protoze pro TomCata
je to JEHO URL a on musi pracovat s tim ,co mu prijde. Presto jsem
ocekaval, ze to pujde nejak inteligentneji. Preci jenom by container
mohl mit vice informaci nez ja...

No co uz. Dik za odpoved.

> Mimochodem, jako pamětník jistě oceníš, že kdysi dávno znamenalo URI
> část URL, kdežto dneska je URI nadmnožina URL. Metoda getRequestURI() je toho 
> němým důkazem.

Jakozto pametnik si na tuto zmenu i pres sklenenou nemoc moc dobre pamatuju ;-)

-- 
Oto 'tapik' Buchta, [email protected], http://tapikuv.blogspot.com

Odpovedet emailem