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.

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.

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.

Makub
-- 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Supercomputing Center Brno             Martin Kuba
Institute of Computer Science    email: [email protected]
Masaryk University             http://www.ics.muni.cz/~makub/
Botanicka 68a, 60200 Brno, CZ     mobil: +420-603-533775
--------------------------------------------------------------

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Odpovedet emailem